Authorization header of every request.
GET /exports/{id}/download, which takes no Authorization header: the signed link is the credential. Anyone holding a download link can read the data until the link expires, so treat it like the export it opens.
Tokens
A token belongs to one shop and reaches that shop only. If you manage several stores, hold one token per store. Create and revoke tokens in the ABConvert admin, under Settings → MCP & API Access.Scopes
GET requests need read_experiments, and so do POST /v1/experiments/{id}/results and POST /v1/experiments/{id}/exports, which read data and change nothing about the test. Every other request needs write_experiments. Scope and rate-limit budget are separate questions: see Rate limits.
Write includes read, so a write token needs no separate read scope. New tokens default to read. Grant write only to integrations that manage tests.
Authentication errors
An expired token reads the same as one that never existed, so a sudden
invalid_token on an OAuth connector token usually means “refresh, then retry.” Uninstalling the app also invalidates the shop’s tokens; reinstall to restore access.
Each one returns the API’s standard error shape:
insufficient_scope adds a details object naming the token’s scope and the required one:
permission_error type but carry different codes. See Feature availability.