Skip to main content
The TikTok live endpoints return normalized profile and video data. The API can reuse recent source data, so use 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.
An empty terminal page has this shape:
User search accepts a 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.
For captions only, call 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 @.
The response includes the stable TikTok user ID, username, display name, biography, profile URL, audience counts, verification, privacy, and business status.

List profile videos

Pass 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.
For a regular video, 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

Comments include text, creation time, likes, replies, pinned status, and normalized author data. Use 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

Use a numeric 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 to POST /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.
The response has 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 on tiktok.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 a PAYMENT-RESPONSE header, while MPP returns a Payment-Receipt. See x402 and MPP before choosing a no-key rail.