Today the API is read-only: market data is public, and an API key lets you check your key with
GET /account. Placing and cancelling orders through the API is coming soon.Base URLs
Your first request
Market data needs no key. List the markets open right now:Conventions
These hold everywhere in the API, REST and websocket alike.- Prices are dollar strings on a 1¢ grid:
"0.01"to"0.99", always two decimals. A contract pays $1, so a price is also the implied chance. - Counts are contract strings:
"20", never a number. Whole contracts only. - Underlying prices (the price to beat, the settlement price) are decimal strings:
"120.7". - Times are epoch milliseconds, UTC, as numbers:
1791304200000. - Tickers are opaque. A market ticker such as
sol-15m-261006-1630-1645happens to contain its window’s times, but never parse it — readopen_ts_msandclose_ts_ms. - Responses wrap the resource in a named key (
{ "market": … },{ "trades": [ … ], "cursor": … }), so fields can be added later without breaking your parser. Ignore fields you don’t recognise. - Errors are
{ "code": "MARKET_NOT_FOUND", "message": "…" }with a stablecodeto switch on. See Errors.
Machine-readable specs
Every endpoint and message is generated from the same schemas the server checks its own responses against, so the specs cannot drift from what the server sends.- OpenAPI 3.1 (REST):
openapi.json - AsyncAPI 3.0 (websocket):
asyncapi.json - For AI agents:
llms.txt, and every page is available as Markdown by adding.mdto its URL.
Next steps
Markets and windows
Series, windows, statuses, the price to beat and settlement.
Websocket
Live books, tickers, trades and prices on one connection.
Authentication
API keys: test and live, permissions, limits.
Endpoints
Every REST endpoint, with a live “Try it” box.