100 free credits on signup · no card required

TikTok Channel Videos API

One handle in. Clean JSON out.

Give this endpoint a TikTok handle and it returns that creator's recent videos as a JSON array, each one carrying its own view, like, comment, share and save counts. It is the list version of the single-video stats call: one request instead of twenty, and you never have to find the video URLs yourself. Billing is per video returned, 3 credits each.

Credits 3 / video
Input ?handle=
Cache 3h
Paging limit
GET · BEARER
Request composing…
Cached 3 hours
page 1 hourly
Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<div class="css-1qb2n7d-DivItemContainer e148ts220" data-e2e="recommend-list-item"><div class="css-x6y88p-DivContainer"><a class="css-1g95xhm-AVideoContainer" href="/@tiktok/video/7231338487075638570"><video src="blob:https://www.tiktok.com/8f3a..."></video></a></div><div class="css-1f5bbrz-DivCardFooter"><strong data-e2e="video-views" class="css-ws4x78">1.2M</strong><strong data-e2e="like-count">88.4K</strong><strong data-e2e="comment-count">2,314</strong></div><h3 class="css-1yy6f0h">Behind the scenes of our new feature</h3><script id="__UNIVERSAL_DATA_FOR_REHYDRATION__" type="application/json">{"__DEFAULT_SCOPE__":{"webapp.video-detail"...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 13 typed fields
{
"data": [
{
"id": "7231338487075638570",
"url": "https://www.tiktok.com/@tiktok/video/7231338487075638570",
"caption": "Behind the scenes of our new feature",
"posted_at": "2026-07-02T18:00:00Z",
"metrics": {
"views": 1204593,
"likes": 88410,
"comments": 2314
}
}
],
"meta": {
"count": 2,
"limit": 20,
"item": "video"
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 Full video objects, newest first

An array under `data`, newest post first. Every element is a full video object — the same shape the TikTok Video Stats API returns for a single URL — so a page of 20 videos gives you 20 sets of counters, captions, hashtags, durations and publish timestamps in one round trip.

02 Enough to skip follow-up calls

Because the objects are complete, you rarely need a follow-up call. A typical competitor sweep pulls one page per handle, writes the rows to a table keyed on `id`, and computes posting cadence and median engagement straight from `posted_at` and the counters. The creator's own identity comes back on every row inside `author`, which is handy when you merge several handles into one table.

03 No profile-level fields

What you do not get here is anything the profile page holds rather than the video grid: follower count, bio, verification. Those live on the TikTok Channel Stats API. This endpoint is strictly the video list.

Field explorer Pick a key to see its type and the caveats.
number|null Nullable Sortable metric
likes

Public like count.

{
"id": "7231338487075638570",
"url": "https://www.tiktok.com/@tiktok/video/7231338487075638570",
"caption": "Behind the scenes of our new feature",
"views": 1204593,
"likes": 88410,
"comments": 2314,
"shares": 0,
"saves": 0,
"duration_sec": 0,
"posted_at": "2026-07-02T18:00:00Z",
"author": { … },
"music": "…",
"hashtags": ["…"]
}
Good fit

Reach for this when

  • Competitor monitoring: run one call per rival handle on a daily cron and store every row, so you have their whole back catalogue with counters attached and can see what they shipped overnight.
  • Influencer vetting before a deal. A single page of recent videos tells you whether their median view count matches the number in the media kit, or whether one outlier is carrying the average.
  • Building a URL list to feed other endpoints. Pull the videos, filter to the ones you care about, then pass the `url` values into the TikTok Transcript API or the TikTok Comments API.
  • Content research inside a niche: collect hashtags and durations across the top accounts in a category and look at what format actually gets saved rather than just viewed.
  • Backfilling your own account's history into a warehouse without wiring up TikTok's official Display API and its app review.
Different job?

There's an endpoint for that

  • You already have the specific video URLs. Call the TikTok Video Stats API per URL instead — same fields, no limit to reason about.
  • You want follower count, bio or total account likes. That is the TikTok Channel Stats API, which returns one profile object per call.
  • You are looking for videos by topic rather than by author. The TikTok Search API takes a keyword or hashtag and returns videos from across the platform.
  • You need the spoken words from each video. This endpoint returns captions, not speech; the TikTok Transcript API handles audio.

Pricing

Start free, pay for what comes back

Billing is per video returned: 3 credits each, about 1.5¢ on the monthly plan, so a default 20-video page runs 30¢. A handle with no public videos still costs 1 credit.

Estimate your bill
$10/ month
30 videos/day × 3 credits × 365 days = 32,850 credits/yr, or $117/yr on the annual plan plus 21 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 32,850
Plan Annual $54/yr
Per video

Estimate only, on a full-year basis. 3 credits per returned video. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

3 credits per video returned. Ask for 20 and the call costs 60 credits; ask for 50 and it costs 150. Set `limit` deliberately — the most common way to overspend on this endpoint is leaving a large limit on a job that only ever looks at the top five rows.

If a handle has fewer videos than your limit, you are charged for what actually comes back, not for what you asked for.

There is no pagination. `limit` sets how many videos come back (default 20, 50 max on a synchronous call) and that single response is everything you get — no cursor, no page token, no offset. A `limit` above 50 is accepted but routes to an async job, which returns a job handle rather than rows; you collect the result when the job finishes. If you need more videos than one call gives you, that async job is the only route.

Ordering is newest first, but pinned videos on a profile can surface out of chronological order. If your logic depends on recency, sort on `posted_at` after you receive the page rather than trusting array position.

This endpoint sits in the medium cache class, which holds a response for one hour — short, because a creator's grid is exactly where new uploads appear. Repeat calls inside the window return in milliseconds and are marked with x-cache: hit. A hit costs the same credits as a fresh pull.

Pass fresh=true when you are checking whether something went live in the last few minutes. Do not set it on every call in a nightly batch; you will pay the same and wait longer for no extra information.

Pass the handle with or without the leading @; both are accepted. Private accounts, accounts that have been banned and handles that have been renamed return an error rather than an empty array — an empty `data` array means the account exists and genuinely has no public videos.

Handles change. Ids do not. If you track creators long term, store the numeric video ids and the author handle together so a rename does not orphan your history.

Each row's numbers are what TikTok was publishing when the page was assembled, rounded the way TikTok rounds at scale. A video from last year is effectively settled; one posted this morning will read differently on your next sweep. Store the fetch timestamp alongside the row if you plan to compute growth.

Questions

Frequently asked

You cannot, in one synchronous call. Calling /v1/tiktok/channel-videos with the handle and a limit returns one batch of up to 50 full video objects and nothing more — there is no cursor to follow and no way to resume where the last call stopped. For a creator with hundreds of uploads, ask for the larger limit so the request becomes an async job and take delivery by webhook.

3 credits per video returned. A default page of 20 videos is 60 credits, which is 30 cents at the monthly rate of $0.005 per credit, or 27 cents on annual. Fetching 200 videos from one creator costs 600 credits. Failed calls are not charged, and a partial page is billed only for the rows you receive.

Up to 50 on a synchronous call, with 20 as the default. That is one shot — there is no cursor and no second page. Anything above 50 is accepted but turns the request into an async job. The cap exists because a synchronous request has to finish inside the HTTP timeout, not because of any per-account restriction.

No. Every row describes a video, and `author` carries only the creator's handle and display name. Follower count, following count, total likes, bio and verification status come from the TikTok Channel Stats API, which is a separate 3-credit call against the profile itself. Most projects run both and join on the handle.

No. We read the same public profile pages you can open logged out, so a private account returns an error. There is no login, no session, and no way to reach content the account has not made public. If you need data on a private account, the account owner has to use TikTok's own authenticated tools.

Responses are cached for an hour, so a video posted minutes ago may not appear on an immediate call. Add fresh=true to force a live pull when you are watching for a specific upload. For routine monitoring, an hourly cron on the default cache is cheaper and just as accurate for anything older than a day.

The parameter is the handle, with or without the @ — pass `charlidamelio` or `@charlidamelio`. If all you have is a tiktok.com/@name profile link, take the segment after the @ and send that. Video URLs are not valid input here; those belong on the TikTok Video Stats API.

Next

Pairs well with

Full TikTok API reference →
/v1/tiktok/channel-stats
TikTok Channel Stats API Follower counts and profile metadata for a TikTok account. 3 cr / profile
/v1/tiktok/stats
TikTok Stats API Views, likes, comments and shares for a single TikTok video. 3 cr / video
/v1/tiktok/transcript
TikTok Transcript API Full transcript of a TikTok video with timestamped segments. 8 cr / video
/v1/instagram/channel-reels
Instagram Channel Reels API Latest reels from an Instagram account with per-reel metrics. 3 cr / reel

More TikTok endpoints

/v1/tiktok/transcript Full transcript of a TikTok video with timestamped segments. 8 credits / video /v1/tiktok/summary Short AI summary of a TikTok video, built on its transcript. 10 credits / video /v1/tiktok/stats Views, likes, comments and shares for a single TikTok video. 3 credits / video /v1/tiktok/comments Paginated comments on a TikTok video; charged per comment returned. 2 credits / comment /v1/tiktok/channel-stats Follower counts and profile metadata for a TikTok account. 3 credits / profile /v1/tiktok/search Keyword search over TikTok videos. 4 credits / result /v1/tiktok/hashtag-search Videos posted under a TikTok hashtag. 3 credits / result /v1/tiktok/download Resolves a downloadable media URL for a TikTok video (URL expires within 1h). 7 credits / video

Try the TikTok Channel Videos endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/tiktok/channel-videos
Get your free API key