Need the full moment-by-moment map — every event name on every channel, side by side, plus the field names that mean the same thing across them? See the event catalog.
All four authenticate with the same API key.
One trade, three phases
- Pricing is SSE. Every quote request gets its own stream at
GET /v1/quote-requests/{id}/stream; a cashout request gets one atGET /v1/cashout-requests/{id}/stream. The stream exists only while the request is live and closes after a terminal event. Market makers watch the firehose variant,GET /v1/mm/quote-requests/stream. - From commit onward, it’s events. The moment you commit, the quote request becomes an RFQ and the SSE stream ends. Everything after — acceptance, confirmation, on-chain execution, settlement — arrives on the WebSocket and as webhooks.
- State is always readable. The read endpoints return current truth whenever you ask — they’re how you backfill after downtime and reconcile what the push channels told you.
WebSocket or webhooks?
Both deliver post-trade lifecycle events, and for most of the lifecycle they overlap. They differ in the delivery guarantee — and in one case, in coverage:- WebSocket pushes to a connected client in real time. If you disconnect, missed events are not redelivered — on reconnect, reconcile with the read endpoints. Choose it for live UIs and trading bots where latency matters.
- Webhooks POST to your server with at-least-once delivery: HMAC-signed, retried with backoff, dead-lettered, and replayable. Choose them for accounting, notifications, and any system of record.
Typical integrations
Trading bot
- Create a quote request —
POST /v1/quote-requests. - Watch its SSE stream for
best_quoteevents; storebook_seqand the quoteid. - Commit when the price is right.
- Follow the trade live on the WebSocket
rfq:{rfq_id}channel, or durably via theparlay.status_changedwebhook. - Record the outcome from the
position.settledwebhook, or read it fromGET /v1/rfqs/{id}.
Read-only dashboard
- Pull state with
GET /v1/portfolio,GET /v1/rfqs, andGET /v1/pnl. - Subscribe to
rfq:{rfq_id}on the WebSocket for live position updates. - On reconnect, reconcile against the read endpoints.
Market maker
- Stream quote requests and cashout requests from
GET /v1/mm/quote-requests/stream. - Submit quotes as requests arrive.
- Listen on the WebSocket
mm:quotes:{mm_id}channel forquote:accepted, then confirm before the deadline. - Keep the durable record with an MM webhook endpoint (
?owner_kind=mm).

