TikTok · Guide

How to get TikTok music posts

TL;DR
To get TikTok music posts, sign up for a free Captapi key, then send one GET request to /v1/tiktok/music-posts with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. List TikTok videos that use a specific sound — caption, author, exact engagement, canonical hashtags, and mentions, with cursor pagination.

How to get TikTok music posts (step by step)

  1. 1

    Get a free API key

    Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.

  2. 2

    Call the TikTok Music Posts API

    Send an authenticated GET request to /v1/tiktok/music-posts with your input. No OAuth, no scraping setup.

  3. 3

    Read the JSON response

    Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.

Code example

curl "https://api.captapi.com/v1/tiktok/music-posts?url=https%3A%2F%2Fwww.tiktok.com%2Fmusic%2Foriginal-sound-7646812079113898783" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

What the response looks like

{
  "success": true,
  "data": {
    "url": "https://www.tiktok.com/music/original-sound-7646812079113898783",
    "musicId": "7646812079113898783",
    "musicName": "original sound - khaby.lame",
    "totalReturned": 2,
    "posts": [
      {
        "platform": "tiktok",
        "url": "https://www.tiktok.com/@khaby.lame/video/7646812028874673439",
        "id": "7646812028874673439",
        "caption": "Thank you, please come again!!!🙋🏿‍♂️💸#learnfromkhaby #comedy",
        "publishedAt": "2026-06-02T14:56:35.000Z",
        "durationSeconds": 29.534,
        "thumbnailUrl": "https://p16-common-sign.tiktokcdn.com/tos-useast8-p-0068-tx2/oUAHVIiQDac8uC75AEfyALAA1FrTAqEEQ3GRPe~tplv-tiktokx-cropcenter-q:300:400:q70.webp?dr=14782&refresh_token=dae473d0&x-expires=1785171600&x-signature=fF8KccMCj5i1KJP7krB7JRx2xG0%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=f6441914&idc=my2&biz_tag=tt_video&s=MUSIC_AWEME&sc=cover",
        "mediaType": "video",
        "width": 576,
        "height": 1024,
        "videoUrl": "https://v16-webapp-prime.tiktok.com/video/tos/useast8/tos-useast8-ve-0068c004-tx2/osABAiDgQEbQItAyAFeBfiAXnEBQDEfKGQIgSE/?a=1988&expire=1785171600",
        "downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/useast8/tos-useast8-ve-0068c004-tx2/osABAiDgQEbQItAyAFeBfiAXnEBQDEfKGQIgSE/?a=1988&expire=1785171600",
        "downloadUrlNoWatermark": null,
        "hasWatermark": true,
        "mediaUrlsExpireAt": "2026-07-27T17:00:00.000Z",
        "author": {
          "id": "127905465618821121",
          "secUid": "MS4wLjABAAAAwAg0rOj4qHjHBN4BQLRlTaNI0dpqRuTrNi-TM0LKNpc",
          "username": "khaby.lame",
          "displayName": "Khabane lame",
          "url": "https://www.tiktok.com/@khaby.lame",
          "followers": null,
          "verified": true,
          "profileImage": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter-q:1080:1080:q70.webp?dr=10796&idc=my2&ps=87d6e48a&refresh_token=bc21b726&s=MUSIC_AWEME&sc=avatar&shcp=f6441914&shp=d05b14bd&t=223449c4&x-expires=1785171600&x-signature=D%2FanX%2BEAwPGclXui5sL48ejAGUk%3D",
          "region": "IT"
        },
        "engagement": {
          "views": 17042375,
          "likes": 1550817,
          "comments": 16306,
          "shares": 16050,
          "saves": 62013,
          "viewsIsApproximate": false,
          "likesIsApproximate": false,
          "commentsIsApproximate": false,
          "sharesIsApproximate": false,
          "savesIsApproximate": false,
          "downloads": 7108
        },
        "hashtags": [
          "learnfromkhaby",
          "comedy"
        ],
        "mentions": [],
        "musicAuthor": "Khabane lame",
        "locationCreated": "IT",
        "descLanguage": null,
        "isAd": false,
        "isPaidPartnership": false
      },
      {
        "platform": "tiktok",
        "url": "https://www.tiktok.com/@babi_batox/video/7657210703262010631",
        "id": "7657210703262010631",
        "caption": "Obrigado, volte sempre; THank you, come again #aprender #khaby #comed #badi_xatox #humor",
        "publishedAt": "2026-06-30T15:28:22.000Z",
        "durationSeconds": 16.467,
        "thumbnailUrl": "https://p16-common-sign.tiktokcdn.com/tos-alisg-p-0037/oYw7iFBEEQ6IgRQz9Hf7QL2ARZkHqDcQBBfSBw~tplv-tiktokx-cropcenter-q:300:400:q70.webp?dr=14782&refresh_token=5cbaa5e5&x-expires=1785171600&x-signature=Zg1zQ4AppOFWvrVz6mtVoWf0Bbk%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=f6441914&idc=my2&biz_tag=tt_video&s=MUSIC_AWEME&sc=cover",
        "mediaType": "video",
        "width": 576,
        "height": 1024,
        "videoUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-0037/o4ABCDfQEBgIiAfQnEAXyBQDtAyAeGQIgKE/?a=1988&expire=1785171600",
        "downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/alisg/tos-alisg-ve-0037/o4ABCDfQEBgIiAfQnEAXyBQDtAyAeGQIgKE/?a=1988&expire=1785171600",
        "downloadUrlNoWatermark": null,
        "hasWatermark": true,
        "mediaUrlsExpireAt": "2026-07-27T17:00:00.000Z",
        "author": {
          "id": null,
          "secUid": null,
          "username": "babi_batox",
          "displayName": "Loreno_Cavela",
          "url": "https://www.tiktok.com/@babi_batox",
          "followers": null,
          "verified": false,
          "profileImage": "https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/12b7a3027b147743a04d2dcd50302b61~tplv-tiktokx-cropcenter-q:1080:1080:q70.webp?dr=10796&idc=my2&ps=87d6e48a&refresh_token=06f16ad2&s=MUSIC_AWEME&sc=avatar&shcp=f6441914&shp=d05b14bd&t=223449c4&x-expires=1785171600&x-signature=QOi7%2FEEgi7Th2wcfyTFLX0QLv%2B4%3D",
          "region": "BR"
        },
        "engagement": {
          "views": 2334,
          "likes": 127,
          "comments": 2,
          "shares": 0,
          "saves": 6,
          "viewsIsApproximate": false,
          "likesIsApproximate": false,
          "commentsIsApproximate": false,
          "sharesIsApproximate": false,
          "savesIsApproximate": false
        },
        "hashtags": [
          "aprender",
          "khaby"
        ],
        "mentions": [],
        "musicAuthor": "Khabane lame",
        "locationCreated": "BR",
        "descLanguage": "pt",
        "isAd": false,
        "isPaidPartnership": false
      }
    ],
    "nextCursor": "20",
    "hasMore": true,
    "pagination": "cursor"
  }
}

Billing metadata (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.

Request parameters

NameTypeRequiredDescription
urlstring YesTikTok 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.
limitintegerNoMost 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.
cursorstringNoPagination 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.
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

Frequently asked questions

What does the TikTok Music Posts API do?

The TikTok Music Posts API lets you list items in bulk with metadata from a public TikTok sound or track using one GET request to /v1/tiktok/music-posts. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the TikTok Music Posts API cost?

Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.

Do I need a TikTok API key or OAuth?

No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle access, rate limits, retries, and authentication for you.

Why were likes and saves 0 on a 2-million-view video?

That was an unread counter coerced to 0 and flagged exact. Missing likes/saves are now null with *IsApproximate: null. A real zero (the path sent 0) still reads 0 / false. Do not rank by engagement when the flag is null.

I asked for 20 videos and got 6. Is that everything?

No — check pagination. TikTok serves this feed a few videos per page, so a call returns what lands within ~35s. pagination: "cursor" means pass nextCursor for more; "end" means TikTok's public feed for this sound is exhausted. That feed can stop far below the count the app shows, so a sound with thousands of uses may only expose a few hundred.

Why is hasMore null?

hasMore is true with pagination "cursor", false with "end", and null with "unavailable" — when we cannot tell, we say so rather than claim there are no more posts. Before October 2026 hasMore was always a boolean and false could also mean "this page cannot be continued".

I got a 503. Was I charged?

No. A 503 UPSTREAM_UNAVAILABLE (reason native_unavailable, page_miss or timeout) is 0 credits and the message states how long we actually waited. It is not a bad sound URL: retry after the Retry-After seconds, and for page_miss retry the same nextCursor.

Is the TikTok Music Posts API suitable for production use?

Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.

Ready to get TikTok music posts?

Start free with 100 credits — no credit card required.

Get your free API key