/api/v1/* endpoint shares one base URL, one authentication header, one response envelope, one set of rate limits, and one timeout. An endpoint page states only what differs on that endpoint.
Base URL
https://0xinsider.com/sandbox/api/v1/. It needs no key and serves no production data.
Authentication
Six routes need no credential:
GET /api/v1, /openapi.json, /coverage (and its deprecated alias /platforms), /health, /pick-of-the-day/ledger, and POST /agents/register. A key sent to one of them is ignored rather than refused. Authentication covers the rest.
The envelope
Every single object comes back in the same shape:
An error uses the same envelope with
"object": "error". Errors lists all 11 codes and 24 reasons.
Prefixed IDs
POST /markets/flow/batch (and its deprecated alias POST /markets/intel/batch) takes raw condition_id values only.
Query parameters
By default a query parameter the endpoint does not publish is ignored, and the request runs with the names that are left. A200 or a 304 then reports what happened in two headers.
Send
X-Query-Validation: strict to turn a misspelled parameter into an error instead. An unrecognized name then answers 400 bad_request with error.reason unknown_query_parameter before the handler runs, and error.param names it. Send the header while you are building, so a filter that silently did nothing shows up as an error rather than as a wrong result.
Rate limits
Every authenticated response carries
RateLimit-*, X-RateLimit-*, X-Monthly-Quota-*, and X-Request-Id. X-Request-Id is on every /api/v1 response, authenticated or not, and it equals meta.request_id in the body.
Retry-After comes on 4 errors: every 429, every 503, a 404 with pick_not_released, and a 408 on a GET or HEAD. A timed-out mutation carries none. Rate limits has the full header list and the retry code.
Timeout
The server gives a request 30 seconds. Past that you get408 Request Timeout in the standard envelope, with error.code set to request_timeout.
A GET or HEAD carries Retry-After. A mutation does not, because it may have completed on the server: check its state before you repeat it.
Browser CORS
Any origin may call/api/v1/* with the Authorization header. Do not send cookies or credentials: "include". The preflight is cached for 24 hours.
Remote MCP at
/api/v1/mcp is also non-credentialed, and it checks the Origin header against the 0xinsider and localhost allowlist.
Trust metadata
expand=trust on the trader, batch trader, and market snapshot routes attaches 4 objects to each value Polymarket owns: source, freshness, reconciliation, and completeness. Read them before an automated action depends on a number.
Never turn an unavailable value into 0, [], or {}. The API does not substitute a default for a value Polymarket did not return, and neither should you. Trust metadata has the vocabulary.
What the reference does not cover
- The internal
/api/*routes behind 0xinsider.com. They use a session cookie and change without notice. - The order book. A market snapshot’s top of book is all the depth you get.
- Any exchange other than Polymarket. Every row comes from Polymarket.