TikTok API endpoint
Lists posts from a TikTok profile identified by `secUid`. `sort_type` is `0` latest (default), `1` popular or `2` oldest. `cursor` defaults to 0. The response has `itemList`, `hasMore` and a `cursor` to pass back to fetch the next page.
/tiktok/postsQuery parameters:
secUid: required. TikTok secUid for the profile. Example: MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB.cursor: optional. Pagination cursor. Default: 0.sort_type: optional. Sort mode: 0 latest, 1 popular, 2 oldest. Default: 0. Allowed values: 0, 1, 2.Notable response behavior:
cursor value from a previous response to continue pagination.| Field | Filled in, of 35 checked | Values in the sample |
|---|---|---|
| AIGCDescription | 0 | |
| CategoryType | 35 | 103 to 120, median 120 |
| IsHDBitrate | 35 | true in 0 of 35 |
| ShowAIGC | 35 | true in 11 of 35 |
| author | 35 | |
| authorStats | 35 | |
| authorStatsV2 | 35 | |
| backendSourceEventTracking | 0 | |
| collected | 35 | true in 0 of 35 |
| contents | 31 | median 1 entry |
| createTime | 35 | 1,789,107,622 to 1,791,905,298, median 1,790,356,493 |
| creatorAIComment | 35 | |
| desc | 31 | |
| digged | 35 | true in 0 of 35 |
| duetDisplay | 35 | 0 |
| duetEnabled | 25 | true in 25 of 25 |
| forFriend | 35 | true in 0 of 35 |
| id | 35 | |
| isAd | 35 | true in 24 of 35 |
| isProhibited | 35 | true in 0 of 35 |
| isReviewing | 35 | true in 0 of 35 |
| itemCommentStatus | 35 | 0 to 3, median 0 |
| item_control | 35 | |
| music | 35 | |
| officalItem | 35 | true in 0 of 35 |
| originalItem | 35 | true in 0 of 35 |
| penaltyContext | 25 | |
| privateItem | 35 | true in 0 of 35 |
| secret | 35 | true in 0 of 35 |
| shareEnabled | 35 | true in 35 of 35 |
| stats | 35 | |
| statsV2 | 35 | |
| stitchDisplay | 35 | 0 |
| stitchEnabled | 25 | true in 25 of 25 |
| textLanguage | 35 | |
| textTranslatable | 35 | true in 31 of 35 |
| video | 35 | |
| imagePost | 10 | |
| titleLanguage | 10 | |
| titleTranslatable | 10 | true in 10 of 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| secUid | string | Yes | TikTok secUid for the profile | MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB | |
| cursor | integer | No | Pagination cursor | ||
| sort_type | integer | No | Sort mode: 0 latest, 1 popular, 2 oldest Allowed values: 0, 1, 2. |
curl -X GET "https://api.crawlora.net/api/v1/tiktok/posts?secUid=MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB&sort_type=0" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"cursor": "1728674650000",
"extra": {
"fatal_item_ids": [],
"logid": "2024121114064544C2FAFFE7F9650789D4",
"now": 1733926005000
},
"hasMore": true,
"itemList": [
{
"AIGCDescription": "",
"CategoryType": 120,
"author": {
"avatarLarger": "https://p19-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/fb1ed871dc01261013179da3fafcc1cd~c5_1080x1080.jpeg?lk3s=a5d48078&non...",
"avatarMedium": "https://p16-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/fb1ed871dc01261013179da3fafcc1cd~c5_720x720.jpeg?lk3s=a5d48078&nonce...",
"avatarThumb": "https://p16-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/fb1ed871dc01261013179da3fafcc1cd~c5_100x100.jpeg?lk3s=a5d48078&nonce...",
"commentSetting": 0,
"downloadSetting": 0,
"duetSetting": 0
},
"authorStats": {
"diggCount": 352,
"followerCount": 458800,
"followingCount": 1,
"friendCount": 0,
"heart": 800300,
"heartCount": 800300
},
"backendSourceEventTracking": "",
"challenges": [
{
"coverLarger": "",
"coverMedium": "",
"coverThumb": "",
"desc": "",
"id": "7172185891421552645",
"profileLarger": ""
}
]
}
],
"log_pb": {
"impr_id": "2024121114064544C2FAFFE7F9650789D4"
},
"status_code": 0
}
}Request schema
No body schema
Response schema
#/definitions/tiktok.profilePostResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | tiktok.UserPostLinkResp | No | ||||
| data.cursor | string | No | Cursor to pass in the next request to get the next page of posts. | |||
| data.extra | object | No | Response metadata from TikTok, such as the request log id and server time. | |||
| data.extra.fatal_item_ids | array | No | ||||
| data.extra.logid | string | No | ||||
| data.extra.now | integer | No | ||||
| data.hasMore | boolean | No | Whether more posts remain after this page. | |||
| data.itemList | array | No | Videos posted by the account, one entry per video, as TikTok returns them. | |||
| data.log_pb | object | No | Request tracking information from TikTok, holding the `impr_id` impression id. | |||
| data.log_pb.impr_id | string | No | ||||
| data.status_code | integer | No | TikTok status code for the request. `0` on a successful response. | |||
| data.status_msg | string | No | Status message that goes with the status code. | |||
| 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/posts?secUid=MS4wLjABAAAAT4vq3vsh9X-Vb_WtV6tz4QWTbKjliTKCiK5DqnJNtQEA2RUveHb7UdnL7xgPK2HB&sort_type=0" \
-H "x-api-key: $CRAWLORA_API_KEY"