Following
https://scraper.riken.me/v1/tiktok/user/followingTry 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.
One page of the accounts an account follows, newest follow first, usually
50. Send back min_time for the next page; stop when has_more is false.
rec_has_more always equals has_more.
A hidden list is free: 200, credits_charged: 0, the page shape with
no accounts, following_hidden: true and total: null. It counts toward
the free-answer limit.
An account that does not exist is a 404, free. A private account is a
200, charged, {"handle", "account_private": true}.
Coming. Built but not priced: answers 503 route_not_priced until a
price row exists.
Headers
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
x-api-key | string | one of the auth headers | Your API key. If both headers are sent, `x-api-key` wins. | sk_... |
Authorization | string | one of the auth headers | `Authorization: Bearer <key>`, the same key. | Bearer sk_... |
Idempotency-Key | string | no | Any 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
| Name | Type | Required | Description | Example |
|---|---|---|---|---|
handle | string | no | The TikTok handle. Required unless `user_id` is given. A leading `@` is removed; case does not matter. Letters, digits, `_` and `.` only, at most 64 characters. With both `handle` and `user_id`, `user_id` is ignored. | dagestantrainingcamp |
user_id | string | no | TikTok's numeric user id, at most 20 digits, used only when `handle` is absent. Works only for accounts in our index: an unknown id is `400 unsupported_parameter` ("pass handle"), and an id whose handle has changed is `400 unsupported_parameter` too. Both free, both count toward the free-answer limit. | 6918108151024829445 |
min_time | integer | no | The `min_time` of the previous page (TikTok's own cursor, unix seconds). Absent, empty or `0` means page 1. | 1792981730 |
trim | boolean | no | Accepted and ignored. Must be `true` or `false` (else `400 bad_request`). |
Status codes
| Status | Charged | Meaning |
|---|---|---|
| 200 | Depends | A page (charged), a hidden list (free, credits_charged 0), or the private-account answer (charged). |
| 400 | Free | A parameter is missing, malformed, or one we cannot honour yet. Free. |
| 401 | Free | Missing, unknown or revoked key. Free. |
| 402 | Free | The key cannot cover this request. needed_credits is the price. Free. |
| 404 | Free | The account does not exist. Free; counts toward the free-answer limit. |
| 409 | Free | A request with this Idempotency-Key and parameters is still running. Free; retry after Retry-After (1 s). |
| 429 | Free | over_capacity: no capacity within the time limit, or the server is
restarting (30 s). rate_limited: the free-answer limit (this answer
would have been free). Free; wait Retry-After seconds.
|
| 500 | Free | Our fault. Free; retry and quote X-Request-Id. |
| 502 | Free | TikTok's answer failed or could not be read (including accounts TikTok withholds from logged-out views). Free. |
| 503 | Free | The route has no price yet, so it does not serve. Free. |
| 504 | Free | No answer within the time limit (180 s; audience 300 s). Free. |
A page (charged), a hidden list (free, credits_charged 0), or the private-account answer (charged).
application/json- response
success*unknowncredits_charged*CreditsAn amount in credits, as an exact JSON decimal (1, 0.002), never a rounded float.
0 <= valuecredits_remaining*CreditsRemainingWhat the key can still spend after this request.
has_more*booleanmin_time*integerSend back as min_time for the next page.
int64max_time*integerint64next_page_token?stringtotal*|TikTok's own count; null on a hidden following list.
offset?integermyself_user_id?stringstatus_code*integerstatus_msg?stringextra?log_pb?followings*array<>rec_has_more*booleanAlways equals has_more.
following_hidden?unknownOnly on a hidden list (free): no accounts, total null.
handle?stringOnly on a hidden list.
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/user/following?handle=dagestantrainingcamp&user_id=6918108151024829445&min_time=1792981730' \ -H 'Idempotency-Key: profile-dagestantrainingcamp-2026-11-01'{ "credits_charged": 1, "credits_remaining": 999, "extra": { "fatal_item_ids": [], "logid": "20261030171146081F76B937404FB3139A", "now": 1793380307000 }, "followings": [ { "accept_private_policy": null, "account_labels": null, "account_region": null, "ad_cover_url": null, "advance_feature_item_order": null, "advanced_feature_info": null, "authority_status": null, "avatar_168x168": { "data_size": 0, "height": 720, "uri": "tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2", "url_list": [ "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2~tplv-tiktokx-cropcenter:100:100.jpeg?x-expires=1793466000" ], "url_prefix": null, "width": 720 }, "avatar_300x300": { "data_size": 0, "height": 720, "uri": "tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2", "url_list": [ "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2~tplv-tiktokx-cropcenter:720:720.jpeg?x-expires=1793466000" ], "url_prefix": null, "width": 720 }, "avatar_larger": { "data_size": 0, "height": 720, "uri": "tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2", "url_list": [ "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2~tplv-tiktokx-cropcenter:1080:1080.jpeg?x-expires=1793466000" ], "url_prefix": null, "width": 720 }, "avatar_medium": { "data_size": 0, "height": 720, "uri": "tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2", "url_list": [ "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2~tplv-tiktokx-cropcenter:720:720.jpeg?x-expires=1793466000" ], "url_prefix": null, "width": 720 }, "avatar_thumb": { "data_size": 0, "height": 720, "uri": "tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2", "url_list": [ "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2~tplv-tiktokx-cropcenter:100:100.jpeg?x-expires=1793466000" ], "url_prefix": null, "width": 720 }, "avatar_uri": "tos-maliva-avt-0068/d6a1705a030406c01fb474ce6cc6f0c2", "aweme_count": 5, "bind_phone": null, "bold_fields": null, "can_message_follow_status_list": null, "can_set_geofencing": null, "cha_list": null, "comment_filter_status": null, "comment_setting": 0, "commerce_user_level": null, "cover_url": null, "create_time": null, "custom_verify": null, "cv_level": null, "download_prompt_ts": null, "download_setting": 3, "duet_setting": 3, "enabled_filter_all_comments": null, "enterprise_verify_reason": null, "events": null, "fake_data_info": null, "favoriting_count": 28191, "follow_status": null, "follower_count": 12, "follower_status": null, "followers_detail": null, "following_count": 2359, "friends_status": null, "geofencing": null, "has_email": null, "has_insights": null, "has_orders": null, "hide_search": null, "homepage_bottom_toast": null, "is_ad_fake": false, "is_block": null, "is_discipline_member": null, "is_mute": null, "is_mute_lives": null, "is_mute_non_story_post": null, "is_mute_story": null, "is_mute_thought": null, "is_phone_binded": null, "is_star": null, "item_list": null, "language": null, "live_agreement": null, "live_commerce": null, "live_verify": null, "mention_status": null, "mutual_relation_avatars": null, "need_points": null, "need_recommend": null, "nickname": "grams", "original_musician": null, "platform_sync_info": null, "prevent_download": null, "react_setting": null, "region": null, "relative_users": null, "reply_with_video_flag": null, "search_highlight": null, "sec_uid": "MS4wLjABAAAAexampleexampleexampleexampleexampleexample1", "secret": 0, "share_info": null, "share_qrcode_uri": null, "shield_comment_notice": null, "shield_digg_notice": null, "shield_edit_field_info": null, "shield_follow_notice": null, "short_id": null, "show_image_bubble": null, "signature": "hi", "special_account": null, "special_lock": null, "status": null, "stitch_setting": 3, "total_favorited": 4, "type_label": null, "uid": "6761309637569709061", "unique_id": "gramsworld", "unique_id_modify_time": null, "user_canceled": null, "user_mode": null, "user_period": null, "user_profile_guide": null, "user_rate": null, "user_spark_info": null, "user_tags": null, "verification_type": null, "verify_info": null, "video_icon": null, "white_cover_url": null, "with_commerce_entry": null, "with_shop_entry": null } ], "has_more": true, "log_pb": { "impr_id": "20261030171146081F76B937404FB3139A" }, "max_time": 1793380036, "min_time": 1792981730, "myself_user_id": "0", "next_page_token": "eyJtYXhfY3Vyc29yIjoxNzkzMzgwMDM2LCJtaW5fY3Vyc29yIjoxNzkyOTgxNzMwfQ==", "offset": 0, "rec_has_more": true, "status_code": 0, "status_msg": "", "success": true, "total": 221779}