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.
| Channel | What it carries | Use it for |
|---|---|---|
| SSE streams | Pretrade pricing — live best_quote updates on a quote request or cashout request | Watching prices while you decide whether to commit |
| WebSocket | Posttrade events, live — quote acceptance, confirmation, position created/settled | Live UIs and bots that hold a connection |
| Webhooks | Posttrade events, durable — most of the same lifecycle moments as HMAC signed POSTs with retries and replay, plus one moment WebSocket doesn’t carry at all (early cashout buyback — see the event catalog) | Server systems of record that must never miss an event |
| REST reads | State on demand — portfolio, parlays, settlement detail, P&L, balances | Backfill, reconciliation, on demand display |
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 posttrade 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; heartbeat every 30 seconds. - 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).
