Docs

Requests

How every endpoint takes its input, the parameter names shared by all of them, and how unknown or mistyped parameters are answered.

Every endpoint follows the same conventions, so once you have called one you can call them all.

One identifying parameter

Each endpoint takes exactly one parameter that says what to fetch, named for what you have in hand:

  • url for an item and an item's lists (a video's transcript, a post's comments): a canonical link, a short or share link, a mobile link or the platform's own ID.
  • handle for a profile and a profile's lists: a profile link, @handle, a username or the platform's own ID.
  • query for searches (endpoints named search_…).

Each endpoint page lists the kinds of link its parameter takes. A link of another kind, or from another platform, fails with invalid_input at no charge, and the error names the endpoint that takes it: error.details says what the link is (url_kind, url_platform) and which endpoints take it (endpoints). The links SocialTap recognizes:

PlatformKind of linkExample
Facebookvideohttps://www.facebook.com/reel/1803909017420449
hashtaghttps://www.facebook.com/hashtag/cooking
posthttps://www.facebook.com/NASA/posts/pfbid02abc
profilehttps://www.facebook.com/NASA
Instagramvideohttps://www.instagram.com/reel/De1S3KpCXf0/
posthttps://www.instagram.com/p/C0AbCdEfGhI/
hashtaghttps://www.instagram.com/explore/tags/cooking/
profilehttps://www.instagram.com/natgeo/
TikTokvideohttps://www.tiktok.com/@scout2015/video/6718335390845095173
posthttps://www.tiktok.com/@nasa/photo/7310000000000000000
hashtaghttps://www.tiktok.com/tag/cooking
profilehttps://www.tiktok.com/@scout2015
YouTubevideohttps://www.youtube.com/watch?v=dQw4w9WgXcQ
videohttps://www.youtube.com/shorts/dQw4w9WgXcQ
videohttps://youtu.be/dQw4w9WgXcQ
playlisthttps://www.youtube.com/playlist?list=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI
hashtaghttps://www.youtube.com/hashtag/cooking
profilehttps://www.youtube.com/@RickAstleyYT

The response says what your input resolved to in meta.input: the kind of item, its ID on the platform and its canonical URL. A short link shows the item it pointed to, so you can check you fetched what you meant.

Shared parameters

Parameters that mean the same thing on every endpoint have one name, one format and one validation. An endpoint offers the ones that apply to it (its page lists them), and never under another name: the last column lists names other APIs use that are answered with a suggestion instead.

ParameterTypeValuesMeaningNot
langstring
bcp47
—Preferred language: a BCP-47 tag such as en or pt-BR (case-insensitive; _ is read as -).hl, lang_code, language, language_code, locale
countrystring
iso3166-1-alpha-2
—Region: an ISO 3166-1 alpha-2 country code such as US or BR (case-insensitive).country_code, geo, gl, market, region
sortstringrelevance, newest, oldest, popular
each endpoint offers a subset
Order of the results.order, order_by, orderby, sort_by, sortby
sincestring
date-time
—Only items at or after this time: RFC 3339 (2026-10-01T12:00:00Z) or a date (2026-10-01, midnight UTC). On newest-first lists, paging stops when it is reached, so later pages are not fetched or charged.
Only on lists ordered by time.
after, date_from, from, from_date, min_date, start, start_date, start_time
untilstring
date-time
—Only items before this time (exclusive): RFC 3339 or a date (midnight UTC).
Only on lists ordered by time.
before, date_to, end, end_date, end_time, max_date, to, to_date

Every endpoint also accepts the common parameters (max_age, fields; see Credits and caching), and list endpoints limit and cursor (see Pagination).

Unknown parameters are rejected

A parameter the endpoint does not accept fails with invalid_input, free, before anything is fetched. A typo can't silently change nothing, and junk parameters can't make a request look new to the cache. The error names the parameter in error.param, the one you most likely meant in details.suggestion (username is answered with handle, lnag with lang), and every accepted parameter in details.accepted_params.

Selecting fields

fields returns only the fields you name, to cut payloads and tokens: comma-separated paths in the notation of the resource's schema (id,text, metrics.view_count, segments[].text; a parent path such as metrics keeps the whole object). It applies to the item, or to each item of a list page; page and meta always come back whole. Fields you leave out are absent, so null still only ever means unknown. An unknown path fails with invalid_input and lists every valid path in details.fields.

Selection happens after the cache: it changes neither the price nor whether a request is a cache hit, and requests that differ only in fields share one cached result.

Freshness

Responses are fetched fresh unless you opt into the cache with max_age (see Credits and caching). The standard cache-control: max-age=N request header works too; when you send both, max_age wins. Values above the longest a result is kept are reduced to it.

Request IDs and tracing

Every response carries our x-request-id; quote it when you contact support. You can also send your own ID for the request in x-client-request-id (1 to 128 printable ASCII characters): it is echoed back in the same header and in meta.client_request_id, and logged with ours, so a request whose response never reached you can still be found. A malformed one fails with invalid_input before anything runs. A W3C traceparent is accepted too: its trace ID is recorded with the request so your trace can be matched to ours (SocialTap starts its own trace; a malformed traceparent is ignored).

Rate limit headers

Plans don't limit request rate, but every account has a high runaway-protection ceiling (see Rate limits). Every response states it in the standard IETF fields: ratelimit-policy is the ceiling in requests per second ("account";q=1000;w=1), and ratelimit what is left of it ("account";r=997;t=1: remaining requests, and seconds until the full ceiling is available again). Above it, requests fail with rate_limited and a retry-after.

Warnings

meta.warnings lists things to act on that did not fail the request, such as an endpoint that will be retired. It is always present, and empty when there is nothing to say. Each warning has a code, a message and a doc_url:

WarningMeaning
deprecated_endpointThe endpoint is deprecated: it stops answering on its sunset date, after which it returns endpoint_retired. The message names the date and the replacement.