Riken ScraperDocs

Keyword search

GEThttps://scraper.riken.me/v1/tiktok/search/keyword
Cost: 1 credit per pageLiveErrors are free

Try it

Paste your key under Authorization and send a live request to https://scraper.riken.me. The key stays in this browser tab only (session storage, cleared when the tab closes) and is sent nowhere else. A live request spends credits like any other.

GET
/v1/tiktok/search/keyword

TikTok's Top results for a keyword, one page per call. Send back cursor for the next page; on the last page has_more is 0 and there is no cursor.

Cursors are bound to your API key, the query and the region page 1 came from, and expire after 24 hours. Another key or query: 400 invalid_cursor. Older than 24 h (or TikTok expired the session): 400 cursor_expired. Page 1's IP session gone: 409 cursor_exit_gone. A later page only available from another country: 409 cursor_region_changed. In every case, start again from page 1 without a cursor. A cursor is an integer of at most 2^53 - 1.

Region. We search from the US, and from Canada when US capacity is short. X-Search-Region says which (US or CA); all pages of one search come from the same region. region=CA searches from Canada only.

Page size is what TikTok's Top tab returns (median 23 on page 1 on 31 Oct 2026). Latency (31 Oct 2026, 90 pages, pages 1 to 3): p50 3.9 s, p95 8.9 s.

Headers

NameTypeRequiredDescriptionExample
x-api-keystringone of the auth headersYour API key. If both headers are sent, `x-api-key` wins.sk_...
Authorizationstringone of the auth headers`Authorization: Bearer <key>`, the same key.Bearer sk_...
Idempotency-KeystringnoAny string up to 255 characters. Makes a retry safe for 24 hours; bound to this API key and the request's parameters.profile-dagestantrainingcamp-2026-11-01

Query parameters

NameTypeRequiredDescriptionExample
querystringyesThe keyword. Trimmed. At most 200 bytes, valid UTF-8.protein
cursorstringnoThe `cursor` of the previous page. Absent, empty or `0` means page 1.4503599627370495
date_postedall-time | yesterday | this-week | this-month | last-3-months | last-6-monthsno`all-time` or absent. `yesterday`, `this-week`, `this-month`, `last-3-months` and `last-6-months` are `400 unsupported_parameter`; anything else `400 bad_request`.
sort_byrelevance | most-liked | date-postedno`relevance` or absent. `most-liked` and `date-posted` are `400 unsupported_parameter`; anything else `400 bad_request`.
regionstringnoTwo letters, or absent. `CA` (any case) searches from Canada only; any other two letters use the default order (US, then Canada). Not two letters is `400 bad_request`.CA

Status codes

StatusChargedMeaning
200ChargedOne page of results. Charged.
400FreeA bad parameter, or a cursor that cannot be used. Free.
401FreeMissing, unknown or revoked key. Free.
402FreeThe key cannot cover this request. needed_credits is the price. Free.
409FreeAn idempotency conflict, or a cursor whose search session cannot continue. Free.
429FreeNo capacity to answer within the time limit, or the server is restarting. Free. Wait Retry-After seconds.
500FreeOur fault. Free; retry and quote X-Request-Id.
502FreeTikTok's answer failed or could not be read (including accounts TikTok withholds from logged-out views). Free.
503FreeNo search IP can serve now (search_unavailable, Retry-After: 60), or the route is not priced. Free.
504FreeNo answer within the time limit (180 s; audience 300 s). Free.

Response Body

One page of results. Charged.

application/json
  1. response
success*unknown
credits_charged*Credits

An amount in credits, as an exact JSON decimal (1, 0.002), never a rounded float.

Range0 <= value
credits_remaining*CreditsRemaining

What the key can still spend after this request.

search_item_list*array<>
has_more*integer
Value in01
cursor?integer

The next page's cursor; absent on the last page. Bound to your key, the query and the region; 24 hours.

Range1 <= value <= 9007199254740991

Example request

# A call can be held open up to 180 s (audience: 300 s). Set a client timeout above that.curl -X GET 'https://scraper.riken.me/v1/tiktok/search/keyword?query=protein&cursor=4503599627370495&region=CA' \  -H 'Idempotency-Key: profile-dagestantrainingcamp-2026-11-01'
Example Response
{  "credits_charged": 1,  "credits_remaining": 999,  "cursor": 4503599627370495,  "has_more": 1,  "search_item_list": [    {      "aweme_info": {        "added_sound_music_info": null,        "aigc_info": null,        "anchors": null,        "anchors_extras": null,        "animated_image_info": null,        "author": {          "avatar_168x168": null,          "avatar_300x300": null,          "avatar_larger": {            "height": null,            "uri": null,            "url_list": [              "https://c/al.jpg"            ],            "url_prefix": null,            "width": null          },          "avatar_medium": {            "height": null,            "uri": null,            "url_list": [              "https://c/am.jpg"            ],            "url_prefix": null,            "width": null          },          "avatar_thumb": {            "height": null,            "uri": null,            "url_list": [              "https://c/at.jpg"            ],            "url_prefix": null,            "width": null          },          "aweme_count": 2017,          "commerce_user_level": null,          "custom_verify": null,          "enterprise_verify_reason": null,          "follower_count": 4100000,          "following_count": 74,          "hide_search": null,          "ins_id": null,          "is_star": null,          "nickname": "Dave Portnoy",          "sec_uid": "MS4wLjABAAAAINC_ElRR",          "secret": 0,          "short_id": null,          "total_favorited": 190400000,          "uid": "6659752019493208069",          "unique_id": "stoolpresidente",          "verification_type": 1,          "with_commerce_entry": null        },        "author_user_id": 6659752019493208000,        "aweme_acl": null,        "aweme_id": "7334621391758642478",        "aweme_type": null,        "banners": null,        "behind_the_song_music_ids": null,        "behind_the_song_video_music_ids": null,        "bodydance_score": null,        "branded_content_accounts": null,        "c2pa_info": null,        "cc_template_info": null,        "cha_list": [          {            "cha_name": "gym",            "cid": "1",            "desc": ""          }        ],        "challenge_position": null,        "cmt_swt": null,        "collect_stat": null,        "comment_config": null,        "comment_topbar_info": null,        "commerce_config_data": null,        "commerce_info": null,        "content_desc": null,        "content_desc_extra": null,        "content_model": null,        "content_original_type": null,        "content_size_type": null,        "content_type": null,        "cover_labels": null,        "create_time": 1707840000,        "create_time_utc": "2024-02-13T16:00:00.000Z",        "creation_info": null,        "desc": "leg day #gym",        "desc_language": null,        "disable_search_trending_bar": null,        "distance": null,        "distribute_type": null,        "follow_up_item_id_groups": null,        "follow_up_publish_from_id": null,        "geofencing": null,        "geofencing_regions": null,        "green_screen_materials": null,        "group_id": "7334621391758642478",        "group_id_list": null,        "has_danmaku": null,        "has_promote_entry": null,        "has_vs_entry": null,        "have_dashboard": null,        "hybrid_label": null,        "image_infos": null,        "interact_permission": null,        "interaction_stickers": null,        "is_ad": false,        "is_ads": false,        "is_description_translatable": null,        "is_eligible_for_commission": null,        "is_hash_tag": null,        "is_nff_or_nr": null,        "is_on_this_day": null,        "is_paid_partnership": null,        "is_pgcshow": null,        "is_preview": null,        "is_relieve": null,        "is_text_sticker_translatable": null,        "is_title_translatable": null,        "is_top": null,        "is_vr": null,        "item_comment_settings": null,        "item_duet": null,        "item_react": null,        "item_stitch": null,        "label_top": null,        "label_top_text": null,        "long_video": null,        "main_arch_common": null,        "mask_infos": null,        "meme_reg_info": null,        "misc_info": null,        "muf_comment_info_v2": null,        "music": {          "author": "Dave Portnoy",          "duration": 89,          "id_str": "7470969632736709422",          "is_original_sound": true,          "owner_handle": null,          "title": "original sound - stoolpresidente"        },        "music_begin_time_in_ms": null,        "music_end_time_in_ms": null,        "music_selected_from": null,        "music_title_style": null,        "music_volume": null,        "need_trim_step": null,        "need_vs_entry": null,        "nickname_position": null,        "no_selected_music": null,        "operator_boost_info": null,        "origin_comment_ids": null,        "origin_volume": null,        "original_client_text": null,        "picked_users": null,        "playlist_blocked": null,        "poi_re_tag_signal": null,        "position": null,        "prevent_download": null,        "products_info": null,        "promote_capcut_toggle": null,        "promote_icon_text": null,        "promote_toast": null,        "promote_toast_key": null,        "question_list": null,        "quick_reply_emojis": null,        "rate": null,        "reference_tts_voice_ids": null,        "reference_voice_filter_ids": null,        "region": "US",        "risk_infos": null,        "search_desc": null,        "search_highlight": null,        "share_info": null,        "share_url": "https://www.tiktok.com/@stoolpresidente/video/7334621391758642478",        "shoot_tab_name": null,        "shop_product_url": null,        "social_interaction_blob": null,        "solaria_profile": null,        "sort_label": null,        "standard_component_info": null,        "statistics": {          "aweme_id": "7334621391758642478",          "collect_count": 274,          "comment_count": 152,          "digg_count": 18651,          "download_count": null,          "forward_count": null,          "lose_comment_count": null,          "lose_count": null,          "play_count": 141567,          "repost_count": null,          "share_count": 237,          "whatsapp_share_count": null        },        "status": {          "allow_comment": null,          "allow_share": null,          "aweme_id": "7334621391758642478",          "is_delete": null,          "is_prohibited": null,          "private_status": 0,          "self_see": null        },        "suggest_words": null,        "support_danmaku": null,        "text_extra": [          {            "end": 12,            "hashtag_id": "1",            "hashtag_name": "gym",            "sec_uid": "",            "start": 8,            "type": 1,            "user_id": ""          }        ],        "text_sticker_major_lang": null,        "title_language": null,        "ttec_suggest_words": null,        "tts_voice_ids": null,        "uniqid_position": null,        "upvote_info": null,        "upvote_preload": null,        "url": "https://www.tiktok.com/@stoolpresidente/video/7334621391758642478",        "used_full_song": null,        "user_digged": null,        "video": {          "CoverTsp": null,          "ai_dynamic_cover": null,          "ai_dynamic_cover_bak": null,          "animated_cover": null,          "big_thumbs": null,          "bit_rate": null,          "bit_rate_audio": null,          "cdn_url_expired": null,          "cover": {            "height": null,            "uri": null,            "url_list": [              "https://c/1.jpg"            ],            "url_prefix": null,            "width": null          },          "download_addr": {            "height": null,            "uri": null,            "url_list": [              "https://c/d.mp4"            ],            "url_prefix": null,            "width": null          },          "duration": 89000,          "dynamic_cover": {            "height": null,            "uri": null,            "url_list": [              "https://c/3.jpg"            ],            "url_prefix": null,            "width": null          },          "has_watermark": null,          "height": 1024,          "is_bytevc1": null,          "is_callback": null,          "meta": null,          "need_set_token": null,          "origin_cover": {            "height": null,            "uri": null,            "url_list": [              "https://c/2.jpg"            ],            "url_prefix": null,            "width": null          },          "play_addr": {            "height": null,            "uri": null,            "url_list": [              "https://c/p.mp4"            ],            "url_prefix": null,            "width": null          },          "play_addr_bytevc1": null,          "play_addr_h264": null,          "ratio": "540p",          "source_HDR_type": null,          "tags": null,          "width": 576        },        "video_control": null,        "video_labels": null,        "video_text": null,        "visual_search_info": null,        "voice_filter_ids": null,        "with_promotional_music": null,        "without_watermark": null      }    }  ],  "success": true}