
One call returns up to 10 TikTok challenges (hashtags/trends) matching a keyword. Each item is a challenge with name, description, and engagement stats. The answer shows 10 challenges per page; get the next page by passing the returned `cursor` value to the `cursor` parameter.
12 live routes on TikTok, from $0.00002 per call. Every route below answered our last live test on 2026-10-06; the gateway re-tests them daily.
The upstream price you are metered at, cheapest first. A route without a published price says so.
| Provider | Endpoint | Price |
|---|---|---|
tiktok-scraper7RapidAPI listing | Search ChallengeCHEAPESTGET challenge/search | $0.00002$0.02 / 1k calls |
tiktok-scraper7RapidAPI listing | Search PhotoGET photo/search | $0.00002$0.02 / 1k calls |
tiktok-scraper7RapidAPI listing | Search VideoGET feed/search | $0.00002$0.02 / 1k calls |
tiktok-api23RapidAPI listing | Explore DramasGET api/drama/explore | $0.00005$0.05 / 1k calls |
tiktok-api23RapidAPI listing | Get Keyword SentenceGET api/trending/keyword/sentence | $0.00005$0.05 / 1k calls |
tiktok-api23RapidAPI listing | Get Trending Video By KeywordGET api/trending/keyword/posts | $0.00005$0.05 / 1k calls |
tiktok-api23RapidAPI listing | Others Searched For (Suggest Search)GET api/search/others-searched-for | $0.00005$0.05 / 1k calls |
tiktok-api23RapidAPI listing | Search General (Top)GET api/search/general | $0.00005$0.05 / 1k calls |
tiktok-api23RapidAPI listing | Search PhotoGET api/search/photo | $0.00005$0.05 / 1k calls |
tiktok-api23RapidAPI listing | Search VideoGET api/search/video | $0.00005$0.05 / 1k calls |
tiktok-api6RapidAPI listing | Get Search VideosGET search/general/query | $0.001998$2.00 / 1k calls |
tiktok-api6RapidAPI listing | Search VideosPOST search/general/query | $0.001998$2.00 / 1k calls |
From a real call to the cheapest route: tiktok-scraper7.
data.challenge_list[].idChallenge IDdata.challenge_list[].cha_nameChallenge namedata.challenge_list[].descChallenge descriptiondata.challenge_list[].user_countNumber of users who participateddata.challenge_list[].view_countTotal views on challenge videosdata.challenge_list[].coverChallenge cover image URLdata.hasMoreWhether more challenges existPaging (tiktok-scraper7): read `data.cursor` from the answer and send it back as `cursor=` for the next page; stop when it is empty or repeats. From MCP: call_endpoint("rapidapi-tiktok-scraper7.search_challenge", params, pages=3) follows it for you.
Paging (tiktok-scraper7): read `data.cursor` from the answer and send it back as `cursor=` for the next page; stop when it is empty or repeats. From MCP: call_endpoint("rapidapi-tiktok-scraper7.search_photo", params, pages=3) follows it for you.
Paging (tiktok-scraper7): read `data.cursor` from the answer and send it back as `cursor=` for the next page; stop when it is empty or repeats. From MCP: call_endpoint("rapidapi-tiktok-scraper7.search_video", params, pages=3) follows it for you.
Paging (tiktok-api23): read `cursor` from the answer and send it back as `cursor=` for the next page; stop when it is empty or repeats. From MCP: call_endpoint("rapidapi-tiktok-api23.explore_dramas", params, pages=3) follows it for you.
Paging (tiktok-api23): read `cursor` from the answer and send it back as `cursor=` for the next page; stop when it is empty or repeats. From MCP: call_endpoint("rapidapi-tiktok-api23.search_general_top", params, pages=3) follows it for you.
Paging (tiktok-api23): read `cursor` from the answer and send it back as `cursor=` for the next page; stop when it is empty or repeats. From MCP: call_endpoint("rapidapi-tiktok-api23.search_photo", params, pages=3) follows it for you.
Paging (tiktok-api23): read `cursor` from the answer and send it back as `cursor=` for the next page; stop when it is empty or repeats. From MCP: call_endpoint("rapidapi-tiktok-api23.search_video", params, pages=3) follows it for you.
Paging (tiktok-api6): read `cursor` from the answer and send it back as `cursor=` for the next page; stop when it is empty or repeats. From MCP: call_endpoint("rapidapi-tiktok-api6.get_search_videos", params, pages=3) follows it for you.
HTTP with your key in x-api-key, or the call_endpoint tool of our MCP server.
| Parameter | Type | Notes | |
|---|---|---|---|
| count | string · query | optional | max 30 · default 10 |
| cursor | string · query | optional | default 0 |
| keywords | string · query | required | default cosplay |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-scraper7/challenge/search?count=10&cursor=0&keywords=cosplay" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-scraper7.search_challenge", {"count": "10", "cursor": "0", "keywords": "cosplay"}){
"msg": "success",
"code": 0,
"data": {
"cursor": 10,
"hasMore": true,
"challenge_list": [
{
"id": "33380",
"desc": "#Cosplay your favorite character, and show the world your power!",
"type": 2,
"cover": "https://p16-amd-va.tiktokcdn.com/obj/tiktok-obj/8dc87afbcc425ff89c9c68e5514ddb8e.jpeg",
"cha_name": "Cosplay",
"is_pgcshow": false,
"user_count": 47951191,
"view_count": 455797189160,
"is_commerce": false,
"is_challenge": false,
"is_strong_music": false
},
{
"id": "4804974",
"desc": "",
"type": 1,
"cover": "",
"cha_name": "cosplaygirl",
"is_pgcshow": false,
"user_count": 1231387,
"view_count": 12244748974,
"is_commerce": false,
"is_challenge": false,
"is_strong_music": false
},
"… 2 more"
]
},
"processed_time": 1.2523
}| Parameter | Type | Notes | |
|---|---|---|---|
| region | string · query | optional | default us |
| cursor | string · query | optional | default 0 |
| count | string · query | optional | max 30 · default 10 |
| keywords | string · query | required | default fyp |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-scraper7/photo/search?count=10&cursor=0®ion=us&keywords=fyp" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-scraper7.search_photo", {"count": "10", "cursor": "0", "region": "us", "keywords": "fyp"})| Parameter | Type | Notes | |
|---|---|---|---|
| count | string · query | optional | max 30 · default 10 |
| region | string · query | optional | region code, such as: **jp, kr, us, vn, br, ru** ... · default us |
| cursor | string · query | optional | default 0 |
| publish_time | number · query | optional | Publish time filter 0 - ALL 1 - Past 24 hours 7 - This week 30 - This month 90 - Last 3 months 180 - Last 6 months · default 0 |
| sort_type | number · query | optional | Sort by 0 - Relevance 1 - Like count 3 - Date posted · default 0 |
| keywords | string · query | required | default fyp |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-scraper7/feed/search?count=10&cursor=0®ion=us&keywords=fyp&sort_type=0&publish_time=0" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-scraper7.search_video", {"count": "10", "cursor": "0", "region": "us", "keywords": "fyp", "sort_type": "0", "publish_time": "0"})| Parameter | Type | Notes | |
|---|---|---|---|
| type | string · query | optional | Theme type for filtering dramas - `10` (default): All - `9`: Lastest - `8`: Ranking - New releases - `7`: Ranking - Trending · default 10 |
| count | number · query | optional | The number of results to be returned. The default and maximum value is `10` · default 10 |
| releasePeriod | string · query | optional | The release period used to filter dramas - `all` (default): All - `7d`: In 7 days - `30d`: In 30 days · default all |
| cursor | string · query | optional | cursor parameter is used for pagination. In the first request, the default value of cursor is `0`. For subsequent requests, the value of cursor will be taken from the response of the previous request · default 0 |
| region | string · query | optional | The region code used to determine the available dramas · default US |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-api23/api/drama/explore?type=10&count=10&cursor=0®ion=US&releasePeriod=all" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-api23.explore_dramas", {"type": "10", "count": "10", "cursor": "0", "region": "US", "releasePeriod": "all"})| Parameter | Type | Notes | |
|---|---|---|---|
| order_type | string · query | optional | `desc` | `asc` · default desc |
| page | number · query | optional | default 1 |
| country | string · query | optional | default US |
| period | number · query | optional | `7` | `30` | `120` · default 30 |
| limit | number · query | optional | default 50 |
| keyword | string · query | required | default promotion |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-api23/api/trending/keyword/sentence?page=1&limit=50&period=30&country=US&keyword=promotion&order_type=desc" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-api23.get_keyword_sentence", {"page": "1", "limit": "50", "period": "30", "country": "US", "keyword": "promotion", "order_type": "desc"})| Parameter | Type | Notes | |
|---|---|---|---|
| period | number · query | optional | `7` | `30` | `120` · default 7 |
| country | string · query | optional | Country code. Head [here](https://gist.githubusercontent.com/apiboxguru/21d1cff1bef7732d9533389cb540541f/raw/6669d1e0025b67e8c7a0a1649cd8c75c5d5d2803/tiktok_trending_support_countries_with_codes.json) for a full list of supported countries · default US |
| limit | number · query | optional | default 10 |
| keyword | string · query | required | default promotion |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-api23/api/trending/keyword/posts?limit=10&period=7&country=US&keyword=promotion" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-api23.get_trending_video_by_keyword", {"limit": "10", "period": "7", "country": "US", "keyword": "promotion"})| Parameter | Type | Notes | |
|---|---|---|---|
| keyword | string · query | required | default cat |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-api23/api/search/others-searched-for?keyword=cat" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-api23.others_searched_for_suggest_search", {"keyword": "cat"})| Parameter | Type | Notes | |
|---|---|---|---|
| cursor | number · query | optional | `cursor` parameter is used for pagination. In the first request, the default value of `cursor` is 0. For subsequent requests, the value of `cursor` will be taken from the response of the previous request. In the Search Endpoints, both `cursor` and `search_id` need to be provided when pagination is used · default 0 |
| search_id | string · query | optional | `search_id` parameter is used for pagination. In the first request, the default value of the `search_id` is 0. For subsequent requests, the value of the cursor will be taken from the response of the previous request (from: `res.log_pb.impr_id`). In the Search Endpoints, both `cursor` and `search_id` need to be provided when pagination is used · default 0 |
| keyword | string · query | required | default cat |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-api23/api/search/general?cursor=0&keyword=cat&search_id=0" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-api23.search_general_top", {"cursor": "0", "keyword": "cat", "search_id": "0"})| Parameter | Type | Notes | |
|---|---|---|---|
| cursor | string · query | optional | cursor parameter is used for pagination. In the first request, the default value of cursor is `0`. For subsequent requests, the value of cursor will be taken from the response of the previous request. In the Search Endpoints, both `cursor` and `search_id` need to be provided when pagination is used |
| search_id | string · query | optional | search_id parameter is used for pagination. In the first request, the default value of the search_id is `0`. For subsequent requests, the value of the cursor will be taken from the response of the previous request (from: `log_pb.impr_id`). In the Search Endpoints, both `cursor` and `search_id` need to be provided when pagination is used |
| keyword | string · query | required | Search keyword · default fornite |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-api23/api/search/photo?keyword=fornite" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-api23.search_photo", {"keyword": "fornite"})| Parameter | Type | Notes | |
|---|---|---|---|
| cursor | number · query | optional | `cursor` parameter is used for pagination. In the first request, the default value of `cursor` is 0. For subsequent requests, the value of `cursor` will be taken from the response of the previous request. In the Search Endpoints, both `cursor` and `search_id` need to be provided when pagination is used · default 0 |
| search_id | string · query | optional | `search_id` parameter is used for pagination. In the first request, the default value of the `search_id` is 0. For subsequent requests, the value of the cursor will be taken from the response of the previous request (from: `res.log_pb.impr_id`). In the Search Endpoints, both `cursor` and `search_id` need to be provided when pagination is used · default 0 |
| keyword | string · query | required | default cat |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-api23/api/search/video?cursor=0&keyword=cat&search_id=0" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-api23.search_video", {"cursor": "0", "keyword": "cat", "search_id": "0"})| Parameter | Type | Notes | |
|---|---|---|---|
| sort_type | number · query | optional | Sort type for search results. Options are: 0 (relevance), 1 (like count), 3 (date posted). Default is 0 (relevance). |
| cursor | string · query | optional | |
| query | string · query | required | default mr beast |
curl "https://fetchapi.co/api/gw/rapidapi-tiktok-api6/search/general/query?query=mr beast" \ -H "x-api-key: YOUR_KEY"
call_endpoint("rapidapi-tiktok-api6.get_search_videos", {"query": "mr beast"})| Parameter | Type | Notes | |
|---|---|---|---|
| query | str · body | JSON body field | e.g. "mr beast" |
| cursor | int · body | JSON body field | e.g. 0 |
| sort_type | str · body | JSON body field | e.g. "0" |
curl -X POST "https://fetchapi.co/api/gw/rapidapi-tiktok-api6/search/general/query" \
-H "x-api-key: YOUR_KEY" -H "content-type: application/json" \
-d '{"query": "mr beast", "cursor": 0, "sort_type": "0"}'call_endpoint("rapidapi-tiktok-api6.search_videos", {}, {"query": "mr beast", "cursor": 0, "sort_type": "0"})Call it over HTTP or from any MCP client. Each key has a rate limit and a monthly cap; calls are metered at the upstream price.