Skip to main content
Use these operations when you need platform-specific data beyond the normalized profile, posts, post, and TikTok audience resources.
Start with a normalized endpoint when it covers your use case. It gives you the same response schema across platforms. Choose an operation on this page when you need a platform-only resource or the platform’s full field structure.

Choose an operation

Every public path follows one convention:
Overlapping capabilities are combined only when their request and response contracts are compatible. Rich profile objects, Instagram timelines and reels, and full Instagram post objects have explicit operation names because replacing the normalized response schema would break existing integrations. TikTok audience sampling is consolidated into the normalized /tiktok/audience route because its response remains wire-compatible. The field examples below are based on verified 200 responses. SideShift applies the same authentication, billing, error, and outer response envelope to every operation.

Quick example

Send a SideShift scraper key (scrape_live_*) in the x-api-key header and a JSON request body. See the quickstart for complete setup examples.

Response shape

The operation examples below document the contents of data. The outer envelope is consistent across the entire Scraper API:
Platform field names and nesting inside data are intentionally preserved. Keep the capitalization shown in the schemas, including uniqueId, UserStoryStatus, strong_id__, and AIGCDescription. A missing count can be null; numeric 0 means the platform returned a real zero. Read Responses and data for the envelope, identifier, media URL, and nullability rules.

Billing, pagination, and failures

  • Every completed platform operation or page costs 1 SideShift credit.
  • Confirmed not-found responses are billed.
  • Requests rejected before work starts (400, 401, 402, 413, 429) are free.
  • SideShift/data-source failures and timeouts (500, 502, 504) are refunded.
Pass returned cursors back verbatim and stop when the corresponding has_more flag is false. TikTok follower/following lists use min_time; collection posts use max_cursor; Instagram timeline uses next_max_id; Instagram reels use max_id; and Instagram hashtag/profile search uses page numbers capped at 10. Single-shot operations return no cursor. Read meta.credits_charged on success and X-Scraper-Credits-Charged on errors. Retry refunded 500/502/504 failures with backoff, do not loop on billed 404 responses, and honor Retry-After on 429. See Billing, errors, and limits for the complete policy and a copyable retry wrapper.

API reference

The operation sections below include copyable requests, parameter tables, pagination rules, and response-field tables. The left navigation also exposes a generated interactive reference for every endpoint.

TikTok — 27 platform operations

Posts come back as TikTok’s aweme object: aweme_id (the numeric id in a permalink), desc, statistics (play_count, digg_count, comment_count, share_count, collect_count), video (play_addr, cover, duration — each URL field is a {uri, url_list} wrapper, read url_list[0]), author, music, create_time and url. Creators come back as uid / unique_id / nickname / sec_uid / avatar_medium / follower_count / following_count.

TikTok · Creator

POST /api/v1/scrape/tiktok/profile-details

Profile header for one creator — identity, counts, links.
Returns user and stats in TikTok’s own web shape. itemList is present and empty; use the post endpoints for a feed.
Response — the data object:
user fields: stats fields:

POST /api/v1/scrape/tiktok/favorites

Videos a creator publicly liked.
Most accounts hide their Liked tab, so an empty page is normal rather than an error.
Response — the data object:

POST /api/v1/scrape/tiktok/reposts

Posts a creator reposted.
Each item is the ORIGINAL author’s post, so author.unique_id is that author, not the account queried.
Response — the data object:

POST /api/v1/scrape/tiktok/stories

A creator’s currently-live stories (they expire after 24h).
Stories expire after 24 hours and most creators do not post them, so an empty aweme_list is the normal answer and means “no live story right now” — not an error, and not an empty account.
Response — the data object:

POST /api/v1/scrape/tiktok/followers

Accounts following a creator.
Pages on min_time, not cursor. total carries the real follower count, so the gap between it and what pagination reaches is always visible.
Response — the data object:

POST /api/v1/scrape/tiktok/following

Accounts a creator follows.
Pages on min_time. Empty for accounts that hide the list.
Response — the data object:

POST /api/v1/scrape/tiktok/sound

One sound’s metadata — title, artist, artwork, duration, usage count.
Response — the data object:
music_info fields:

POST /api/v1/scrape/tiktok/sound-posts

The videos using a sound.
Response — the data object:

TikTok · Hashtag

POST /api/v1/scrape/tiktok/hashtag

Hashtag header — description, post count and lifetime views.
Accepts hashtag (the name) or challenge_id (e.g. “229207”).
Response — the data object:
hashtag fields:

POST /api/v1/scrape/tiktok/hashtag-posts

Posts carrying a hashtag.
Passing challenge_id instead of the name is slightly faster; the name form returns the hashtag object alongside the posts for free.
Response — the data object:
hashtag fields:

POST /api/v1/scrape/tiktok/hashtag-search

Keyword search over hashtags, with each one’s post and view totals.
Response — the data object:

TikTok · Playlist

POST /api/v1/scrape/tiktok/playlist

Playlist header — name, owner and video count.
Response — the data object:
playlist fields:

TikTok · Collection

POST /api/v1/scrape/tiktok/collection

Collection header — name, owner and video count.
Response — the data object:
collection fields:

POST /api/v1/scrape/tiktok/collection-posts

Videos saved inside a public collection.
This surface answers in TikTok’s WEB shape (id/desc/stats/createTime) and pages on max_cursor.
Response — the data object:

POST /api/v1/scrape/tiktok/collections

Every public collection a creator has published.
Response — the data object:

POST /api/v1/scrape/tiktok/playlists

Every playlist a creator has published.
Response — the data object:

TikTok · Discovery

POST /api/v1/scrape/tiktok/search

Keyword search over videos, with recency and sort filters.
date_posted: all-time · yesterday · this-week · this-month · last-3-months · last-6-months. sort_by: relevance · most-liked · date-posted.
Response — the data object:

POST /api/v1/scrape/tiktok/photo-search

Keyword search restricted to photo (slideshow) posts.
Response — the data object:

POST /api/v1/scrape/tiktok/profile-search

Keyword search over creators, with follower-band and verified filters.
Response — the data object:

POST /api/v1/scrape/tiktok/top-search

TikTok’s Top tab — best-matching videos, plus the creators and hashtags ranked beside them.
Response — the data object:

POST /api/v1/scrape/tiktok/search-suggestions

The autocomplete terms TikTok offers for a partial query.
Response — the data object:

POST /api/v1/scrape/tiktok/trending

The trending / For You feed for a region.
Single-shot: this feed carries no cursor, so each call returns a fresh sample rather than a page in a series.
Response — the data object:

POST /api/v1/scrape/tiktok/regions

The region codes accepted by the region-scoped endpoints. Takes no parameters.
A static list — cache it rather than fetching it per request.
Response — the data object:

TikTok · Comments

POST /api/v1/scrape/tiktok/comment-replies

The reply thread under one comment.
TikTok nests exactly one level, so replies never have replies. TikTok’s own reply cursor is off by one — page 2 repeats page 1’s last reply — so de-duplicate on cid, and use total for the real thread size. Requesting a thread in a single page avoids it entirely.
Response — the data object:

TikTok · Media

POST /api/v1/scrape/tiktok/transcript

A video’s caption track, as plain text and raw WEBVTT.
A genuine caption track, not speech recognition. Short share links (vm.tiktok.com) are rejected with a 400 — expand them first, or pass the bare numeric id.
Response — the data object:

TikTok · Ads

POST /api/v1/scrape/tiktok/ads

TikTok’s Top Ads library — the best-performing public ads.
Spend is not published for any ad, so cost is a band rather than a figure. ctr and like are the library’s real metrics.
Response — the data object:

POST /api/v1/scrape/tiktok/ad

The full record for one ad from the Top Ads library.
Response — the data object:
video_info fields:

Instagram — 15 platform operations

Instagram’s own payloads are passed through under the keys Instagram uses, so field names and nesting match what you would get from Instagram directly.

Instagram · Profile

POST /api/v1/scrape/instagram/profile-details

Full public profile: identity, counts, bio links, recent posts, related accounts.
Response — the data object:
data fields:

POST /api/v1/scrape/instagram/profile-summary

Profile summary keyed by numeric user id.
Response — the data object:
biography_with_entities fields: hd_profile_pic_url_info fields:

POST /api/v1/scrape/instagram/profile-embed

The profile embed HTML, plus an account summary and recent posts.
Response — the data object:
profile fields:

Instagram · Posts

POST /api/v1/scrape/instagram/timeline

A page of a profile’s timeline — reels, photos, videos and carousels.
Pages on next_max_id.
Response — the data object:
user fields:

POST /api/v1/scrape/instagram/reels

A page of a profile’s reels, including the play counts the timeline omits.
Pages on max_id. Passing user_id instead of handle is slightly faster.
Response — the data object:

POST /api/v1/scrape/instagram/post-details

One post or reel in full detail, as Instagram’s own post object.
Response — the data object:
data fields:

Instagram · Comments

POST /api/v1/scrape/instagram/post-comments

Top-level comments on a post or reel.
Response — the data object:

Instagram · Discovery

POST /api/v1/scrape/instagram/search

Ranked accounts, hashtags and suggested terms for a keyword.
Instagram ranks results only for topics it curates; a topic it does not curate returns a clean 404.
Response — the data object:
data fields:

POST /api/v1/scrape/instagram/popular-search

Instagram’s curated topic page and its posts.
Response — the data object:

POST /api/v1/scrape/instagram/hashtag-search

Public posts carrying an exact hashtag.
Paginates by cursor up to page 10; beyond that there is no page to return and the request is rejected rather than silently clamped.
Response — the data object:

POST /api/v1/scrape/instagram/profile-search

Creator discovery from bio and caption keywords.
Response — the data object:

POST /api/v1/scrape/instagram/reels-search

Keyword reel search.
Response — the data object:

POST /api/v1/scrape/instagram/trending-reels

The reels Instagram is currently featuring. Takes no parameters.
Response — the data object:
data fields:

Instagram · Audio

POST /api/v1/scrape/instagram/audio-reels

The reels using one audio track.
Response — the data object:
audio fields:

Instagram · Stories

POST /api/v1/scrape/instagram/highlight

Every story inside one highlight album.
The album id is the last path segment of a highlight’s public URL — instagram.com/stories/highlights/{id}/.
Response — the data object:
cover_media fields: user fields:

Response objects

These shapes repeat across many endpoints. Each endpoint’s Response table names which one its items use.

post

The video or photo object, used wherever a list of posts is returned (aweme_list, search_item_list, items). Sample:

creator

The account object, used by the follower, following and creator-search lists. Sample:

comment

One comment or reply. Sample:

collection post

TikTok answers its collection surface in a different, web-style shape — this is the only place it appears. Sample: