TikTok API endpoint
Retrieve the TikTok explore feed for a category
Returns explore videos for a TikTok category id from the category endpoint.
/tiktok/explore/{id}Parameters
| Name | In | Type | Required | Enum | Example | Description |
|---|---|---|---|---|---|---|
| x-api-key | header | string | Yes | API key required | ||
| id | path | integer | Yes | Category type id returned by the category endpoint |
Authentication
Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.
Billing
Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.
- Credit cost
- 8 credits/request
- Charged response
- Successful 2xx responses
| Plan | Price | Included credits | Daily cap | Rate limit | Overage |
|---|---|---|---|---|---|
| Free | $0/mo | 2,000 | 500 daily credits | 5/min | No overage |
| Starter | $9/mo | 20,000 | 5,000 daily credits | 15/min | $0.75/1,000 overage credits when enabled |
| Growth | $29/mo | 100,000 | 25,000 daily credits | 45/min | $0.45/1,000 overage credits when enabled |
| Pro | $79/mo | 400,000 | No daily cap | 120/min | $0.30/1,000 overage credits |
| Business | $199/mo | 1,200,000 | No daily cap | 300/min | $0.20/1,000 overage credits |
| Enterprise | $499/mo | 5,000,000 | No daily cap | 1,000/min | $0.12/1,000 overage credits |
Response behavior
- A successful response contains a non-empty `data.itemList`. - If TikTok returns status success with an empty or null `itemList`, the service retries through the signer browser fallback and then returns an upstream error if the fallback is also empty. Maintenance notes: see `docs/tiktok-maintenance.md`. Example response: ```json { "code": 200, "msg": "OK", "data": { "cursor": "0", "extra": { "fatal_item_ids": [], "logid": "20241211134820CAEF8E035EA9CA040BA5", "now": 1733924900000 }, "hasMore": true, "itemList": [ { "AIGCDescription": "", "CategoryType": 103, "anchors": [ { "description": "Effects", "extraInfo": { "subtype": "" }, "icon": { "urlList": [ "https://p16-sg.tiktokcdn.com/obj/tiktok-obj/capcut_logo_64px_bk.png?shp=81f88b70&shcp=-" ] }, "id": "334772380", "keyword": "Number Fit v14", "schema": "https://www.capcut.com/editor?scenario=tiktok&utm_source=tiktok_anchor_tool&utm_medium=tiktok_anchor&utm_campaign=71351105" } ], "author": { "avatarLarger": "https://p19-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/80f67be06bb65c4c0caed1a981ad5dda~c5_1080x1080.jpeg?lk3s=a5d48078&non...", "avatarMedium": "https://p16-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/80f67be06bb65c4c0caed1a981ad5dda~c5_720x720.jpeg?lk3s=a5d48078&nonce...", "avatarThumb": "https://p16-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/80f67be06bb65c4c0caed1a981ad5dda~c5_100x100.jpeg?lk3s=a5d48078&nonce...", "commentSetting": 0, "downloadSetting": 0, "duetSetting": 0 }, "authorStats": { "diggCount": 1292, "followerCount": 73700, "followingCount": 53, "friendCount": 0, "heart": 8400000, "heartCount": 8400000 }, "backendSourceEventTracking": "" } ], "log_pb": { "impr_id": "20241211134820CAEF8E035EA9CA040BA5" }, "statusCode": 0 } } ```
Catalog quality warnings
- missing example for required path param: id
Failure responses
| Status | Description | Schema |
|---|---|---|
| 400 | Invalid input | #/definitions/app.Response |
| 429 | Rate limit exceeded | #/definitions/app.Response |
| 500 | Internal server error | #/definitions/app.Response |
Example response
{
"code": 200,
"msg": "OK",
"data": {
"cursor": "0",
"extra": {
"fatal_item_ids": [],
"logid": "20241211134820CAEF8E035EA9CA040BA5",
"now": 1733924900000
},
"hasMore": true,
"itemList": [
{
"AIGCDescription": "",
"CategoryType": 103,
"anchors": [
{
"description": "Effects",
"extraInfo": {
"subtype": ""
},
"icon": {
"urlList": [
"https://p16-sg.tiktokcdn.com/obj/tiktok-obj/capcut_logo_64px_bk.png?shp=81f88b70&shcp=-"
]
},
"id": "334772380",
"keyword": "Number Fit v14",
"schema": "https://www.capcut.com/editor?scenario=tiktok&utm_source=tiktok_anchor_tool&utm_medium=tiktok_anchor&utm_campaign=71351105"
}
],
"author": {
"avatarLarger": "https://p19-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/80f67be06bb65c4c0caed1a981ad5dda~c5_1080x1080.jpeg?lk3s=a5d48078&non...",
"avatarMedium": "https://p16-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/80f67be06bb65c4c0caed1a981ad5dda~c5_720x720.jpeg?lk3s=a5d48078&nonce...",
"avatarThumb": "https://p16-pu-sign-useast8.tiktokcdn-us.com/tos-useast5-avt-0068-tx/80f67be06bb65c4c0caed1a981ad5dda~c5_100x100.jpeg?lk3s=a5d48078&nonce...",
"commentSetting": 0,
"downloadSetting": 0,
"duetSetting": 0
},
"authorStats": {
"diggCount": 1292,
"followerCount": 73700,
"followingCount": 53,
"friendCount": 0,
"heart": 8400000,
"heartCount": 8400000
},
"backendSourceEventTracking": ""
}
],
"log_pb": {
"impr_id": "20241211134820CAEF8E035EA9CA040BA5"
},
"statusCode": 0
}
}Request schema
No body schema
Response schema
#/definitions/tiktok.exploreResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | tiktok.ExploreResp | No | ||||
| data.cursor | string | No | ||||
| data.extra | object | No | ||||
| data.extra.fatal_item_ids | array | No | ||||
| data.extra.logid | string | No | ||||
| data.extra.now | integer | No | ||||
| data.hasMore | boolean | No | ||||
| data.itemList | array | No | ||||
| data.log_pb | object | No | ||||
| data.log_pb.impr_id | string | No | ||||
| data.statusCode | integer | No | ||||
| data.status_code | integer | No | ||||
| data.status_msg | string | No | ||||
| msg | string | No | OK |
Example request
curl -X GET "https://api.crawlora.net/api/v1/tiktok/explore/user-1" -H "x-api-key: <api-key>"
TypeScript fetch
const url = new URL("https://api.crawlora.net/api/v1/tiktok/explore/user-1");
const headers = new Headers();
headers.set("x-api-key", "<api-key>");
const response = await fetch(url, {
method: "GET",
headers,
});
const payload = await response.json();