Search TikTok
Search TikTok by keyword across three verticals — videos, users, or hashtags. The query is passed to TikTok's native search, which is relevance-ranked.
GET /v1/tiktok/search
TikTok's search is a relevance engine, not a boolean index. Operators like
AND / OR / NOT are not supported — they'd be treated as literal words.
Just pass natural keywords (e.g. dental care).
Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | — | Required. A keyword, e.g. dental care or looksmaxxing. |
type | string | video | Search vertical: video, user, or hashtag. |
count | integer | 20 | Results requested per TikTok page. Maximum 30. |
max_pages | integer | 1 | Number of TikTok pages to fetch. Maximum 100. |
Pagination follows TikTok: fetching max_pages pages returns those pages'
items, deduplicated across pages, in TikTok's relevance order. Fewer pages may
come back if TikTok has no more results.
Examples
Videos:
curl -G "$LISTENX_BASE/v1/tiktok/search" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'query=dental care'
Users, three pages:
curl -G "$LISTENX_BASE/v1/tiktok/search" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'query=dentist' \
--data-urlencode 'type=user' \
--data-urlencode 'max_pages=3'
Hashtags:
curl -G "$LISTENX_BASE/v1/tiktok/search" \
-H "X-API-Key: $LISTENX_KEY" \
--data-urlencode 'query=looksmaxxing' \
--data-urlencode 'type=hashtag'
Response (video)
{
"query": "dental care",
"type": "video",
"pages_requested": 1,
"pages_fetched": 1,
"returned": 18,
"results": [
{
"id": "7523456789012345678",
"url": "https://www.tiktok.com/@doc/video/7523456789012345678",
"type": "video",
"desc": "3 tips for whiter teeth #dentalcare",
"created_at": "2025-06-12T15:25:12+00:00",
"author": {
"id": "99887766",
"unique_id": "doc",
"nickname": "Dr. Smile",
"sec_uid": "MS4wLjABAAAA…",
"is_verified": true,
"follower_count": 120400,
"heart_count": 3400000
},
"engagement": {
"play_count": 185300,
"digg_count": 4045,
"comment_count": 238,
"share_count": 512,
"collect_count": 1290,
"repost_count": 12
},
"music": { "id": "…", "title": "original sound", "author": "doc", "is_original": true },
"cover": "https://…",
"duration": 15
}
],
"billing": {
"endpoint": "tiktok.search",
"units": 1,
"unit_price": "0.010000",
"amount": "0.010000",
"balance_after": "97.240000",
"request_id": "…"
}
}
The results[] shape depends on type:
video— post records (see above);idis the video id.user—{ id, unique_id, nickname, sec_uid, avatar_url, is_verified, signature, follower_count }.hashtag—{ id, name, desc, view_count, video_count }.
Fields
| Field | Description |
|---|---|
type | The search vertical you queried. |
pages_requested | The max_pages you asked for. |
pages_fetched | TikTok pages actually fetched (also the number of billed units). |
returned | Number of items in results (deduplicated across pages). |
results[] | Lightweight records, in TikTok's relevance order. |
Billing
Search is billed per page fetched — units = pages_fetched, minimum 1. So
max_pages=3 costs up to 3 units (fewer if TikTok runs out of pages sooner).
See Billing.
Notes
- To fetch complete details (all engagement metrics, media URLs, hashtags,
music, etc.) for a specific video, call the post endpoint
with its
id. - TikTok's search is a discovery surface; results are not exhaustive and can shift over time.