TikTok API endpoint
Pages one collection's videos in the creator's order, returning `items` (full video objects) unmodified with `min_cursor`, `max_cursor` and `has_more`. Pass `max_cursor` back as `cursor` while `has_more` is true. The server caps a page at about 30 rows, so `count` is a request hint.
/tiktok/mobile/collection/videosQuery parameters:
collection_id: required. The collection's item_archive_id from the collection list.cursor: optional. 0 for the first page, then the previous page's max_cursor. Default: 0.count: optional. Videos per page, bounded at 30. Default: 10. The server caps a page at about 28-30
rows, so count is a request hint: count=10 returned 10 rows, while count=30/count=50 both returned the
same 28 rows.Measured 2026-10-22 on the Summer of Sports collection (139 videos):
cursor=0&count=30 -> HTTP 200, 28 items, max_cursor 30, has_more true (2.1 MB).cursor=0&count=10 -> 10 items, max_cursor 10, has_more true (753 KB).cursor=30&count=30 -> the next page (2.1 MB), so max_cursor is a real next-page token.count=50 -> the same 28-row page (server cap).The request carries pull_type=1; the common app block's pull_type=8 is replaced, because sending both makes
the upstream answer status_code 5 "Invalid parameters". Unknown collection ids answer status_code 7.
Example request:
GET /api/v1/tiktok/mobile/collection/videos?collection_id=7394627756635573022&count=10
Example response (truncated):
{
"code": 200,
"msg": "OK",
"data": {
"items": [
{"aweme_id": "7399631056783035690", "desc": "...", "statistics": {"digg_count": 1234}}
],
"min_cursor": 0,
"max_cursor": 10,
"has_more": true,
"status_code": 0,
"status_msg": ""
}
}
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| collection_id | string | Yes | Collection id (`item_archive_id` from the collection list) | 7394627756635573022 | |
| cursor | integer | No | Paging cursor; use the previous page's max_cursor | ||
| count | integer | No | Videos per page (max 30; the server serves about 30) |
curl -X GET "https://api.crawlora.net/api/v1/tiktok/mobile/collection/videos?collection_id=7394627756635573022&count=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"items": [
{
"aweme_id": "7399631056783035690",
"desc": "...",
"statistics": {
"digg_count": 1234
}
}
],
"min_cursor": 0,
"max_cursor": 10,
"has_more": true,
"status_code": 0,
"status_msg": ""
}
}Request schema
No body schema
Response schema
#/definitions/tiktokmobile.collectionVideosResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | tiktokmobile.CollectionVideosResponse | No | ||||
| data.extra | unknown | No | ||||
| data.has_more | boolean | No | ||||
| data.items | array | No | ||||
| data.log_pb | unknown | No | ||||
| data.max_cursor | integer | No | ||||
| data.min_cursor | integer | No | ||||
| data.status_code | integer | No | ||||
| data.status_msg | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Invalid input or unknown collection | #/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/collection/videos?collection_id=7394627756635573022&count=10" \
-H "x-api-key: $CRAWLORA_API_KEY"