TikTok APITikTok
TikTok videos API
Call GET /v1/tiktok/profiles/{identifier}/posts with a username or a user ID. Each request returns one page of videos and a cursor for the next page.
You do not need a TikTok login or Research API access.
GET /v1/tiktok/profiles/{identifier}/posts
curl "https://api.openhandle.dev/v1/tiktok/profiles/@pixel_orchard_tt_test/posts" \
-H "Authorization: Bearer $OPENHANDLE_API_KEY"TypeScript SDK
import { OpenHandle } from '@openhandle/sdk';
const openhandle = new OpenHandle({ apiKey: process.env.OPENHANDLE_API_KEY! });
const page = await openhandle.tiktok.profile('pixel_orchard_tt_test').posts.list();
for (const video of page.data) console.log(video.id, video.metrics.views);200 OK
{
"platform": "tiktok",
"resource": "post",
"capturedAt": "2026-09-18T10:40:09Z",
"source": "live",
"data": [
{
"id": "920100000000000001",
"text": "A synthetic orchard loop. Full study: example.openhandle.dev/pixel-orchard/study #pixelorchard",
"createdAt": "2026-08-09T15:30:00Z",
"metrics": {
"views": 23000,
"likes": 1200,
"comments": 24,
"shares": 73,
"saves": 88
}
}
],
"meta": { "cursors": { "next": "b3BhcXVlLWN1cnNvcg" } }
}Trimmed to one video and the fields most apps need. The example is a Test account, so you can run it on a free Test key.
What you get
- —Videos. Each video has
id, the caption intext, andcreatedAt. - —Counts. Views, likes, comments, shares, and saves sit in
metrics. - —One page per request. Pass
meta.cursors.nextback ascursorto get the next page. When it isnull, you have every video TikTok shows. - —One video. Call
GET /v1/tiktok/posts/{id}to read a single video by its ID.
Price
- —Per request. $0.0025 per live request. $0.002 per request after 100,000 requests in a month. One page of results is one request.
- —Older data costs less. Set
freshnessto say how old the data may be. Data up to 24 hours old: $0.0005. Data up to 7 days old: $0.0001. Data up to 30 days old: free. - —Failed means free. Errors and invalid requests are never billed. You pay for answers, and a confirmed not-found is an answer.
- —Free to start. Every new workspace starts with 100 free live requests, no card needed. Test keys are never charged.
When this does not work
These answers are definitive. Store them, do not retry them.
| Situation | Status | Code |
|---|---|---|
| The account is private | 403 | PROFILE_PRIVATE |
| The account is deleted, banned, or never existed | 404 | PROFILE_NOT_FOUND |
| The cursor came from another request | 400 | CURSOR_MISMATCH |
403 Forbidden
{
"error": {
"code": "PROFILE_PRIVATE",
"message": "This profile is private.",
"requestId": "req_01j8…",
"retryable": false
}
}An account with no videos answers with an empty page, which bills as an answered request.
Read next
More TikTok data
Send your agent ahead.
Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.
100 free requests. No card needed.