GET/tiktok/categoryapiKey8 credits/request
Returns the content categories shown on TikTok's Explore page. Each entry has the category name and its numeric type code. Takes no parameters.
Takes no parameters.
Sampled 14 Oct 2026: 21 items. Filled in every item: name, type. In the sample: type: 100 to 120, median 110.
Open in Playground
GET/tiktok/commentsapiKey8 credits/request
Returns the top-level comments on a TikTok video, by the video id from its URL (`aweme_id`). Results are paged by cursor: pass the `cursor` from one response to get the next page, and read `has_more` to see whether more remain. The response also carries the total comment count.
Required: aweme_id. Optional: cursor.
Sampled 14 Oct 2026: 18 items. Filled in every item: allow_download_photo, author_pin, aweme_id, cid, collect_stat, comment_language, create_time, digg_count and 21 more. Not in every item: image_list (3), label_list (2), reply_comment (1), label_text (1), label_type (1), cmt_sticker_struct (1), comment_post_item_ids (0), text_extra (0) and 2 more. In the sample: create_time: 2026-04-19 to 2026-10-10; digg_count: 0 to 10,950, median 3; allow_download_photo: true in 14 of 18; image_list: median 1 entry; author_pin: true in 0 of 18; is_author_digged: true in 1 of 18; is_comment_translatable: true in 18 of 18; is_high_purchase_intent: true in 3 of 18.
Open in Playground
GET/tiktok/creative-center/filtersapiKey1 credit/request
Returns the complete filter taxonomy for the Creative Center trend endpoints: the countries each trend tab reports, the industry ids and video content tags the filters accept, the supported lookback periods, and the video sort metrics. Use it to discover valid values for the hashtags endpoint's country_code, period, and industry_id parameters and the videos endpoint's country_code, period, sort_by, and content_label_ids parameters. This endpoint performs no upstream request and has no parameters.
Takes no parameters.
Open in Playground
GET/tiktok/creative-center/hashtagsapiKey8 credits/request
Returns TikTok Creative Center's ranked trending hashtags for a country, period, and optional industry. TikTok gates this endpoint's full result set behind a logged-in TikTok One account: an anonymous request always receives at most 3 hashtags per filter combination regardless of country, period, or industry, so selecting an industry returns that industry's own ranked top three. See the filters endpoint for the complete country, period, and industry value lists.
Required: country_code. Optional: period (3 allowed values: 7, 30, 90), industry_id (18 allowed values: 10000000000, 11000000000, 12000000000, 13000000000, 14000000000, 15000000000, 17000000000, 18000000000, 19000000000, 21000000000, 22000000000, 23000000000, 24000000000, 25000000000, 26000000000, 27000000000, 28000000000, 29000000000).
Sampled 14 Oct 2026: 3 items. Filled in every item: hashtag_id, hashtag_name, rank, publish_count, video_views, popularity_curve, top_creators. Not in every item: industry_ids (2). In the sample: rank: 1 to 3, median 2; popularity_curve: median 7 entries; publish_count: 23,651 to 107,135, median 27,747; video_views: 18,410,403 to 213,063,413, median 29,754,975; top_creators: median 3 entries.
Open in Playground
GET/tiktok/creative-center/top-contentapiKey8 credits/request
Returns TikTok Creative Center's current Top Content set: four top-performing branded videos, each with the video object (anonymous MP4 and cover URLs), engagement metrics, the author profile and follower count, and (by default) the video's top comments plus keyword mention counts derived from them. The set is a daily snapshot and there is no pagination or historical query; the four titles rotate when the snapshot changes. Set include_comments=false for a smaller response with only video, author, and metrics.
Optional: include_comments.
Open in Playground
GET/tiktok/creative-center/videosapiKey8 credits/request
Returns TikTok Creative Center's ranked trending videos for a country, period, sort order, and optional content tags. TikTok reports the true result-set size (see total_count/page_count in the response) but gates access to it behind a logged-in TikTok One account: an anonymous request always receives page 1 (4 videos) regardless of sort order or period. Country coverage is uneven: only US, JP, ID, VN, and TH have a regional edge host that returns populated results; other countries return an empty videos array (a genuine no-data response, not an error). See the filters endpoint for the complete country, period, sort, and content tag value lists.
Required: country_code. Optional: period (2 allowed values: 7, 30), sort_by (3 allowed values: views, engagement, six_second_views), content_label_id, content_label_ids, organic_only.
Sampled 14 Oct 2026: 4 items. Filled in every item: item_id, title, video_url, cover_url, content_type, create_time, author_id, author_handle and 12 more. Not in every item: content_tags (1). In the sample: create_time: 2026-02-19 to 2026-09-30; author_follower_count: 64,307 to 6,968,672, median 82,122; video_url: v16m-default.tiktokcdn-us.com; title: median 244 characters; content_tags: median 1 entry; cover_url: p19-common-sign.tiktokcdn-us.com and 1 other host; author_avatar_url: p19-common-sign.tiktokcdn-us.com and 1 other host; video_views: 20,433,757 to 79,724,346, median 21,833,783.
Open in Playground
GET/tiktok/explore/{id}apiKey8 credits/request
Returns the TikTok explore feed for a category, given its category type `id` from the category endpoint. The response has `itemList` with the videos, `hasMore` and a `cursor`. A feed that comes back empty is reported as an upstream error, not as an empty list.
Required: id.
Sampled 14 Oct 2026: 30 items. Filled in every item: CategoryType, IsHDBitrate, ShowAIGC, author, authorStats, authorStatsV2, collected, contents and 23 more. Not in every item: anchors (13), challenges (28), diversificationId (28), duetEnabled (27), stickersOnItem (6), stitchEnabled (27), textExtra (28), AIGCDescription (0) and 1 more. In the sample: CategoryType: 101 to 120, median 113; IsHDBitrate: true in 0 of 30; anchors: median 1 entry; ShowAIGC: true in 30 of 30; challenges: median 5 entries; collected: true in 0 of 30; contents: median 1 entry; createTime: 1,789,448,270 to 1,791,614,805, median 1,790,800,986.
Open in Playground
GET/tiktok/hashtag/{name}apiKey8 credits/request
Returns the details of a TikTok hashtag page by `name`, for example `christmas`. The response carries `challengeInfo` with the hashtag's metadata, such as cover images, and `shareMeta` with the share title and description. The hashtag id found here feeds `tiktok-challenge-list`.
Required: name.
Sampled 14 Oct 2026: 11 fields returned with a value, 2 empty (extra.fatal_item_ids, status_msg). In the sample: extra.now: 1,791,911,829,000; statusCode: 0.
Open in Playground
GET/tiktok/hashtagsapiKey8 credits/request
Lists the videos posted under a TikTok hashtag, identified by the hashtag `id` from the hashtag detail endpoint. `cursor` defaults to 0. The response has `itemList`, `hasMore` and a `cursor`; pass that cursor back to fetch the next page.
Required: id. Optional: cursor.
Sampled 14 Oct 2026: 30 items. Filled in every item: CategoryType, IsHDBitrate, ShowAIGC, author, authorStats, authorStatsV2, collected, contents and 24 more. Not in every item: challenges (29), enterMdpPV (16), textExtra (29), diversificationId (22), duetEnabled (26), playlistId (6), AIGCDescription (0), backendSourceEventTracking (0). In the sample: CategoryType: 101 to 120, median 111; IsHDBitrate: true in 0 of 30; desc: median 102 characters; challenges: median 5 entries; ShowAIGC: true in 24 of 30; collected: true in 0 of 30; contents: median 1 entry; createTime: 1,637,636,090 to 1,791,807,991, median 1,639,523,603.
Open in Playground
GET/tiktok/mobile/anchor/listapiKey8 credits/request
Returns the anchor catalogue TikTok exposes for attaching a tag, product or place to a video. Entry shapes vary by anchor type, so each entry is returned as raw JSON rather than coerced into one schema.
Takes no parameters.
Open in Playground
GET/tiktok/mobile/collection/detailapiKey8 credits/request
Returns one collection's record unmodified in `item_archive`: name, cover images, creator (`uid`, `creator_name`), status and `statistic.total`. `collection_id` is the `item_archive_id` from the collection list endpoint; web playlist (`mix`) ids are a different namespace and are rejected upstream with a permission error.
Required: collection_id.
Open in Playground
GET/tiktok/mobile/collection/listapiKey8 credits/request
Lists a creator's public collections (the profile's Collections tab) unmodified in `item_archive_detail_list`: each row carries the collection `id`, `name`, cover images and `statistic.total` video count. Use the returned `id` with the collection detail and collection videos endpoints. Requires the numeric `user_id` (a sec_user_id alone is rejected upstream).
Required: user_id. Optional: cursor, count.
Open in Playground
GET/tiktok/mobile/collection/videosapiKey8 credits/request
Pages one collection's videos in the creator's order, returning `items` (full video objects) unmodified with `min_cursor`, `max_cursor` and `has_more`. Pass `max_cursor` back as `cursor` while `has_more` is true. The server caps a page at about 30 rows, so `count` is a request hint.
Required: collection_id. Optional: cursor, count.
Open in Playground
GET/tiktok/mobile/comment/repliesapiKey8 credits/request
Returns the replies to one comment as the mobile app returns them, with `cursor`, `has_more` and `total`. The measured call sends both the video id and the comment id; this route answers even in windows where the top-level comment list is degraded.
Required: aweme_id, comment_id. Optional: cursor, count.
Open in Playground
GET/tiktok/mobile/commentsapiKey8 credits/request
Returns the top-level comments of one video as the mobile app returns them: each comment has its full `user` projection, `text`, `digg_count` and `reply_comment_total`, plus `cursor`, `has_more` and `total`. This route needs a signed-in app session and throttles independently of the replies route. A page with no comments (including an empty body) is returned as an empty result, because that is the documented degraded shape in a throttle window.
Required: aweme_id. Optional: cursor, count.
Open in Playground
GET/tiktok/mobile/feedapiKey8 credits/request
Returns one page of videos from TikTok's mobile For You feed. Each item carries `aweme_id`, `create_time`, `author_id`, `share_url` and the verified statistics block (`play_count`, `digg_count`, `comment_count`, `share_count`, `collect_count`, `download_count`, `forward_count`, `lose_count`, `lose_comment_count`, `whatsapp_share_count`, `repost_count`). A zero `count` uses the app's default page size; `count` is capped at 50.
Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/feed/offlineapiKey8 credits/request
Calls the app's cached-pull feed route - `GET /tiktok/feed/offline/v2` - which answers protobuf, and returns a schema-free decode: field numbers become keys, printable length-delimited fields become strings and nested messages become objects, plus a flat list of every string leaf (`strings`), which is the fastest way to mine video ids and captions. Field numbering is inferred because TikTok publishes no schema for this message. This is the cached/offline pull variant, not the primary `POST /aweme/v2/feed/` feed already exposed as `/tiktok/mobile/feed/post`.
Optional: pull_type, count.
Open in Playground
GET/tiktok/mobile/feed/postapiKey8 credits/request
Calls the app's primary feed route - `POST /aweme/v2/feed/`, which the Android client sends with a protobuf request body and answers with protobuf - and returns a schema-free decode: field numbers become keys, length-delimited fields become strings when printable, nested messages when they parse and base64 otherwise, plus a flat list of every string leaf. Field numbering is inferred because TikTok publishes no schema for this message; use the JSON `GET /tiktok/mobile/feed` route when you need the stable structured contract.
Takes no parameters.
Open in Playground
GET/tiktok/mobile/hashtagapiKey8 credits/request
Returns one hashtag's detail by name: `challenge_info` (cid, hashtag_name, desc, ...) and `stats` (view and video counts), exactly as the mobile API returns them. Hashtags are addressed by name; an internal id is rejected upstream.
Required: name.
Open in Playground
GET/tiktok/mobile/hashtag/postsapiKey8 credits/request
Lists videos for one hashtag name as the mobile app returns them (`aweme_list` with author, music and statistics), plus `cursor` and `has_more`. `sort=fresh` is the newest list and works from any measured egress; `sort=popular` is the hot list and only answers from a US egress.
Required: name. Optional: sort (2 allowed values: fresh, popular), count, cursor.
Open in Playground
GET/tiktok/mobile/hashtagsapiKey8 credits/request
Searches hashtags by keyword and returns the matching hashtag objects unmodified, with `cursor` and `has_more` for paging.
Required: keyword. Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/live/effectsapiKey8 credits/request
Returns the complete LIVE effects/sticker asset catalogue in one call: `data.assets` (2,032 assets, each with `id`, `name`, `describe`, `resource_url`, `resource_uri`, `md5`, `size`, `resource_type`, `download_type`, `model_requirements`, `sticker_asset_variant` and `video_resource_list`). There are no request parameters and no paging, and the body is large because the catalogue is complete.
Takes no parameters.
Open in Playground
GET/tiktok/mobile/live/giftsapiKey8 credits/request
Returns the complete LIVE gift catalogue in one call: `data.gifts` (771 gift objects with `diamond_count`, `describe`, `duration`, `gift_resources`, `gift_skins`, `batch_gift_info` and `combo`) plus the gift config and resource maps (`gift_configs`, `gifts_info`, `doodle_templates`, `gift_name_group_map`, `gift_resource_group_map`). There are no request parameters and no paging: the response is a single complete catalogue.
Takes no parameters.
Open in Playground
GET/tiktok/mobile/live/hashtagsapiKey8 credits/request
Returns the reference set the app's "go LIVE" flow uses to tag a stream: the general LIVE hashtags (`hashtags`, measured 18 entries of `{id, image, namespace, title}`, where `id` 0 is the "None" tag), the live-studio/live-voice/third-party hashtag subsets (`live_studio_hashtags` 16, `live_voice_hashtags` 16, `third_party_hashtags` 9), the single `game_hashtag`, and a 1,500-entry game catalogue (`game_tag_list`, `game_tag_count`) where every entry carries the same 12 keys: `id`, `short_name`, `show_name`, `full_name`, `bundle_id`, `package_name`, `game_category` (`[{game_type, title}]` with PC games/Mobile games/Console games/Others), `hashtag_id`, `hashtag_list`, `gar`, `landscape` (0/1/2) and `is_new_game`. The upstream is `/webcast/room/hashtag/list/` on the webcast edge host (no origin header); the measured body is 539,361 B and byte-identical on both working webcast hosts, `language`/`count` do not change it, and there is no cursor/has_more, so it is a one-shot reference dump. Measured 2026-10-22,
Takes no parameters.
Open in Playground
GET/tiktok/mobile/live/room-by-userapiKey8 credits/request
Returns the LIVE room a TikTok user is currently streaming, keyed by `user_id`. The upstream is `/webcast/room/info_by_user/` on the webcast edge host (no origin header) and returns the same room payload as `/api/v1/tiktok/mobile/live/room` (title, status, concurrent viewers, owner, cumulative stats, per-resolution FLV URLs, cover and the ~500-key room object in `data`), except that the caller addresses a user and the room id is filled from the payload (both `user_id` and `room_id` are echoed). Measured 2026-10-22: `user_id=6707748031095751686` answered 184,575 B (195,220 B on the second webcast host); `anchor_id` alone answers a 57-byte empty payload, so `user_id` is the address. A user with no live room answers status 30003 "room has finished" and is surfaced as a 400; a non-numeric user id is a 400 (status 10011); a bare call answers a 57-byte empty success envelope, which is why this endpoint requires `user_id`.
Required: user_id.
Open in Playground
GET/tiktok/mobile/live/roomapiKey8 credits/request
Returns one LIVE room's detail, keyed by `room_id` — the numeric id that `/api/v1/tiktok/mobile/live/search` returns under `data[].lives.author.room_id`. The upstream is `/webcast/room/info/` on the webcast edge host (no origin header), captured from the running 47.4.3 app's LIVE surface and reproduced against the live gateway. The response projects the fields callers key on — `title`, `status` (2 = live), `user_count` (concurrent viewers), `create_time`, `owner` (user id, nickname, avatar), `stats` (cumulative `enter_count`/`total_user`, `watch_user_count`, `like_count`, `comment_count`, `share_count`, `follow_count`, `replay_viewers`), `stream` (playable `flv_pull_url` per resolution plus `default_resolution`/`candidate_resolution` and the HLS/RTMP URLs) and `cover` — and keeps the upstream room object unmodified in `data` (it has ~500 keys, so a partial struct would drop fields). Measured 2026-10-22: one room returned 193-198 KB with 1,595-1,600 concurrent viewers, 27,916 cumulative viewers, 27,096 enters and FLV URLs for FULL_HD1/HD1/SD1/SD2. `anchor_id` is deliberately NOT forwarded: it was measured to suppress the audience-only `stats.total_user` (27,916 -> 0 on the same room). A missing, non-numeric or unknown room id answers the webcast envelope's status 10011 and is surfaced as a 400; a finished room (status 30003) is a 400 too.
Required: room_id.
Open in Playground
GET/tiktok/mobile/live/searchapiKey8 credits/request
Searches the mobile app's LIVE surface by keyword: `data` of `{type, anchor}` entries with `feedback_type` set to `live`, plus `cursor` and `has_more`. `keyword` is required; without it the gateway answers a valid but empty envelope. This is the API's first LIVE endpoint.
Required: keyword. Optional: count.
Open in Playground
GET/tiktok/mobile/music/beatsapiKey8 credits/request
Returns the mobile app's beats/songs chart unmodified: `music_list` of the same full sound objects the pick chart returns (`id_str`, `title`, `user_count`, `album`, `artists`, `cover_*`), ordered as the app's beats list. The measured envelope carries no paging fields.
Optional: count.
Open in Playground
GET/tiktok/mobile/music/chartapiKey8 credits/request
Returns one page of the app's regional sound chart: `chart_info` (chart id and update time), `cover_image_url` and a ranked `music_list` whose rows are a `music_info` sound object plus a `trend` entry; page with the returned `cursor` while `has_more` is true. `chart_region` selects the regional chart and accepts only `AE`, `BR`, `CA`, `DE`, `EG`, `FR`, `JP`, `KR`, `LB`, `MX`, `NG`, `SA`, `TR`, `US` and `ZA` (any other value returns an invalid-parameters error; omitting it returns the default chart, which equals `US`). `AE`, `EG`, `LB` and `SA` share one chart, as do `NG` and `ZA`. This is distinct from `music/pick`, which returns the creation panel's pick list with banners.
Optional: chart_region (15 allowed values: AE, BR, CA, DE, EG, FR, JP, KR, LB, MX, NG, SA, TR, US, ZA), cursor, count.
Open in Playground
GET/tiktok/mobile/music/choicesapiKey8 credits/request
Returns the app's "music choices" list: the recommended sounds it offers on the video-creation page. The upstream is `/aweme/v1/music/choices/`; each `music_list` entry is the same full sound object the chart routes return (title, album, artists, covers, play URL, duration, ...). Measured 2026-10-21: 56,078 B / 6 full sound objects on one call and 7 on later calls (the same six at the front), and the payload carries NO paging fields (no cursor/has_more), so this is a one-shot recommendation list. The measured `item_id`, `music_id`, `count` and `scene` parameters did not deterministically change the list — the recommendations rotate — so none is exposed.
Takes no parameters.
Open in Playground
GET/tiktok/mobile/music/collection-listapiKey8 credits/request
Returns the app's music-collection LIST (`mc_list` of collection objects with covers), the browse list of curated music collections. This is a different route from `/api/v1/tiktok/mobile/music/collections`, which is the collection FEED (`mcf_list`, with each entry's music inline). The upstream is `/aweme/v1/music/collection/`. Unlike the feed, this route PAGES for real: `count` is honoured (measured 1 -> 1 item with `cursor: 1, has_more: 1`; 5 -> 5 items with `cursor: 5`; 10/100 -> all 8 collections) and `cursor` advances (measured `count=5&cursor=5` -> the remaining 3 with `has_more: 0`). A negative count answers upstream status 5, which is rejected locally. Measured 2026-10-21: 8 collections total.
Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/music/collectionsapiKey8 credits/request
Returns the mobile app's sound-collection feed unmodified: `mcf_list`, where each entry is `{collection, music_list}` (the measured default page holds 8 entries), plus `cursor` and `has_more`. This route is first-page only: the returned `cursor` is not a reusable page token, so callers should not page with it.
Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/music/pickapiKey8 credits/request
Returns the mobile app's sound pick/chart list: `music_list` of full sound objects (id, title, author, user_count, duration, ...) plus the chart list `mc_list` and `radio_cursor`.
Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/music/postsapiKey8 credits/request
Lists the videos that use one sound, as the mobile app returns them: `aweme_list` of full video objects (with `author`, `statistics` and `added_sound_music_info`), plus `cursor` and `has_more`. `music_id` is required. `count` is accepted but ignored upstream - the server returns its own default page, so page with `cursor`.
Required: music_id. Optional: sort (2 allowed values: fresh, popular), count, cursor.
Open in Playground
GET/tiktok/mobile/music/relatedapiKey8 credits/request
Returns sounds related to one video: `music_list` of full sound objects, `recall_info_list` explaining why each was recalled, `similar_song_ids`, plus `cursor` and `has_more`.
Required: aweme_id. Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/music/trendingapiKey8 credits/request
Returns the mobile app's trending sound chart: `music_list` of full sound objects (`id_str`, `title`, `user_count`, `album`, `artists`, `cover_large`/`cover_medium`/`cover_thumb`, `binded_challenge_id`, `collect_stat`, `audition_duration`) unmodified, plus `cursor` and `has_more` for paging. This is the chart behind `music.trending`.
Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/mv/videosapiKey8 credits/request
Returns one page of an MV channel feed, the app's music-video ("MV") tab. The upstream is `/aweme/v1/mv/aweme/`; `mv_id` is a small numeric CHANNEL index, NOT a video id — measured ids 0-10 each returned a 15-video page of full aweme objects (1.05-1.24 MB), while 100 returned a valid empty page and a real aweme id returned an empty list. The server's page size is 15 and `count` was measured IGNORED (`count=5` and `count=10` both returned 15 items), so `count` is not exposed; page with `cursor`. The returned `cursor` is a reusable next-page token (measured page 1 `cursor: 18, has_more: 1`; `cursor=18` returned a fresh page with `cursor: 38, has_more: 1`). The envelope's `top_awemes` (pinned entries), `original_aweme_id`, `page_extra` and `extra`/`log_pb` are kept as measured. Measured 2026-10-22, A missing or non-numeric `mv_id` is a 400; an unknown numeric channel is a valid empty page.
Required: mv_id. Optional: cursor.
Open in Playground
GET/tiktok/mobile/place/detailapiKey8 credits/request
Returns one place detail page, keyed by the `poi_id` that the place search endpoint returns. The upstream is TikTok's server-driven UI (`/tiktok/poi/slash/v1`) frame stream, assembled here into the component map of the place-detail screen: `food_head_info` (place name, formatted address, category, phone, coordinates, opening hours, rating/score with mention count, price range, tags and photo album), `poi_top_videos` (top videos strip), `poi_limited_post` (posts about the place: full video items plus `aweme_cursor`/`has_more_aweme`), `poi_review` (review preview with `has_more`) and `ai_summary` when the place has one. `nodes` is opaque and complete, `frames` keeps the raw ordered frames, and the typed counters (`top_video_count`, `post_count`, `post_cursor`, `has_more_posts`, `review_count`, `has_more_reviews`) are convenience projections. The measured page-size controls are forwarded with the app's defaults but the server applies its own bounds.
Required: poi_id. Optional: review_count, review_cursor, merged_count, video_cursor, enter_from.
Open in Playground
GET/tiktok/mobile/place/infoapiKey8 credits/request
Returns one place's compact record, keyed by the `poi_id` that the place search endpoint returns. The upstream is TikTok's POI read (`/tiktok/poi/get/v1`), the record behind a place card: `name`, `address`, `category`, `average_price`, `latitude`/`longitude`, `city_code`/`region_code`, `review_score` with `review_count`/`no_rating`, `video_count`, `favorite_count`, `opening_hours`/`opening_status`, `cover`, `share_url`/`share_desc` and `parent_poi`, plus the upstream POI object unmodified in `place` so a richer field is never lost. This is the cheap lookup to use instead of the ~1 MB slash detail page when only the place record is needed. A nonexistent id answers 400 (the upstream business status 3009009 "poi not exist" is a caller error, not an outage). Measured 2026-10-21: 4,594 B for a coffee shop (score 4.7 / 2 reviews, price "$", hours "8:00 AM – 5:00 PM", 11 videos), 4,623 B for a second location (score 4.8 / 13 reviews).
Required: poi_id.
Open in Playground
GET/tiktok/mobile/place/mediaapiKey8 credits/request
Returns one page of a place's mixed video/photo grid unmodified in `item_list`: each row carries an `aweme` video object or a photo entry plus `media_type`/`item_type`, an `aweme_cover`, topic tags and a crop cover. `next_cursor` is the opaque paging token to pass back as `cursor` (send the returned `data_version` with it; the endpoint defaults it to `v1`). `size` is the app's page hint (default 6, max 30; the server caps larger values).
Required: poi_id. Optional: cursor, size, data_version.
Open in Playground
GET/tiktok/mobile/place/photosapiKey8 credits/request
Returns one place's photo album, keyed by the `poi_id` that the place search endpoint returns. The upstream is `/tiktok/poi/picture_album/v1`: `categories` holds each album tab (`name`, `pic_tab_typecode`, `pictures` of bare image URL lists and `pictures_v2`, the same photos with `author` attribution, `pic_id`, `source` and origin/compressed URL info), `photo_count` sums the categories' pictures, and `title` is the app's own header. Measured 2026-10-21: one place answered 5,368 B, title "Gallery (3)", 1 category with 3 photos whose `pictures_v2` entries name the Google-places contributor; another answered 24,196 B with more photos. The album is one-shot: `count` and `pic_tab_typecode` were measured and did not change the page. A nonexistent id answers 500 (the upstream answers status 4 "Server is currently unavailable" on this route, unlike the poi-not-exist code the other place routes use).
Required: poi_id.
Open in Playground
GET/tiktok/mobile/place/reviewsapiKey8 credits/request
Returns one page of a place's reviews (`reviews`, full review objects: author, content, rating, tags, `server_param`) together with the score summary (`review_summary`: score and score range), the review tags (`review_tags`) and the paging token (`cursor`/`has_more`). The route uses the review-landing tab scene (`scene=7`) that the app's own review interface sends; without that scene the upstream rejects the request with `status_code 5`, which is why this family was previously unusable. `poi_id` is the place id from the place search/detail endpoints.
Required: poi_id. Optional: cursor, count, sort_type (2 allowed values: 1, 2).
Open in Playground
GET/tiktok/mobile/place/videosapiKey8 credits/request
Returns one page of the videos posted at a place, keyed by the `poi_id` that the place search endpoint returns. The upstream is `/tiktok/poi/video/list/v1`: `aweme_list` holds the app's full video objects (id, description, author, statistics, media URLs, music, anchors, ...) and `item_count` is this page's size. Page with `cursor`: the returned `cursor` is a reusable next-page token (measured page 1 `cursor: 20` with `has_more: 1`, page 2 `cursor: 40`), never with arithmetic on `count`. `count` is a page-size hint, not a strict size: 1/2/5 returned exactly that many items on the first page, a later page returned 8 for count=5, and 10/20/50 were all server-capped at 17. Measured 2026-10-21: 11 videos (940-944 KB) on one place, 17 videos (1.4 MB) on another. The route exposes no sort control: `sort_type` and `order` were measured and did not change the page or its order. The upstream throttles bursts, so paced clients are expected.
Required: poi_id. Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/playlist/detailapiKey8 credits/request
Returns one playlist's record unmodified in `mix`: `mix_id`, `name`, `mix_type`, `creator_name`, `author`, `share_info`, `statistic.total` and `status`, plus `is_collect`. `mix_id` is the web playlist id namespace; the owner identity selector (`user_id` or `sec_user_id`) is required as well (the mobile route rejects `mix_id` alone with `status_code 5`).
Required: mix_id. Optional: user_id, sec_user_id.
Open in Playground
GET/tiktok/mobile/playlist/listapiKey8 credits/request
Lists the public playlists ("mixes") of one creator unmodified in `mix_list`: each row carries the playlist `mix_id` (the same id the web playlist URL uses), `name`, `mix_type`, `creator_name`, `statistic.total` and `last_add_video_timestamp`. Feed `mix_id` to the playlist detail endpoint. Requires one identity selector (`user_id` or `sec_user_id`).
Optional: user_id, sec_user_id, cursor.
Open in Playground
GET/tiktok/mobile/playlist/videosapiKey8 credits/request
Lists one page of a playlist's videos unmodified in `item_list`: each entry is the full video object the app renders (author, statistics, music, cover renditions, description). `mix_id` is the playlist id from the playlist list/detail endpoints; pass the returned `cursor` back while `has_more` is true. This endpoint is served from the public web twin (`www.tiktok.com/api/mix/item_list/`) because the mobile item route is not usable.
Required: mix_id. Optional: cursor, count.
Open in Playground
GET/tiktok/mobile/searchapiKey8 credits/request
Keyword search returning the mobile API result documents unmodified: each entry has `aweme_info` (a full video object with statistics), `card_profile` and search metadata, plus `cursor` and `has_more`. Keep `count` small (20 already exceeds one megabyte of upstream JSON).
Required: keyword. Optional: count, offset, search_id.
Open in Playground
GET/tiktok/mobile/search/effectsapiKey8 credits/request
Searches TikTok's effect catalogue by `keyword`, returning the app's full effect objects (`name`, `hint`, `icon_url`, `file_url`, `effect_id`, `types`, `tags`, `parent`/`children`, `effect_type`, `music`, `source`, `designer_id`, `schema`). The upstream is `/aweme/v1/search/effect/`; the page is unfolded to the top level (`effects`, `cursor`, `has_more`, `search_id`, `use_hot`, plus `bind_effects`/`collection` on some queries). Paging is real but needs BOTH halves of the token: pass the previous response's `cursor` and `search_id` together (measured: page 1 `cursor: 100`, page 2 with `cursor=100&search_id=...` returned the final effect with `has_more: false`; a cursor without its `search_id` returns an empty page, which the service rejects as a 400). `count` and `offset` were measured as no-ops. Measured 2026-10-21: `keyword=green screen` -> 6 effects (11,831 B) + 1 on page 2, `green` -> 2, `字幕` -> 4; a keyword with no matches is a valid empty page.
Required: keyword. Optional: count, cursor, search_id.
Open in Playground
GET/tiktok/mobile/search/hashtagsapiKey8 credits/request
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: `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.
Required: keyword. Optional: count.
Open in Playground
GET/tiktok/mobile/search/musicapiKey8 credits/request
Keyword search over sounds, returning `music_info_list` of full sound objects unmodified with `cursor`, `has_more` and `total`.
Required: keyword. Optional: count, offset.
Open in Playground
GET/tiktok/mobile/search/photosapiKey8 credits/request
Searches TikTok photo posts with the app's own Photos-tab call and returns the page unmodified. Rows live in `search_item_list` (each row's `aweme_info` carries `image_post_info.images`, the carousel images) while `aweme_list` is an empty array; `feedback_type` is `"photo_tab"`. `keyword` is required; `count` is bounded at 50 (default 10, the app's value) and `offset` is forwarded as the app's row offset. `sort_type` (0 relevance, 1 like count, 3 date posted) and `publish_time` (recency window in days) are the app's filter-sheet controls.
Required: keyword. Optional: count, offset, sort_type, publish_time, search_source.
Open in Playground
GET/tiktok/mobile/search/placeapiKey8 credits/request
Returns TikTok's place (POI) search results for a keyword, unmodified: each row carries `poi_name`, `poi_id`, `poi_type`, `video_count`, `poi_rating`, `poi_distance`, `poi_location`, `lat`/`lng`, `img_url`, `opening_time`, `price_level` and `parent_poi`. Useful for mapping a location or category to the places TikTok knows about, and for seeing how many videos each place carries. `keyword` is required. The page holds up to 30 rows (`count` 1-30 measured; a larger count makes the upstream answer an empty page, so the service rejects it) and the route is first-page-only — the returned `cursor` is not a reusable page token.
Required: keyword. Optional: count.
Open in Playground
GET/tiktok/mobile/search/pre-infoapiKey8 credits/request
Returns the `pre_info_id` token the app attaches to a search session (with its TTL). The token is short-lived; the app requests one before the search stream and reuses it for the following calls.
Optional: keyword, count.
Open in Playground
GET/tiktok/mobile/search/sugapiKey8 credits/request
Returns the mobile app's search typeahead for a seed keyword: `sug_list` of suggestions, each with `content`, `sug_type`, `word_record` (`group_id`, `words_position`, `words_content`, `words_source`) and positional fields, unmodified. Useful for query expansion and for seeing the phrases the app itself associates with a seed term. `keyword` is required; without it the upstream answers a well-formed but empty envelope.
Required: keyword. Optional: count.
Open in Playground
GET/tiktok/mobile/search/tabsapiKey8 credits/request
Returns the tab keys the mobile search screen offers for a keyword (`general`, `video`, `photos`, `user`, `music`, `live`, `place`, `hashtag`), plus the gateway's `is_failed` flag. Measured on the mobile search edge with a form POST.
Required: keyword.
Open in Playground
GET/tiktok/mobile/search/userapiKey8 credits/request
Keyword search over users, returning `user_list` unmodified. Each `user_info` carries the populated creator statistics (follower_count, following_count, total_favorited, aweme_count, custom_verify).
Required: keyword. Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/translation/descriptionapiKey8 credits/request
Translates one video's caption with the app's own translation route and returns the translated caption both as the app's raw markup (`translated_client_text.client_text_v2.markup_text`, where line breaks are `<br>` and hashtags are wrapped in `<h id="N">...</h>`) and as plain text in `text`. `item_id` is required; `target_lang` defaults to `en` and accepts the app's language codes (`en`, `ja`, `pt-BR`, `zh-Hans`, ...).
Required: item_id. Optional: target_lang.
Open in Playground
GET/tiktok/mobile/trending/categoriesapiKey8 credits/request
Returns the discover-category feed unmodified: each `category_list` entry is `{aweme_list, category_type, challenge_info, click_track_url_list, desc, track_url_list}`, with `cursor` and `has_more` for paging.
Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/trending/effectsapiKey8 credits/request
Returns the effect/sticker discovery feed unmodified: `aweme_list` of full video objects, each additionally carrying `stickers` and `sticker_detail`, plus `feed_session_id`, `cursor` and `has_more`.
Optional: count, cursor.
Open in Playground
GET/tiktok/mobile/user/original-effectsapiKey8 credits/request
Lists the effects one creator published unmodified in `effect`: each row carries the `effect_id`, `name`, `desc`, `icon_url`, `effect_source`, attributions, linked anchors and moderation status, with cursor paging (`cursor`/`has_more`). `user_id` must be the numeric uid. A creator with no published effects returns an empty list.
Required: user_id. Optional: cursor, count.
Open in Playground
GET/tiktok/mobile/user/original-musicapiKey8 credits/request
Lists the "original sounds" groups of one creator unmodified in `groups`: each group carries the `music` sound object, a `similar_music_list` and the `source_music_id`; the envelope also carries the creator's `honor_label`, a flat `music` list and cursor paging (`cursor`/`has_more`). `user_id` must be the numeric uid (a `sec_user_id` alone is rejected upstream with `status_code 5`).
Required: user_id. Optional: cursor, count.
Open in Playground
GET/tiktok/mobile/user/recommendationsapiKey8 credits/request
Returns the app's suggested creators for the Following page unmodified: `user_list` entries are `{user, aweme_list}` where `user` is the full creator projection (uid, sec_uid, nickname, signature, avatars, follower/following counts, verification and privacy flags) and `aweme_list` holds up to three recent videos, so this is a creator-discovery surface rather than a bare id list. The route has no paging fields and returns one page of 13-17 creators (fresh recommendations differ per call). `count` is accepted for parity but the gateway was measured to ignore it.
Optional: count.
Open in Playground
GET/tiktok/mobile/video/subtitlesapiKey8 credits/request
Returns one video's own captions translated into the requested language, as TikTok's caption/language (`cla`) service serves them. The response carries the track twice: `webvtt` is the upstream WebVTT text verbatim, and `cues` is the same track parsed into `{start_ms, end_ms, start, end, text}` records so a caller does not have to implement WebVTT. `video_id` is the aweme id returned by the feed, search, profile-posts and hashtag endpoints. Measured 2026-10-21: the Korean-caption video 7696141388324293918 answered 11 English cues for `language=en`, and the same video answered Japanese, Chinese, Spanish, French, German, Korean, Portuguese, Russian, Arabic, Hindi, Indonesian, Thai, Vietnamese, Turkish and Italian tracks; a Portuguese-lyrics video answered an 18,494-character English track (240 cues). Track size is a snapshot rather than a contract (the upstream re-translates from a cache), so assert a non-empty track in the requested language, not a byte count. A video with no captions answers 400 (upstream status 5); a nonexistent video answers 500 (upstream status 4).
Required: video_id, language.
Open in Playground
GET/tiktok/popular-trend/country-industry-metaapiKey8 credits/request
Lists the country and industry filter values used by the TikTok Creative Center popular-trend endpoints. Countries have an `id` such as `AR` and a name; industries have a numeric `id` and a name such as Apparel & Accessories. A maintained fallback list is returned if TikTok's own metadata is unavailable.
Takes no parameters.
Sampled 14 Oct 2026: 71 items. Filled in every item: id, value.
Open in Playground
GET/tiktok/post/{id}apiKey8 credits/request
Returns TikTok's detail record for one video by video id. `itemInfo.itemStruct` holds the video's description, the author's profile and the author's statistics (such as followers, following and hearts) along with the rest of TikTok's video object; `shareMeta` holds the share title and description.
Required: id.
Sampled 14 Oct 2026: 4 fields returned with a value, 5 empty (extra.fatal_item_ids, itemInfo, shareMeta.desc, shareMeta.title, status_msg). In the sample: extra.now: 1,791,911,830,000.
Open in Playground
GET/tiktok/postsapiKey8 credits/request
Lists posts from a TikTok profile identified by `secUid`. `sort_type` is `0` latest (default), `1` popular or `2` oldest. `cursor` defaults to 0. The response has `itemList`, `hasMore` and a `cursor` to pass back to fetch the next page.
Required: secUid. Optional: cursor, sort_type (3 allowed values: 0, 1, 2).
Sampled 14 Oct 2026: 35 items. Filled in every item: CategoryType, IsHDBitrate, ShowAIGC, author, authorStats, authorStatsV2, collected, createTime and 22 more. Not in every item: contents (31), desc (31), duetEnabled (25), penaltyContext (25), stitchEnabled (25), imagePost (10), titleLanguage (10), titleTranslatable (10) and 2 more. In the sample: CategoryType: 103 to 120, median 120; IsHDBitrate: true in 0 of 35; contents: median 1 entry; ShowAIGC: true in 11 of 35; collected: true in 0 of 35; createTime: 1,789,107,622 to 1,791,905,298, median 1,790,356,493; digged: true in 0 of 35; duetEnabled: true in 25 of 25.
Open in Playground
GET/tiktok/profile/{handler}apiKey8 credits/request
Returns a public TikTok profile by `handler`, the username without the leading `@`. The `user` object has the id, `uniqueId`, nickname, signature, verified and private flags, region, language, avatar, bio link and `secUid`; `stats` has follower, following, heart, video and friend counts. A missing, deleted or banned handle returns 404.
Required: handler.
Sampled 14 Oct 2026: 22 fields returned with a value, 1 empty (user.region). In the sample: user.createTime: 1,689,461,786; user.avatarLarger: p19-common-sign.tiktokcdn-us.com; user.verified: true; user.privateAccount: false; user.secret: false; user.ttSeller: false; user.isOrganization: 1; stats.followerCount: 4,000,000.
Open in Playground
GET/tiktok/searchapiKey8 credits/request
Searches TikTok videos for `keyword`. `cursor` defaults to 0 and `count` defaults to 20, capped at 50. The response has the matching video items, a `cursor` and `has_more` for paging. An empty, blocked or malformed result from TikTok returns an upstream error.
Required: keyword. Optional: cursor, count.
Sampled 14 Oct 2026: 20 items. Filled in every item: common, item, type.
Open in Playground
GET/tiktok/search/hashtagapiKey8 credits/request
Searches TikTok hashtags (challenges) for `keyword`. `cursor` defaults to 0 and `count` defaults to 20, capped at 50. The response has `challenge_list` with each hashtag's name and id, plus a `cursor` and `has_more` for paging. An empty, blocked or malformed result returns an upstream error.
Required: keyword. Optional: cursor, count.
Sampled 14 Oct 2026: 3 items. Filled in every item: id, title. Not in every item: coverLarger (0), coverMedium (0), coverThumb (0), desc (0), profileLarger (0), profileMedium (0), profileThumb (0).
Open in Playground
GET/tiktok/search/userapiKey8 credits/request
Searches TikTok users for `keyword`, with `cursor` (default 0) for paging. The response has `user_list` with the matching accounts, plus a `cursor` and `has_more` to continue. Pass the returned `cursor` back to fetch the next page.
Required: keyword. Optional: cursor.
Sampled 14 Oct 2026: 10 items. Filled in every item: user_info. Not in every item: challenges (0), effects (0), items (0), mix_list (0), musics (0), position (0), uniqid_position (0).
Open in Playground
GET/tiktok/top-ads/analysisapiKey8 credits/request
Returns the detail-page interactive time analysis chart and percentile for a Top Ads material. Metric values are `retain_ctr` (CTR), `retain_cvr` (CVR), `click_cnt` (Clicks), `convert_cnt` (Conversion), and `play_retain_cnt` (Remain).
Required: material_id. Optional: metric (5 allowed values: retain_ctr, retain_cvr, click_cnt, convert_cnt, play_retain_cnt), period_type (3 allowed values: 7, 30, 180).
Sampled 14 Oct 2026: 18 items. Filled in every item: second, value. In the sample: second: 0 to 17, median 8; value: 0 to 1, median 0.09.
Open in Playground
GET/tiktok/top-ads/detailapiKey8 credits/request
Returns detail for one TikTok Creative Center Top Ads material. Use `material_id`; the upstream does not accept `id` or `materialId`.
Required: material_id.
Sampled 14 Oct 2026: 20 fields returned with a value. In the sample: data.comment: 21; data.favorite: false; data.objectives: 1 entry; data.cost: 1; data.ctr: 0.14; data.like: 268; data.share: 12.
Open in Playground
GET/tiktok/top-ads/filtersapiKey8 credits/request
Returns filter metadata for TikTok Creative Center Top Ads. Dynamic values come from TikTok; static UI enums are included for `order_by`, `duration`, `like`, and `ad_format`.
Takes no parameters.
Sampled 14 Oct 2026: 258 items. Filled in every item: id, value, label. Not in every item: parent_id (237).
Open in Playground
GET/tiktok/top-ads/listapiKey8 credits/request
Returns high-performing auction ads from TikTok Creative Center. The service defaults `period` to 30, `page` to 1, `limit` to 20, and `order_by` to `for_you`. Use `/tiktok/top-ads/filters` for dynamic enum values and static enums for order, duration, likes, and ad format.
Optional: period (3 allowed values: 7, 30, 180), page, limit, order_by (7 allowed values: for_you, impression, ctr, play_2s_rate, play_6s_rate, cvr, like), country_code, keyword, industry, objective, ad_language, pattern_label, duration (6 allowed values: time-2, time-3, time-4, time-5, time-6, time-7), like (5 allowed values: 1, 2, 3, 4, 5), ad_format (2 allowed values: 1, 2).
Sampled 14 Oct 2026: 1 item. Filled in every item: ad_title, cost, ctr, favorite, id, industry_key, is_search, like and 2 more. In the sample: favorite: true in 0 of 1; is_search: true in 1 of 1.
Open in Playground
GET/tiktok/top-ads/location-infoapiKey8 credits/request
Returns TikTok's inferred initial country and industry targeting context for Top Ads. Use it when you need starting targeting values; use the locations, filters, and list endpoints to choose criteria and retrieve ads.
Optional: module.
Sampled 14 Oct 2026: 6 fields returned with a value, 2 empty (data.first_industry, data.second_industry). In the sample: data.l1_industry: 0; data.initial_country: 1 entry; data.l2_industry: 0.
Open in Playground
GET/tiktok/top-ads/locationsapiKey8 credits/request
Lists the country filters offered by TikTok Creative Center Top Ads. Each country has an `id` such as `US`, a `value` (the country name), a `label` and a `has_conversion` flag. Takes no parameters.
Takes no parameters.
Sampled 14 Oct 2026: 73 items. Filled in every item: id, value, label.
Open in Playground
GET/tiktok/top-ads/recommendapiKey8 credits/request
Lists Top Ads materials that TikTok Creative Center recommends as related to the ad with `material_id`. `page` starts at 1; `limit` defaults to 20 and is capped at 100. Each ad has its title, brand, likes, comments, shares, CTR, objectives and video info. The list can be empty for a valid id.
Required: material_id. Optional: page, limit.
Sampled 14 Oct 2026: 3 fields returned with a value, 1 empty (data.materials).
Open in Playground
GET/tiktok/top-ads/safetyapiKey8 credits/request
Returns the Creative Center safety configuration flags for search: `top_ads_search`, `keyword_search`, `hashtag_search`, `creator_search`, `sound_search` and `cc_banner_key`. It carries feature flags only, not ad materials. Takes no parameters.
Takes no parameters.
Sampled 14 Oct 2026: 8 fields returned with a value, 1 empty (data.cc_banner_key). In the sample: data.creator_search: 0; data.hashtag_search: 0; data.keyword_search: 0; data.sound_search: 0; data.top_ads_search: 0.
Open in Playground
GET/tiktok/top-ads/spotlightapiKey8 credits/request
Lists the Top Ads Spotlight materials that TikTok Creative Center hand-picks. `page` starts at 1; `limit` defaults to 20 and is capped at 100. Each ad has its title, brand, likes, comments, shares, CTR, objectives and video info. `data.pagination` gives the page, size, total and `has_more`.
Optional: page, limit.
Sampled 14 Oct 2026: 5 items. Filled in every item: cost, ctr, favorite, highlight, id, like, video_info. In the sample: cost: 1 to 2, median 2; favorite: true in 0 of 5; highlight: median 218 characters; ctr: 0.13 to 0.21, median 0.15; like: 77 to 36,951, median 5,580.
Open in Playground
GET/tiktok/top-ads/suggestionsapiKey8 credits/request
Returns Top Ads search suggestions from TikTok Creative Center. `count` is the maximum number of suggestions (default 50) and `scenario` picks the suggestion scenario id (default 1). The `query` list can be empty for the default scenario.
Optional: count, scenario.
Sampled 14 Oct 2026: 3 fields returned with a value, 1 empty (data.query).
Open in Playground
GET/tiktok/trendingapiKey8 credits/request
Returns the current TikTok trending feed: `itemList` holds the videos, and `hasMore` and `cursor` describe paging. The response also has a `trendingTopics` field. Takes no parameters.
Takes no parameters.
Sampled 14 Oct 2026: 5 items. Filled in every item: CategoryType, IsHDBitrate, ShowAIGC, author, authorStats, authorStatsV2, backendSourceEventTracking, challenges and 27 more. Not in every item: imagePost (1), titleLanguage (1), titleTranslatable (1), diversificationId (4), AIGCDescription (0). In the sample: CategoryType: 100 to 120, median 111; IsHDBitrate: true in 0 of 5; challenges: median 5 entries; ShowAIGC: true in 5 of 5; collected: true in 0 of 5; contents: median 1 entry; createTime: 1,787,227,929 to 1,791,360,827, median 1,788,366,377; digged: true in 0 of 5.
Open in Playground