Skip to main content
Two parameters scope almost every request: channel — where selling happens — and market — which storefront of that channel you mean.

Channels

A channel is a commerce surface. tiktok_shop is the first; more follow the same model. channel is optional. Omit it and the query spans every channel your workspace has enabled. Every returned object names its own channel, so results stay distinguishable:
A query only spans channels that are enabled for your workspace. Turning on a new channel is a deliberate change in the dashboard — enabling one never silently widens queries already running in production.

Channels and sources

A channel is the surface you are asking about. Behind it sits a cascade of sources — the providers Unif queries in cost order until one returns a verified result. See the waterfall. The roster is published, not hidden. The first TikTok Shop source is Kalodata.
[PLACEHOLDER — full source roster] The complete per-channel list belongs here once it is settled.
What the API does not tell you is which source answered a given row. That is not secrecy — it is a stability guarantee. Source order, membership and per-field strength are re-tuned over time, and if your code branched on them, every re-tune would be a breaking change you did not ask for.

Published

Which sources are in the roster for a channel, and what the cascade achieves — reported per field by GET /coverage.

Not in the response

Which step answered this particular row. Build against coverage and meta.refreshed_at, which are stable, rather than source identity, which is not.
If a number needs provenance for a compliance or audit workflow, cite meta.refreshed_at on the record together with typical_lag_hours from GET /coverage. Those describe the data you were actually given, which is what an auditor is asking about.

Markets

A market is an ISO 3166-1 alpha-2 code identifying a channel’s storefront in one country. At preview, TikTok Shop covers 16: US · GB · IE · ES · FR · DE · IT · ID · TH · VN · MY · PH · SG · JP · BR · MX Markets matter more than they look. Each has its own catalogue, its own creator population, its own native currency and its own time zone for day boundaries — so the “same” shop in US and GB is two entities with two IDs.

Read entitlements, do not hard-code them

Markets get added. GET /v1/channels is the source of truth:
Three fields on each market are worth wiring into your own validation:
  • granularities — the period buckets the market supports natively. ID above has no daily bucket, so daily requests come back with period.adjusted: true. See Periods and currency.
  • earliest_period — the oldest date with data. Requests before it return an empty series, not an error.
  • timezone — the local zone that defines day boundaries for this market.
Requesting a market your workspace is not entitled to returns coverage_error, not an empty result. That distinction is deliberate: an empty list is a finding, an entitlement problem is a bug.