Endpoint Playground
Returns the hashtag suggestions the app shows while typing in the search box, keyed by `keyword`. The upstream is `/aweme/v1/search/challengesug/`; each `sug_list` row carries `cha_name` (hashtag name), `view_count`, `use_count` and `cid` (the numeric hashtag id), so this is the discovery step for the hashtag endpoints (`hashtag info` is name-keyed). Measured 2026-10-21 with the pure-Go (device-free) signer: `keyword=lofi` returned 10 rows (`lofi` 18.2B views / 1.9M uses, then `lofiasmr`, `lofihiphop`, ...), `coffee` and `ラーメン` also returned 10 rows, and a keyword with no suggestions is a valid empty page (`sug_list: []`). `count` is accepted for shape parity but the server was measured to ignore it (5/20/100 all returned 10 rows), and the route has no paging. The route is not signature-gated, so it does not need the device-backed signer.
curl 'https://api.crawlora.net/api/v1/tiktok/mobile/search/hashtags?keyword=lofi' \
-H "x-api-key: $CRAWLORA_API_KEY"| Parameter | Type | Required | Prefilled value | Description |
|---|---|---|---|---|
| keyword | string | Yes | lofi | Text typed so far; the server also accepts prefixes (e.g. lofi -> lofihiphop) |
| count | integer | No | Accepted for shape parity; the server was measured to ignore it (always up to 10 rows) |
{
"code": 200,
"msg": "OK",
"data": {
"sug_list": [
{
"cha_name": "lofi",
"view_count": 18273876528,
"use_count": 1926700,
"cid": "4602873"
},
{
"cha_name": "lofiasmr",
"view_count": 12793337489,
"use_count": 315507,
"cid": "1626680631018501"
},
{
"cha_name": "lofihiphop",
"view_count": 833720221,
"use_count": 285739,
"cid": "30107753"
}
],
"rid": "20261021173213477CE85B8289CE303E4D",
"words_query_record": {
"words_source": "sug",
"query_id": ""
},
"status_code": 0,
"status_msg": ""
}
}The sample response, schema and code snippets below work without an account. Sending a live request needs an API key.