TikTok API endpoint
Searches TikTok hashtags (challenges) for `keyword`. `cursor` defaults to 0 and `count` defaults to 20, capped at 50. The response has `challenge_list` with each hashtag's name and id, plus a `cursor` and `has_more` for paging. An empty, blocked or malformed result returns an upstream error.
/tiktok/search/hashtagQuery parameters:
keyword: required. Search keyword. Example: chatgpt.cursor: optional. Pagination cursor. Default: 0.count: optional. Result count, clamped to 50. Default: 20.Notable response behavior:
TikTokAPIHost points to a compatible signer.search.js hashtag search flow against /api/search/challenge/full/.| Field | Filled in, of 3 checked |
|---|---|
| coverLarger | 0 |
| coverMedium | 0 |
| coverThumb | 0 |
| desc | 0 |
| id | 3 |
| profileLarger | 0 |
| profileMedium | 0 |
| profileThumb | 0 |
| title | 3 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required | ||
| keyword | string | Yes | Search keyword | chatgpt | |
| cursor | integer | No | Pagination cursor | ||
| count | integer | No | Result count, clamped to 50 |
curl -X GET "https://api.crawlora.net/api/v1/tiktok/search/hashtag?keyword=chatgpt&count=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"type": 3,
"challenge_list": [
{
"challenge_info": {
"cha_name": "chatgpt",
"cid": "163321922"
}
}
],
"cursor": 20,
"has_more": 1,
"status_code": 0
}
}Request schema
No body schema
Response schema
#/definitions/tiktok.searchHashtagResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | tiktok.SearchHashtagResp | No | ||||
| data.challenge_list | array | No | Hashtags (challenges) matching the keyword, one entry per hashtag, as TikTok returns them. | |||
| data.cursor | integer | No | Cursor to pass in the next request to get the next page of results. | |||
| data.extra | unknown | No | Response metadata from TikTok, such as the request log id. | |||
| data.has_more | integer | No | Whether more results remain after this page, as a number (`1` for yes). | |||
| data.input_keyword | string | No | Search keyword that was run. | |||
| data.log_pb | object | No | Request tracking information from TikTok, holding the `impr_id` impression id. | |||
| data.log_pb.impr_id | string | No | ||||
| data.music_list | unknown | No | Matching sounds, as TikTok returns them. Usually `null` for a hashtag search. | |||
| data.qc | string | No | Query token that TikTok returns with the search results. | |||
| data.rid | string | No | Request id that TikTok returns with the search results. | |||
| 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. | |||
| data.type | integer | No | Result type code that TikTok returns with the search results. | |||
| data.user_list | unknown | No | Matching accounts, as TikTok returns them. Usually `null` for a hashtag search. | |||
| 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/search/hashtag?keyword=chatgpt&count=10" \
-H "x-api-key: $CRAWLORA_API_KEY"