Developer API
The same engines that power this site, exposed as a REST API. Built for Telegram bots, download managers, and bulk automation.
What it can download
| Source | Works | Notes |
|---|---|---|
| TikTok | Verified | no watermark; audio-only available. Verified end-to-end: 2.9 MB MP4 fetched with a valid ftyp header. |
| Verified | image pins, video pins, and story pins. Returns status: "picker" with an assets[] array. Verified: 67 KB and 198 KB originals pulled from i.pinimg.com/originals/. | |
| Douyin | Unavailable | the web API needs an a_bogus request signature that neither engine implements, so cookies alone are not enough. Requests return 502 engine_error. |
| Bilibili | Verified | works with a signed-in session, including b23.tv short links. DASH video + audio are merged on the fly. Verified end-to-end: 3 MB streamed with a valid ftyp header. |
| YouTube | Partial | public videos work; age-restricted or sign-in-required ones return 401 link.login. |
Authentication
Send your key in either header. Each successful call decrements your quota by 1.
Authorization: Bearer dl_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # or X-API-Key: dl_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Check your remaining quota at any time (this call is free):
curl https://downloadall.app/api/v1/keys?key=dl_xxx
POST /api/v1/analyze
Resolve a shared link into a downloadable URL. Costs 1 call.
Request body
{
"url": "https://www.tiktok.com/@user/video/123",
"downloadMode": "auto", // "auto" | "audio" | "mute"
"videoQuality": "1080", // optional
"audioFormat": "mp3", // optional
"audioBitrate": "128" // optional
}Single media response
{
"ok": true,
"status": "tunnel",
"url": "https://...signed-tunnel-url...",
"filename": "video.mp4",
"title": "Original title"
}Multi-asset response (Pinterest story pins)
When a pin holds several images or videos, the API returns a picker instead of a single file — pick one and pass it back to /api/v1/download.
{
"ok": true,
"status": "picker",
"title": "Pin title",
"assets": [
{ "type": "image", "url": "https://...", "thumb": "https://...", "format": "jpg" }
]
}Errors
All errors use HTTP status codes and a consistent body:
{
"error": {
"code": "link.unsupported",
"message": "This platform is not supported by the API yet."
}
}| Status | code | Meaning |
|---|---|---|
| 400 | missing_url | no url in body |
| 401 | invalid_api_key | key missing or revoked |
| 401 | link.login | source needs a login |
| 422 | link.unsupported | platform not supported |
| 429 | quota_exceeded | plan limit reached |
| 429 | link.rate_limit | the source is rate limiting us; retry shortly |
| 503 | engine.unavailable | engine temporarily down; retry |
GET /api/v1/download
Streams the media file through our server. Costs 1 call.
Important: call this from the same server that called analyze.
Tunnel URLs are signed and validate the requesting IP. Fetching them from a different machine returns 403. That means your bot and its API client must live on the same host (or your API client must proxy through it).
curl -L -H "X-API-Key: dl_xxx" \ "https://downloadall.app/api/v1/download?u=<tunnel-url>&filename=video.mp4" \ -o video.mp4
Supports Range requests, so resumable downloads work.
Pricing
| Plan | Price | Calls / period | Rate limit |
|---|---|---|---|
| Free | $0 | 20 | 5 req/min |
| Starter | $9.9 | 1,000 | 30 req/min |
| Pro | $49 | 10,000 | 120 req/min |
The billing period runs monthly and resets on the 21st, aligned with our infrastructure cycle. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset.
Reselling the API as your own service is not permitted without a written agreement — see the Terms.
End-to-end example
# 1. resolve the link
curl -X POST https://downloadall.app/api/v1/analyze \
-H "X-API-Key: dl_xxx" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.tiktok.com/@user/video/123"}'
# -> {"ok":true,"status":"tunnel","url":"https://...","filename":"v.mp4"}
# 2. download it (same machine)
curl -L -H "X-API-Key: dl_xxx" \
"https://downloadall.app/api/v1/download?u=<paste-url>&filename=v.mp4" \
-o v.mp4