scraped_at to assess when each result was collected.
Endpoints
Sound metadata uses the TikTok sound clip ID, not an album or recording ID. Unknown fields are
null; audio and cover URLs are temporary upstream links, not durable downloads.
Use a video’s music.music_id to request sound metadata or videos using that sound. Keep the ID as a string: converting it to a JavaScript number can lose precision. A null ID means the sound cannot be identified from that response.
To list videos using a sound, pass its clip ID as music_id to
GET /v1/raw/tiktok/music/videos. The response contains data.music_id,
data.videos, data.has_more, data.next_cursor, and data.scraped_at.
Continue with the returned cursor and the same music ID. Duplicate videos are
preserved; each successful page, including an empty page, costs 0.2 account credits.
Video media links are temporary.
Stop pagination on 404 not_found, including when a previous page returned
has_more: true. A continuation cursor does not guarantee another available page.
A 404 is an error, not proof that you retrieved every video. Account billing does
not charge for that failed page; settled x402 and MPP payments are not refunded.
query of 1–100 characters and an optional opaque cursor.
Pass next_cursor with the same query to continue. Results include profile identity,
biography, verification, and audience counts; unknown fields are null, not zero.
Each successful page costs 0.2 credits, including an empty page.
Video search uses the same query and cursor parameters at
GET /v1/raw/tiktok/search/videos. Results are relevance-ordered and returned in
data.videos, using the same video fields as video lookup. Duplicate results are
preserved. Keep the query unchanged across pages and use has_more and
next_cursor, not the number of videos, to determine whether to continue.
Hashtag videos use GET /v1/raw/tiktok/hashtag/videos with a hashtag name
without # or spaces. The response contains data.hashtag, data.videos,
has_more, and next_cursor. Keep the hashtag unchanged when continuing.
Each successful page costs 0.2 account credits, including empty pages.
GET /v1/raw/tiktok/video/captions?url=.... This never generates a transcript. Unavailable captions return 404 transcript_not_available; successful cached captions cost the ordinary 0.2-credit rate. Use the transcript endpoint when you want automatic transcription if captions are unavailable.
One credit is $0.01. See Pricing for billing and payment-rail rules.
The listed credit price applies to each successful response, including one that reuses recent source data.
TikTok content is always resolved against the US region. The optional region
parameter is retained for compatibility and only accepts US.
Fetch a profile
Pass a bare username or include the leading@.
List profile videos
next_cursor back as cursor while has_more is true. Each request returns the complete source page. Cursors are opaque, so store and return the value unchanged.
Keep the same resource and query options for every page. Cursors may contain up to 2,048 characters and are temporary; do not reuse them for another profile, video, or sort order. If a cursor is invalid or expired, restart pagination without it.
Each video has a stable video_id, canonical TikTok URL, author, description, timestamps, engagement counts, hashtags, music metadata, and media fields. Slideshows use media_type: "slideshow" and place image URLs in images.
Fetch one video and its file URL
Pass the TikTok URL as a query parameter.data.video.video_url contains a directly downloadable media URL when the source exposes one. The URL is signed and temporary. Download the file promptly instead of storing the URL for later use. video_url is null when no downloadable video stream is available, including slideshow-only posts.
Fetch comments
next_cursor for the next source page.
video_id can be null when a short share URL returns an empty comment page and the source does
not provide the resolved video ID.
Fetch comment replies
comment_id from the comments response. IDs starting with synthetic_ cannot be used to fetch replies. The response contains video_id, parent_comment_id, comments, total, has_more, next_cursor, and scraped_at. Keep the video URL and parent ID unchanged when passing next_cursor to fetch another page. Each successful page costs 0.2 credits, including an empty final page. An invalid or expired cursor returns 400; restart without a cursor.
Fetch a transcript
source is captions or generated, and language reports the detected language. The detected-language transcript is reused on later requests. Every delivered transcript costs 2.5 credits, including a reused response. This is a flat price within the supported processing limits, not a per-minute charge.
Transcript generation can run for up to 180 seconds. Set a timeout of at least 190 seconds when you call this endpoint with a custom HTTP client. The generated Influship SDK uses a 210-second default timeout.
Automatic generation supports videos up to 10 minutes long. Longer videos without usable captions return 422 transcription_limit_exceeded; increasing your client timeout does not remove this limit.
Batch videos and transcripts
Send 1–20 URLs toPOST /v1/raw/tiktok/videos, or 1–10 URLs to
POST /v1/raw/tiktok/video/transcripts. Transcript batches accept mode: "auto"
(the default) or mode: "captions". Captions mode never generates a transcript.
data.requested, data.succeeded, data.failed, and ordered
data.items. Each item contains its input url, a success boolean, and either
data or an error status and error. Transcript batches also return data.mode.
An HTTP 200 batch can contain failed items, including an entirely failed batch;
check each item rather than only the HTTP status.
Duplicate URLs remain separate entries. API-key and OAuth billing counts successful
entries only. x402 and MPP quote all requested entries and do not refund settled
payments for failed items. The premium is applied to the total batch price, rounded
up once to whole cents with a one-cent minimum. Ten auto transcripts quote $0.30;
ten caption-only transcripts quote $0.03. Retry only the entries you need, and
remember that each new premium payment is a separate charge.
URL and retry rules
Video-level endpoints accept HTTPS URLs ontiktok.com and its subdomains, including vm.tiktok.com and vt.tiktok.com. Other hosts return 400 validation_error before the source request runs.
Retry
503 responses with bounded exponential backoff and jitter. Do not automatically retry 400, 403, 404, 422, or 502 upstream_contract_broken. Retrying a settled x402 or MPP request requires another payment; use account billing when you need successful-operations-only charging.
Payment rails
The endpoints accept API keys, OAuth, x402, and MPP when those payment methods are enabled. API-key and OAuth requests are charged for successful operations. x402 and MPP use the advertised request price once payment settles, including when the final endpoint response is an error. A successful x402 settlement returns aPAYMENT-RESPONSE header, while MPP returns a Payment-Receipt. See x402 and MPP before choosing a no-key rail.