TikTok · Guide

How to get TikTok video details

TL;DR
To get TikTok video details, sign up for a free Captapi key, then send one GET request to /v1/tiktok/video-details with your input. You get clean JSON back in seconds for 1 credit per call — no OAuth, scraping or platform SDKs. Get everything about one TikTok video from its URL — caption, view/like/comment/share/save counts, creator, sound, hashtags, and thumbnail.

How to get TikTok video details (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 Video Details API

    Send an authenticated GET request to /v1/tiktok/video-details 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/video-details?url=https%3A%2F%2Fwww.tiktok.com%2F%40khaby.lame%2Fvideo%2F7646812028874673439" \
  -H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."

What the response looks like

{
  "success": true,
  "data": {
    "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://p19-common-sign.tiktokcdn-us.com/tos-useast8-p-0068-tx2/oUAHVIiQDac8uC75AEfyALAA1FrTAqEEQ3GRPe~tplv-tiktokx-origin.image?dr=9636&x-expires=1783263600&x-signature=2PlkofS3nAbuOWtQQSaCTJIU0bQ%3D&t=4d5b0474&ps=13740610&shp=81f88b70&shcp=43f4a2f9&idc=useast5",
    "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": 162476412,
      "verified": true,
      "profileImage": "https://p16-common-sign.tiktokcdn-us.com/tos-useast8-avt-0068-tx2/08987e23b94057953fd4f1738694bf5f~tplv-tiktokx-cropcenter:720:720.jpeg?dr=9640&refresh_token=828dd685&x-expires=1783263600&x-signature=uG12wEuTZOcKwj9%2BCpq6wCtqNe8%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=f20df69d&idc=useast5",
      "followersAsOf": "2026-07-27T08:14:52.000Z",
      "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": [],
    "musicName": "original sound - khaby.lame",
    "musicId": "7646812079113898783",
    "musicAuthor": "Khabane lame",
    "isOriginalSound": true,
    "locationCreated": "IT",
    "authorRegion": "IT",
    "descLanguage": null,
    "shopProductUrl": null,
    "isAd": false,
    "isCommerce": false,
    "isBrandedContent": false,
    "isPaidPartnership": false,
    "status": {
      "allowComment": true,
      "allowShare": true,
      "isPrivate": false,
      "isDeleted": false,
      "inReview": false,
      "isProhibited": false
    },
    "fetchedAt": "2026-07-27T08:14:52.000Z"
  }
}

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

Request parameters

NameTypeRequiredDescription
urlstring YesPublic TikTok video URL, e.g. https://www.tiktok.com/@khaby.lame/video/7646812028874673439. Not a YouTube/Instagram/Facebook URL. 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.
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 Video Details API do?

The TikTok Video Details API lets you fetch full metadata and key stats from a public TikTok video using one GET request to /v1/tiktok/video-details. It returns clean JSON — no OAuth or infrastructure setup required.

How many credits does the TikTok Video Details API cost?

Each successful call costs 1 credit. 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 proxies, rate limits, retries, and authentication for you.

Why can the same video return 1 100 000 views on one call and 1 060 159 on the next?

Two hydrates. timings.path=mobile is TikTok's aweme detail (exact integers, downloads, play URLs, author.region). timings.path=web is the page's display-rounded counters when every mobile exit is soft-blocked — 1 100 000 instead of 1 060 159. The *IsApproximate flags cover the counters; (fetchPath is gone). Same price either way.

Why are videoUrl and downloadUrl null?

On timings.path=web the logged-out watch page does not expose playable CDN links (the same class as trending-reels engagement.views). videoUrl / downloadUrl / downloadUrlNoWatermark stay null — documented here, not as a payload note. mediaUrlsExpireAt can still fill from thumbnailUrl / author.profileImage when those carry x-expires. timings.path=mobile is the path that fills the play/download URLs. Persist the post url; do not treat a null videoUrl as a deleted video.

Is author.followers exact?

Often not. This surface publishes TikTok's display-rounded follower count (12 600 matches v ≥ 10 000 and a clean hundred). author.followersIsApproximate uses the same ladder as engagement. Divide 1 100 000 / 12 600 only after reading both flags.

Where did authorRegion and followersAsOf go?

authorRegion was a twin of author.region — keep the nested one. followersAsOf always equalled fetchedAt (4/4 including the docs example), so it is gone. fetchedAt is the fetch start, not completion.

Why is adAuthorized true on an organic skincare post?

That bit is Spark Ads authorisation — the creator permitted the organic video to be used in ads — not "this item is an advertisement". isCommerce / isBrandedContent / isPaidPartnership / shopProductUrl stay false/null on that post. Filter those if you want commercial content. Do not filter adAuthorized === false to isolate organic; you will silently drop authorised organic videos.

Why are allowComment and allowShare false?

Unknown boolean on a complete status object is false — the same shared serialisation rule as twitter/profile (TW-1). We still read the mobile aweme status (allow_comment / allow_share) when timings.path=mobile. A false next to isPrivate: false means TikTok did not expose the bit, not that comments are confirmed off.

Is the TikTok Video Details 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 video details?

Start free with 100 credits — no credit card required.

Get your free API key