TikTok Music Posts API
List TikTok videos that use a specific sound — caption, author, exact engagement, canonical hashtags, and mentions, with cursor pagination.
Paste a TikTok music/sound URL and get the public videos that use that sound as structured JSON, straight from TikTok's own music feed (native only — there is no backup path). TikTok serves this feed in short pages of a few videos each, so a call returns what lands within ~35s plus a nextCursor; keep paging to collect more. pagination says where you stand: cursor (more pages — hasMore true), end (TikTok's feed for this sound is exhausted — hasMore false), unavailable (cannot tell — hasMore null, never a false "no more posts"). Coverage is limited to what TikTok's public feed exposes, which can be far below the count shown in the app. Every row has one schema: permalink is always url, author is the full eight-key card, and caption / publishedAt / thumbnailUrl / durationSeconds / mediaUrlsExpireAt / hasWatermark / locationCreated are always keyed. Unread engagement counters are null with *IsApproximate: null — never 0 flagged exact. limit is 1–50 (outside that is a 400). When TikTok's feed refuses us, the answer is 503 UPSTREAM_UNAVAILABLE with Retry-After and the real elapsed time (reason native_unavailable, page_miss or timeout) at 0 credits. Photomode covers are mediaType=photo with a /photo/ permalink. Flat 2 credits per successful call.
Request
- Base URL: https://api.captapi.com
- URL: https://api.captapi.com/v1/tiktok/music-posts
- Auth: one of:
- HTTP bearer
- API key in header X-API-Key
Query parameters
TikTok music/sound URL, e.g. https://tiktok.com/music/name-ID. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble.
Most videos to return (default 20, 1–50; outside that range is a 400). TikTok serves this feed in short pages, so a call can return fewer than limit with a nextCursor to continue. Flat 2 credits per call.
Pagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response. hasMore is true only when nextCursor is present.
Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.
Response
Success. The data object for this endpoint.
Changes
No recorded changes to this operation across all 3 revisions of this API.