Authentication
None required today.Quick start
- Snapshot —
GET /v1/prices(orGET /v1/prices/{pair}) for an initial board. - Stream — connect to
WS /v1/prices/streamfor live ticks — see the Price Stream section. - Candles —
POST /v1/ohlcfor historical OHLC. - Sessions —
GET /v1/market-hoursfor calendars (cache it; use tick flags for “open right now”). The pair list is under Markets. - Depth —
GET /v1/depth/{pair}/quotefor the price a given size actually gets. - Status —
GET /v1/statusto check the price feed is live before relying on quotes.
@ostium/builder-sdk, or generate one from this document with any OpenAPI 3.1 client generator.
Rate limits
Applied per IP. Most limits are per route; where a group of endpoints shares one budget the endpoint’s own description says so. Every rate-limited response carriesx-ratelimit-limit, x-ratelimit-remaining, and x-ratelimit-reset; 429s add retry-after. Read the headers — do not hard-code the documented figures.
Errors
Two envelopes:- Framework —
{ "error": "<Status Name>", "message": "..." }(optionalissues/details). - Upstream proxy —
{ "error": "<human message>" }from OHLC failures.
error means different things across the two shapes — do not switch on it alone until a future major version unifies them.
Every response carries x-request-id. Quote it when reporting a problem.
Hosts
Each chain is served by exactly one host, because an environment’s oracle publishers are only registered against its own chain’s verifier. Sending a chain to the other host is refused with a 400 naming the one that works.- Production (Arbitrum One,
chainId42161):https://builder.prod.bedrock.ostium.io - Staging (Arbitrum Sepolia,
chainId421614):https://builder.stage.bedrock.ostium.io
/v1/pairs, /v1/trades, /v1/prices, depth — have no publisher
dependency and serve both chains from either host. Only /v1/orders is pinned.