---
title: "TikTok Channel Posts API"
method: GET
path: "/v1/tiktok/channel-posts"
tags: ["TikTok"]
---

# TikTok Channel Posts API

`GET /v1/tiktok/channel-posts`

## Request

- Base URL: `https://api.captapi.com`
- URL: `https://api.captapi.com/v1/tiktok/channel-posts`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Latest videos from a TikTok profile, cursor-paginated.

Send a profile URL, @handle, or username and the TikTok Channel Posts API returns that creator's most recent videos as clean, structured JSON. When TikTok blocks the post list the call is 502 UPSTREAM_UNAVAILABLE (0 credits) with timings{path,nativeMs,…} — retry shortly. views / likes / comments / shares / saves each carry *IsApproximate from the same display-rounding ladder as top-search (rounded → true, exact → false). Each post includes the TikTok page URL and video ID, caption, publish date, duration, thumbnail, playable videoUrl plus downloadUrl / downloadUrlNoWatermark when TikTok exposes them (CDN-signed — check mediaUrlsExpireAt before archiving), hashtags, sound/music, isAd / isPaidPartnership / shopProductUrl when present, and the author's profile (id, secUid, username, display name, followers, verified badge, avatar). Fetch up to 200 posts per call with the limit parameter. Cursor pagination via nextCursor / hasMore. A cursor TikTok rejects comes back as 400 INVALID_CURSOR. Flat 2 credits per successful call; failures stay 0 credits.

Docs: https://captapi.com/apis/tiktok-channel-posts

## Query parameters

- `url` string, required
- `limit` integer
- `cursor` string
- `cache` boolean

## Response `200`

Success. The data object for this endpoint.

- object
  - `success` unknown, required
  - `data` object, required
    - `url` string: Canonical URL of the item.
    - `totalReturned` integer: Number of items returned in this response.
    - `posts` object[]
      - `platform` string: Platform identifier for this response (matches the endpoint's platform).
      - `url` string: Canonical URL of the item.
      - `id` string: Id of this posts item.
      - `caption` string: Post or creative caption when the platform exposes one.
      - `publishedAt` string: Publish date (ISO 8601) when the platform exposes an absolute timestamp.
      - `durationSeconds` number: Length in seconds for this item (full media length, or a segment span when the endpoint documents a start/end).
      - `thumbnailUrl` string: Thumbnail image URL.
      - `mediaType` string: Media type label for this item (platform-specific enum).
      - `contentType` string: Content type. Example: "photo".
      - `width` integer: Width in pixels.
      - `height` integer: Height in pixels.
      - `hasWatermark` boolean: Has watermark. Example: false.
      - `author` object: Author name or handle.
        - `id` string: Id of this posts item.
        - `secUid` string
        - `username` string
        - `displayName` string
        - `url` string: Canonical URL of the item.
        - `followers` integer
        - `verified` boolean
        - `profileImage` string
      - `engagement` object: Engagement metrics for the item.
        - `views` integer
        - `likes` integer
        - `comments` integer
        - `shares` integer
        - `saves` integer
      - `hashtags` string[]: Hashtags extracted from the text.
      - `mentions` object[]: Accounts mentioned in the text.
        - `userId` string
        - `secUid` string
        - `start` integer
        - `end` integer
      - `musicName` string: Name of the soundtrack used.
      - `musicId` string: ID of the soundtrack used.
      - `musicAuthor` string: Music author. Example: "National Geographic".
      - `locationCreated` string: ISO country where the TikTok video was posted/served (item locationCreated). Not the creator's home country — use authorRegion or /tiktok/profile-region for that.
      - `descLanguage` string: Language code TikTok assigns to the video caption when exposed.
      - `isAd` boolean: Whether the item is a paid promotion.
      - `isPaidPartnership` boolean: Is paid partnership. Example: false.
    - `nextCursor` string: Cursor to pass for the next page of results. May be null when the platform does not expose deep pagination (e.g. some Facebook Ad Library searches).
    - `hasMore` boolean: Whether more results are available beyond this page. When true, pass nextCursor to fetch the next page.

## Other responses

- `400`: Bad request: wrong platform URL, unknown endpoint, or an invalid parameter value. Not billed.
- `401`: Missing, invalid or revoked API key. Not billed.
- `402`: Not enough credits for this request. Not billed.
- `404`: The resource does not exist or is not public. Not billed.
- `422`: A required parameter is missing or has the wrong type. Not billed.
- `429`: Rate limit reached. Wait for Retry-After seconds. Not billed.
- `502`: The platform could not be reached or returned nothing usable. Retryable, not billed. 503 and 504 use the same envelope.

---

[API](https://skmtc.dev/captapi/apis/captapi-api.md) · [All operations](https://skmtc.dev/captapi/apis/captapi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/captapi/apis/captapi-api/revisions/c9b9ac5ff1bd?raw)
