TikTok API endpoint
Lists one page of a playlist's videos unmodified in `item_list`: each entry is the full video object the app renders (author, statistics, music, cover renditions, description). `mix_id` is the playlist id from the playlist list/detail endpoints; pass the returned `cursor` back while `has_more` is true. This endpoint is served from the public web twin (`www.tiktok.com/api/mix/item_list/`) because the mobile item route is not usable.
/tiktok/mobile/playlist/videosSource. This endpoint is served from the public web twin (www.tiktok.com/api/mix/item_list/?aid=1988&mixId=…) because the mobile item route (/tiktok/v1/mix/videos/) returned status_code 2720 for every measured request shape. When a playlist does not exist, the web status is surfaced as a typed error.
Query parameters:
mix_id: required. Playlist id (the web playlist id namespace, e.g. 7681171537575824159).cursor: optional. Paging token from the previous response. Default: 0.count: optional. Videos per page, bounded at 30. Default: 10.Measured 2026-10-24: mix 7681171537575824159 ("Songs Of The Summer 2026") -> HTTP 200, 76 KB, 3 items,
cursor 3, has_more false; an unknown mix_id (999) answers the web envelope's statusCode 100001, which the
API reports as a typed upstream error.
Example request:
GET /api/v1/tiktok/mobile/playlist/videos?mix_id=7681171537575824159&count=10
Example response (truncated):
{
"code": 200,
"msg": "OK",
"data": {
"item_list": [
{
"id": "7681171194069507350",
"desc": "this summer was all about the classic hits...",
"author": {"uniqueId": "tiktok", "nickname": "TikTok"},
"stats": {"playCount": 490100, "diggCount": 32000}
}
],
"cursor": 3,
"has_more": false,
"status_code": 0
}
}
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| mix_id | string | Yes | Playlist id (web playlist id namespace) | 7681171537575824159 | |
| cursor | integer | No | Paging token from the previous response | ||
| count | integer | No | Videos per page (max 30) |
curl -X GET "https://api.crawlora.net/api/v1/tiktok/mobile/playlist/videos?mix_id=7681171537575824159&count=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"item_list": [
{
"id": "7681171194069507350",
"desc": "this summer was all about the classic hits...",
"author": {
"uniqueId": "tiktok",
"nickname": "TikTok"
},
"stats": {
"playCount": 490100,
"diggCount": 32000
}
}
],
"cursor": 3,
"has_more": false,
"status_code": 0
}
}Request schema
No body schema
Response schema
#/definitions/tiktokmobile.playlistVideosResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | tiktokmobile.PlaylistVideosResponse | No | ||||
| data.cursor | integer | No | ||||
| data.has_more | boolean | No | ||||
| data.item_list | array | No | ||||
| data.status_code | integer | No | ||||
| data.status_msg | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Invalid input | #/definitions/app.Response |
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/tiktok/mobile/playlist/videos?mix_id=7681171537575824159&count=10" \
-H "x-api-key: $CRAWLORA_API_KEY"