Endpoints
Catalog, describe and the OpenAPI document never need a key, so you can
read the whole contract before you spend a credit.
Authentication
Send your master key as a bearer token:ak_... key you use for the MCP server works here. A missing or
invalid key returns 401. See Authentication.
Request body rules
- The body must be a JSON object, at most 1 MB. Larger bodies return
413. - Schemas are strict. A field the method does not declare is rejected with
400anderror_type: "validation"— nothing is silently ignored, so a typo or an upstream parameter name never slips through. - Every parameter has a type, and enums are enforced. Defaults are applied on
the server (
limitdefaults to 20 on paged methods). - The exact schema of a method is on its page in the sidebar, in
GET /v2/ops/{method}asinput_schema, and in the OpenAPI document.
Shared parameters
Parameters keep the same name and meaning across methods. Which ones a given method accepts, and the valid values, are on the method’s page.
E-commerce methods add
price_min / price_max, region, currency and
platform filters; finance methods add start / end, period, statement,
interval. These are typed and documented per method.
Reserved parameters
Four parameters exist on every method. They control routing and the shape of the response, not what the method does.object
Override provider selection:
order, only, allow_fallbacks, strategy.
Details in Routing & Pricing.string
Shorthand for
routing.only = [provider] — pin the call to one provider.string[]
Return only these dotted paths of
data, e.g.
["items.id", "items.text", "items.metrics.likes"]. Use it to keep responses
small for an LLM context. raw is not affected.boolean
default:"false"
Attach the upstream provider’s payload as
raw. It is not part of the
contract and may change whenever the provider changes; payloads above 256 KB
are truncated and flagged with raw_truncated: true.Pagination
Methods that return a list (PostPage, ProductPage, UserPage, …) page with
an opaque cursor:
- Call the method without
cursor. The response’sdata.next_cursoris a string when more results exist,nullwhen they don’t. - Call again with the same parameters plus
cursor.
- A cursor is bound to the provider that produced the first page, so later pages come from the same provider and stay consistent. If that provider fails on a later page, the call fails rather than silently switching.
- A cursor is bound to the query. Reusing it with a different
query(or other parameters) returns400.
limit smaller than the provider’s own page size is fine: the server keeps
reading the same upstream page across your calls, so nothing is skipped.
Methods without pagination (single-object lookups) have no cursor and no
next_cursor.
Example
Search X for recent posts, keep three fields and page through the results:next_cursor from the response: