board() returns onchain. When a maker signs a new board, the feed sends it right away, before it lands onchain, so you can price the next block’s book without reading the venue.
Send your API key in the
x-api-key header, on the WebSocket connection request and on REST. Ask us for a key.
How it works
- On every new block you get a message with every maker’s boards at that block.
- When a maker signs a new board, you get a message at once, with the new board marked
committed: false. - Every message is a full snapshot of the venue. There is nothing to merge, and a missed message is repaired by the next one.
Stream
Connect, then subscribe to a chain:
Errors arrive as
{"type":"error","code":"...","message":"..."}, with code one of RATE_LIMITED, INVALID_JSON, INVALID_MESSAGE or UNSUPPORTED_CHAIN. The server pings every 15 seconds and closes connections that miss a pong. Ignore message types you do not know; new ones may be added.
Snapshot over REST
GET /v1/venue/boards?chainId=8453 returns the latest message, the same JSON the stream sends, or 503 with Retry-After while the feed starts. The feed runs while someone reads it: after 30 seconds without a subscriber or a request it stops, and the next request starts it within about 5 seconds. Poll every few seconds, or hold a stream subscription, to keep it running.
Message
An example, with one of the boards on Base at block 52847598:2385958388 is 2,385.958388 USDC per WETH. remaining is below the board’s depth because the maker’s per-block cap is smaller.
Each entry of
boards:
Integers are decimal strings. A dark board (maker paused, expired, or its inventory contract no longer names the maker) has no levels and
remaining 0. A direction a maker has never quoted is not listed.
Price a swap
One board, sweeping fromfilled, exactly as the venue does:
makers order, and stop each maker at its remaining. Drop an allocation whose output rounds to zero. Then take the protocol fee off the total. quote() onchain runs the same steps, so you can check your implementation against it at blockNumber.
Committed or pending
A pending board lands onchain shortly after the maker signs it. On Base, 299 sampled commits from 20 October 2026 all landed within 3 seconds of signing (median 2.1 seconds), so one to two blocks.
If a commit fails, the pending board disappears from the next message and the committed board stays. A board without a pending entry has nothing waiting.
Time
Committed prices are fortimestamp and pending prices for nextTimestamp. Prices move between blocks without a new board:
- an
offsetsboard’s price falls as its anchor ages; - a board with widening falls with the square root of its age;
- a board with a premium is priced lower for a few blocks after each commit, then rises when the premium ends.
builtAtMs is more than a few seconds old as stale. To execute, call the venue as in Integration; the feed only replaces the reads.