TikTok · Guide

How to get TikTok channel posts

TL;DR
To get TikTok channel posts, sign up for a free Captapi key, then send one GET request to /v1/tiktok/channel-posts with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. Latest videos from a TikTok profile. May return a labelled 6h-stale snapshot (degraded + staleAgeMs) when the live list is blocked. Failures are 0 credits.

How to get TikTok channel 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 Channel Posts API

    Send an authenticated GET request to /v1/tiktok/channel-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/channel-posts?url=https%3A%2F%2Fwww.tiktok.com%2F%40natgeo" \
  -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/@natgeo",
    "totalReturned": 2,
    "posts": [
      {
        "platform": "tiktok",
        "url": "https://www.tiktok.com/@natgeo/photo/7671655634479156494",
        "id": "7671655634479156494",
        "caption": "There's more to the mad hatterpillar than funky headwear. By wearing the stacked remains of its old head capsules, it confuses predators, giving it more time to escape. 🎩  #Underdogs is streaming on @Disney+ and @hulu.",
        "publishedAt": "2026-08-08T13:42:53.000Z",
        "durationSeconds": 31.659,
        "thumbnailUrl": "https://p16-common-sign.tiktokcdn.com/tos-useast5-p-0068-tx/owCc3tEwJKAiUi5MBsI8wOfCAkBcBBAI9Al1c3~tplv-tiktokx-cropcenter-q:300:400:q70.webp?dr=14782&refresh_token=9b419d9e&x-expires=1786348800&x-signature=AtHD%2FQzBnExrYlaiQ9ATmAC2JSY%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=132edbea&idc=my&biz_tag=tt_video&s=PUBLISH&sc=cover",
        "mediaType": "photo",
        "contentType": "photo",
        "width": 1080,
        "height": 1920,
        "hasWatermark": false,
        "author": {
          "id": "6780344874811442181",
          "secUid": "MS4wLjABAAAAEf96k3JW8-3eOhgzgQswlFF6ZDnn1dzqWWorJjwDsiNZymqTtvOcFhp_RiYYST6s",
          "username": "natgeo",
          "displayName": "National Geographic",
          "url": "https://www.tiktok.com/@natgeo",
          "followers": 9590843,
          "verified": true,
          "profileImage": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/324924e171e481040a1ea202962f6e07~tplv-tiktokx-cropcenter-q:1080:1080:q70.webp?dr=10796&refresh_token=ee0a2fa4&x-expires=1786348800&x-signature=GjL1qODTN0sutAGopvXV5kCBjhw%3D&t=223449c4&ps=87d6e48a&shp=d05b14bd&shcp=132edbea&idc=my&sc=avatar&s=PUBLISH"
        },
        "engagement": {
          "views": 29128,
          "likes": 2305,
          "comments": 35,
          "shares": 251,
          "saves": 155
        },
        "hashtags": [
          "underdogs"
        ],
        "mentions": [
          {
            "userId": "6844178288162063365",
            "secUid": "MS4wLjABAAAAqUNM3kSR5Ftp2-qS8tMXPcOX8sQIrztPZ6xbXF19zZMi805WqA158zLCL15WnGHL",
            "start": 200,
            "end": 208
          },
          {
            "userId": "6647632235926503429",
            "secUid": "MS4wLjABAAAAM4MY_0Mngt5neJyXf3HiDcYRyCBv_dMx1DU4OpbQNbNThk2QRZLWPKgSidSUqAd8",
            "start": 213,
            "end": 218
          }
        ],
        "musicName": "original sound - natgeo",
        "musicId": "7671655849333099278",
        "musicAuthor": "National Geographic",
        "locationCreated": "GB",
        "descLanguage": "en",
        "isAd": false,
        "isPaidPartnership": false
      },
      {
        "platform": "tiktok",
        "url": "https://www.tiktok.com/@natgeo/photo/7671355385575410958",
        "id": "7671355385575410958",
        "caption": "More than two centuries after excavations began, archaeologists are still uncovering parts of Pompeii. Archaeologists still use methods from the past, but new technology is helping them explore the ancient city while protecting the site.  #PompeiiOutOfTime with Tom Hiddleston is now streaming on @Disney+ and @hulu",
        "publishedAt": "2026-08-07T18:17:23.000Z",
        "durationSeconds": 39.574,
        "thumbnailUrl": "https://p16-common-sign.tiktokcdn.com/tos-useast5-p-0068-tx/o0bRJ4IxLAOGYe8AUCsgALFICO2vBffepFHtHO~tplv-tiktokx-cropcenter-q:300:400:q70.webp?dr=14782&refresh_token=26b45f7e&x-expires=1786348800&x-signature=NCt%2BCGLGMrck73N5qPCDj%2BTryAA%3D&t=bacd0480&ps=933b5bde&shp=d05b14bd&shcp=132edbea&idc=my&sc=cover&biz_tag=tt_video&s=PUBLISH",
        "mediaType": "photo",
        "contentType": "photo",
        "width": 1080,
        "height": 1920,
        "hasWatermark": false,
        "author": {
          "id": "6780344874811442181",
          "secUid": "MS4wLjABAAAAEf96k3JW8-3eOhgzgQswlFF6ZDnn1dzqWWorJjwDsiNZymqTtvOcFhp_RiYYST6s",
          "username": "natgeo",
          "displayName": "National Geographic",
          "url": "https://www.tiktok.com/@natgeo",
          "followers": 9590843,
          "verified": true,
          "profileImage": "https://p16-common-sign.tiktokcdn.com/tos-maliva-avt-0068/324924e171e481040a1ea202962f6e07~tplv-tiktokx-cropcenter-q:1080:1080:q70.webp?dr=10796&refresh_token=ee0a2fa4&x-expires=1786348800&x-signature=GjL1qODTN0sutAGopvXV5kCBjhw%3D&t=223449c4&ps=87d6e48a&shp=d05b14bd&shcp=132edbea&idc=my&sc=avatar&s=PUBLISH"
        },
        "engagement": {
          "views": 9116,
          "likes": 548,
          "comments": 6,
          "shares": 9,
          "saves": 18
        },
        "hashtags": [
          "pompeiioutoftime"
        ],
        "mentions": [
          {
            "userId": "6844178288162063365",
            "secUid": "MS4wLjABAAAAqUNM3kSR5Ftp2-qS8tMXPcOX8sQIrztPZ6xbXF19zZMi805WqA158zLCL15WnGHL",
            "start": 297,
            "end": 305
          },
          {
            "userId": "6647632235926503429",
            "secUid": "MS4wLjABAAAAM4MY_0Mngt5neJyXf3HiDcYRyCBv_dMx1DU4OpbQNbNThk2QRZLWPKgSidSUqAd8",
            "start": 310,
            "end": 315
          }
        ],
        "musicName": "original sound - natgeo",
        "musicId": "7671355506610473742",
        "musicAuthor": "National Geographic",
        "locationCreated": "ZA",
        "descLanguage": "en",
        "isAd": false,
        "isPaidPartnership": false
      }
    ],
    "nextCursor": "1786115938373",
    "hasMore": true
  }
}

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 profile URL, @handle, or username, e.g. https://tiktok.com/@username. Not a YouTube channel 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.
limitintegerNoHow many of the creator's latest videos to return on this page (default 20, max 200). Newest first. Flat 2 credits per call.
cursorstringNoPagination cursor. Leave empty for the first page; then pass the nextCursor value returned in the previous response (TikTok's max_cursor timestamp, e.g. 1783614676000). A null nextCursor means the end of the list.
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 Channel Posts API do?

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

How many credits does the TikTok Channel 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 proxies, rate limits, retries, and authentication for you.

Why did channel-posts take ~94s and then fail while channel-details answered in 2s?

channel-details is one profile-page parse. channel-posts has to load the post list — TikTok soft-blocks the mobile post API, so the old path stacked a 75s native ladder on a 25s fallback. Native now races mobile and signer only (~16s). Decodo is a dormant third leg: circuit-open after 0-XHR misses, then one half-open probe after the TTL (timings.decodoOpenedAt / decodoRetryAt). The working cover is Apify (~8s when it finishes; 16s client cutoff). A failure is 502 UPSTREAM_UNAVAILABLE with timings{path,nativeMs,apifyMs,apifyStatus,decodoStatus,decodoOpenedAt,decodoRetryAt,…}. A stale pool page stamps degraded + degradedReason plus staleAgeMs / staleTtlMs (6h) / staleFinishedAt. Failures stay 0 credits.

How is viewsIsApproximate set?

The same display-rounding ladder as /tiktok/top-search. Values under 10 000 are exact (false). At or above 10 000, a multiple of 100 (or of 100 000 at 1M+) is approximate (true). A rounded value cannot carry false, and an exact value cannot carry true.

Can this endpoint serve stale data? How old?

Yes — when the live post list is blocked, a 200 may be a snapshot up to 6 hours old (staleTtlMs=21600000). Those calls still cost 2 credits and always set degraded=true, degradedReason=extended-timeout-served-stale, plus staleAgeMs and staleFinishedAt so you can see whether the snapshot is ten minutes or five hours old. No in-window snapshot → 502, 0 credits.

Is the TikTok Channel 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 channel posts?

Start free with 100 credits — no credit card required.

Get your free API key