Skip to main content
The quote-request stream is channel 1 of the Convallax maker transport: a Server-Sent Events (SSE) feed that pushes live quote_request events to you as traders open them. It replaces the old WebSocket quote_request broadcast.
To fully participate you must hold both this SSE stream open (to receive requests) and the post-trade WebSocket (to learn when you win). Quotes and confirmation signatures are submitted over REST.

Connecting

This is a standard SSE endpoint (Content-Type: text/event-stream). In a browser, you can use the native EventSource API only if you authenticate via ?apiKey= on the URL (browsers cannot set X-API-Key on SSE). Market-maker bots run in Node.js and should use the eventsource npm package, which supports custom headers:

Authentication

Authenticate with your per-MM API key using the X-API-Key header:
Or, if your SSE client cannot set custom headers, pass the key as a query parameter:
The SSE quote-request stream and the REST quote endpoints authenticate via the X-API-Key header (or ?apiKey=). The post-trade WebSocket still uses ?apiKey= on the URL or an auth message. See Authentication.

Connection Handshake

When you connect, the server emits events in a fixed order.
1

connected

The first event confirms your resolved makerId and the server time.
2

Replay or snapshot

The server then sends either a replay (if you reconnected with a Last-Event-ID header that is still in the buffer) or a fresh snapshot of all currently open requests:
Between snapshot_begin and snapshot_complete you receive zero or more quote_request events, each carrying an SSE id:.
3

Live events

After the snapshot completes, new quote_request and quote_request_expired events stream in as they happen.

Events

connected

Sent once, immediately on connect.

snapshot_begin / snapshot_complete

Frame the initial set of open quote requests. Everything between them reflects the state at connect time.

quote_request — New or replayed quote request

A live quote request. Each event carries a monotonic integer SSE id: — track the last one you processed so the server can replay on reconnect.

quote_request_expired — Request closed

The request closed (committed, expired, or cancelled). Drop it from local state.

Reconnect & Replay

SSE clients should reconnect automatically on disconnect. The standard EventSource API tracks the last received id: and sends it back as the Last-Event-ID header on reconnect; the server replays any events you missed.
  • If the gap is small enough to be covered by the server buffer, you receive a replay of the missed quote_request / quote_request_expired events.
  • If the gap is too large, the server falls back to a fresh snapshot_beginsnapshot_complete sequence reflecting current open requests.
If you use a non-browser client that does not automatically manage Last-Event-ID, store the last SSE id: you processed and set the Last-Event-ID header yourself when reconnecting.

Keep-Alive

The server sends SSE comment lines (: ping) roughly every 25 seconds to keep the connection and any intermediary proxies alive. SSE clients ignore comment lines automatically.

Example

See the Market Maker guide for the end-to-end flow across all three channels, and the Quote Request Stream API reference for the endpoint details.