100 free credits on signup · no card required

TikTok Download API

One URL in. Clean JSON out.

This endpoint is currently blocked and does not return a media URL. TikTok stopped exposing platform-CDN video links in the places we read, so calls return an error while the media pipeline is rebuilt around our own storage. Failed calls are never charged, so nothing you send here costs you anything today — but nothing works either, and we would rather say that on the page than take your credits.

Credits 7 / video
Input ?url=
Cache 7d
GET · BEARER
Request composing…
Cached 7 days
media URLs ~1h

Availability: Temporarily unavailable: TikTok stopped exposing platform-CDN media URLs and this endpoint currently returns an error while we rebuild the media pipeline. Failed calls are never charged.

Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<div class="css-1qb2n7d-DivItemContainer e148ts220" data-e2e="recommend-list-item"><div class="css-x6y88p-DivContainer"><a class="css-1g95xhm-AVideoContainer" href="/@tiktok/video/7231338487075638570"><video src="blob:https://www.tiktok.com/8f3a..."></video></a></div><div class="css-1f5bbrz-DivCardFooter"><strong data-e2e="video-views" class="css-ws4x78">1.2M</strong><strong data-e2e="like-count">88.4K</strong><strong data-e2e="comment-count">2,314</strong></div><h3 class="css-1yy6f0h">Behind the scenes of our new feature</h3><script id="__UNIVERSAL_DATA_FOR_REHYDRATION__" type="application/json">{"__DEFAULT_SCOPE__":{"webapp.video-detail"...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 4 typed fields
{
"data": {
"platform": "tiktok",
"entity_id": "7231338487075638570",
"media_url": "https://cdn.example/video/master.mp4?sig=...",
"mime_type": "video/mp4",
"expires_at": "2026-07-15T13:00:00Z",
"warning": "media_url is short-lived (max 1h) — download promptly or re-request."
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 A URL, not a file

When it works, the response is deliberately small: the video id, one direct media URL, the runtime in seconds, and a short note reminding you the link expires. It is not a stats call and it does not hand you a file. You get a URL and you are expected to fetch it yourself, immediately, with your own HTTP client.

02 Why it returns zero items

Right now that object is not produced. The normalizer requires a media URL that lives on the platform's own CDN, and it rejects anything hosted by an intermediary — a vendor-hosted copy is not a real download and shipping one would mean handing you a link we do not control. With no qualifying URL in the upstream payload, the endpoint yields zero items and the request fails.

03 Documented for the rebuild

The fields below are documented so you can write your integration against the eventual shape. Treat them as a contract we intend to honour, not as behaviour you can rely on this week.

Field explorer Pick a key to see its type and the caveats.
string Always set Per item
note

Fixed human-readable warning that media_url is short-lived. Present on every successful response; safe to ignore in code.

{
"id": "…",
"media_url": "https://cdn.example/video/master.mp4?sig=...",
"duration_sec": 0,
"note": "…"
}
Good fit

Reach for this when

  • Archiving your own TikTok posts to object storage on a schedule, so you keep a copy independent of the platform.
  • Feeding video into your own processing chain — frame extraction, ad-creative analysis, an internal model — where you need the actual bytes rather than metadata.
  • Rights and compliance work where a team needs to keep evidence of a public post as it appeared, alongside its stats.
  • Building a review UI that plays a video without embedding TikTok's player and its tracking.
Different job?

There's an endpoint for that

  • You need this working today. It does not. Nothing here is a workaround; there is no flag that makes it return a URL.
  • You want the spoken words, not the file — use the TikTok Transcript API, which runs its own media pipeline internally and is unaffected by this outage.
  • You want views, likes, comments, shares and saves for a video — that is the TikTok Stats API.
  • You want the same capability on another platform while this is down — the Instagram Download API and the Facebook Download API are separate endpoints with their own media paths.

Pricing

Start free, pay for what comes back

When it worked, one video was 7 credits — about 3.5¢ on the monthly plan, roughly 143 videos per $5. While the endpoint is blocked every call errors, and failed calls are never charged.

Estimate your bill
$21/ month
30 videos/day × 7 credits × 365 days = 76,650 credits/yr, or $249/yr on the annual plan plus 65 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 76,650
Plan Annual $54/yr
Per video

Estimate only, on a full-year basis. 7 credits per returned video. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

The upstream video payload no longer carries a platform-CDN address. The fields that used to hold it come back empty, and the only media link available is a copy hosted by an intermediary. We refuse to return that: it is not TikTok's file, it is not durable, and passing it through would misrepresent where your bytes come from.

The fix is to proxy media through our own storage so the URL we hand you is one we actually operate. That work is underway. Until it ships, every call to /v1/tiktok/download returns an error, and the error costs you 0 credits.

There is no ETA on this page because we have been wrong about ETAs before. Check the endpoint again rather than trusting a date we printed in marketing copy.

Assume the signed link is dead within minutes. Do not store media_url in a database and fetch it from a nightly job — store the video id, call again, download in the same process. Any architecture that puts hours between the API response and the GET will fail intermittently and look like our bug.

If your download runs on a different host from your API call, make sure that host can reach the CDN directly. A link issued to one network and used from another can be rejected.

We read the same public video page you can open logged out. Private videos, deleted videos and region-restricted videos are unreachable, and we do not attempt to work around that. We also make no claim about whether the returned file carries a watermark — that is decided by what TikTok publishes, not by us.

Downloading a video does not give you the right to republish it. Copyright in the video belongs to whoever made it. Archiving your own content or keeping evidence is one thing; reuploading someone else's clip is your legal problem, not ours.

This endpoint sits in the near-immutable cache class, because a video's file does not change once posted. That is the right classification for the metadata and the wrong one for a signed URL, which is why a cached hit would still need a fresh link. It is another reason the rebuild routes media through storage we control rather than caching a link that rots.

Errors are not cached and not charged, so retrying while the endpoint is blocked is harmless and pointless in equal measure.

Questions

Frequently asked

No. TikTok stopped exposing platform-CDN media URLs where we read them, so the endpoint returns an error instead of a link. We have left the page and the documented response shape up so you can build against it, but do not plan a launch around it. Failed calls are never charged, so testing it costs you nothing beyond the round trip.

7 credits per video when it works. Credits are $0.005 each on monthly billing and $0.0045 on annual, so roughly 3.5 cents a video. It costs more than the stats call because fetching video is heavier work upstream. While the endpoint is blocked you are charged nothing at all, because errors are never billed.

We make no promise either way. The endpoint returns whatever file the public page exposes; whether that copy carries a watermark is TikTok's decision and it has changed more than once. Anyone guaranteeing a permanently watermark-free file is describing a behaviour they do not control. This is moot at the moment anyway, since the endpoint is returning errors.

Because streaming large binaries through a JSON API is a bad shape for both of us. You get a direct link and fetch it with your own client, which means no size ceiling from us, no double transfer, and a download you can resume. The tradeoff is that the link is short-lived, so fetch it immediately rather than storing it for later.

Yes. The TikTok Transcript API is unaffected. It reads TikTok's caption track and returns the spoken words as plain text — flat text, not timed segments — so anything you were planning to build on top of downloaded audio can usually be built on the transcript instead. If you need the visual frames rather than the words, there is no substitute and you will have to wait.

No. We read public pages logged out, with no session and no credentials. If a video is private, deleted or blocked in the region we read from, it is not reachable and the call returns an error rather than a partial result. That limit is deliberate and will still apply once the media pipeline is rebuilt.

Nothing is deducted. Billing happens on a successful, non-empty response, so an error or a zero-item result is free. That policy is why we can leave a blocked endpoint live without it being a trap: you can call it, see it fail, and move on without a line on your invoice.

Next

Pairs well with

Full TikTok API reference →
/v1/tiktok/transcript
TikTok Transcript API Full transcript of a TikTok video with timestamped segments. 8 cr / video
/v1/tiktok/stats
TikTok Stats API Views, likes, comments and shares for a single TikTok video. 3 cr / video
/v1/instagram/download
Instagram Download API Resolves a downloadable media URL for an Instagram reel (URL expires within 1h). 40 cr / video
/v1/facebook/download
Facebook Download API Resolves a downloadable media URL for a Facebook video (URL expires within 1h). 10 cr / video

More TikTok endpoints

/v1/tiktok/transcript Full transcript of a TikTok video with timestamped segments. 8 credits / video /v1/tiktok/summary Short AI summary of a TikTok video, built on its transcript. 10 credits / video /v1/tiktok/stats Views, likes, comments and shares for a single TikTok video. 3 credits / video /v1/tiktok/comments Paginated comments on a TikTok video; charged per comment returned. 2 credits / comment /v1/tiktok/channel-stats Follower counts and profile metadata for a TikTok account. 3 credits / profile /v1/tiktok/channel-videos Latest videos from a TikTok account with per-video metrics. 3 credits / video /v1/tiktok/search Keyword search over TikTok videos. 4 credits / result /v1/tiktok/hashtag-search Videos posted under a TikTok hashtag. 3 credits / result

Try the TikTok Download endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/tiktok/download
Get your free API key