Market Maker
Stream Quote Requests
Subscribe to all active quote requests in real time via Server-Sent Events.
GET
Open a Server-Sent Events (SSE) stream to receive all active quote requests in real time. This is the primary integration path for market makers — use it instead of polling. The stream emits new requests as they arrive, updates when requests change, and notifies when requests expire.
Sent immediately on connection. Confirms your identity.
Sent at the start of the initial snapshot (on new connection or reconnect). All currently active quote requests follow before
Sent when a new quote request is created, and once for each active request replayed during the initial snapshot. This is the primary event you price against.
Sent when a request you have already seen changes to a new
Sent when the initial snapshot is finished. After this, the stream switches to incremental updates only.
Sent when a previously seen quote request is no longer active (expired, committed, or cancelled). Remove it from your local state.
The taker-fee rate is read once per connection (server-side), so
Authentication
API key required. Pass your market maker API key in theX-API-Key header.
SSE Event Types
connected
Sent immediately on connection. Confirms your identity.
snapshot_begin
Sent at the start of the initial snapshot (on new connection or reconnect). All currently active quote requests follow before snapshot_complete.
quote_request
Sent when a new quote request is created, and once for each active request replayed during the initial snapshot. This is the primary event you price against.
quote_request:updated
Sent when a request you have already seen changes to a new version — the user edited the legs or the bet amount. The payload is identical to quote_request (with the incremented version and new request_hash). Any quote you submitted for the prior version is automatically invalidated; re-price and submit a new quote against the new version and request_hash. You do not need to withdraw the prior quote — it never blocks the new submission.
snapshot_complete
Sent when the initial snapshot is finished. After this, the stream switches to incremental updates only.
quote_request_expired
Sent when a previously seen quote request is no longer active (expired, committed, or cancelled). Remove it from your local state.
Reconnection
Every SSE event includes anid: field. Persist this value. On reconnect, pass it as the last_event_id query parameter to replay any events you missed instead of receiving the full snapshot again.
user_stake on a long-lived stream reflects the rate in effect when you connected. If the fee rate changes, reconnect to pick up user_stake values computed at the new rate.
Notes
- Net stake.
user_stakeis the net stake the MM underwrites:user_stake = bet_amount − taker_fee, wheretaker_fee = floor(bet_amount_micro × taker_fee_bps / 10000)is computed in integer microUSDC (1 USDC = 1e6 micro) — e.g. a 25.00 bet at 100 bps gives a 0.25 fee anduser_stake24.75. Pricepayout_oddsand size collateral againstuser_stake, notbet_amount.bet_amountstays the user’s gross wager but is not the quoting base when the taker fee is on (taker_fee_bps > 0); when the fee is off,user_stake == bet_amount. - The stream automatically excludes quote requests created by your own user account.
- Keep the connection alive and send a heartbeat at least every 30 seconds to signal liveness.
- A version change arrives as a
quote_request:updatedevent (a new request arrives asquote_request). When theversionchanges, any quote you submitted for the prior version is automatically invalidated — it leaves the book immediately and never blocks a new quote. Re-price and submit a new quote with the updatedversionandrequest_hash; you do not need to withdraw the old one.
Errors
| Status | Code | Description |
|---|---|---|
| 401 | UNAUTHORIZED | Missing or invalid API key. |
