Overview
All endpoints are served from the same origin. Responses are JSON unless you're downloading a file, which streams the binary directly with a Content-Disposition attachment header.
POST /api/info
Fetch the title, thumbnail, duration, and available formats for a supported link.
Request body
{
"url": "https://www.youtube.com/watch?v=..."
}Example
curl -X POST /api/info \
-H "Content-Type: application/json" \
-d '{"url":"https://youtu.be/aqz-KE-bpKQ"}'Response (shape)
{
"id": "aqz-KE-bpKQ",
"title": "Big Buck Bunny",
"uploader": "Blender",
"durationSeconds": 635,
"thumbnail": "https://...",
"platform": "youtube",
"webpageUrl": "https://...",
"formats": [
{
"id": "137",
"selector": "137+bestaudio[ext=m4a]/137",
"ext": "mp4",
"kind": "video", // "video" | "audio" | "other"
"label": "1080p",
"detail": "mp4 · 60fps",
"filesizeApprox": 245690000
}
]
}GET /api/download
Download and convert a single format. The values come straight from a format object returned by /api/info.
Query parameters
url— the source page URLselector— the yt-dlp format selector from the format objectext— target container, e.g.mp4kind—video,audio, orothertitle— used for the download filenameconvert— optional; set tomp3to extract audio as MP3quality— optional MP3 bitrate:128,192,256, or320
Example — 320kbps MP3
GET /api/download?url=https://youtu.be/aqz-KE-bpKQ
&selector=bestaudio/best
&ext=mp3&kind=audio&convert=mp3&quality=320
&title=My%20TrackThe response streams the file. High-resolution video formats are merged with audio on the server before the download begins, so the first byte may take several seconds for large files.
Errors
Failed requests return a JSON body with an error message and an appropriate HTTP status (for example 400 for a bad request or 422 if the media can't be read).
Fair use
The API powers this website and is intended for personal use. Automated, high-volume, or commercial scraping may be rate-limited or blocked. See our Terms of Service.