

All four authenticate with the same API key.
One trade, three phases
Pricing is SSE. Each quote request has its own stream atGET /v1/quote-requests/{id}/stream. Each cashout request
has one at GET /v1/cashout-requests/{id}/stream. A
stream exists only while its 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 is events. When you commit, the quote request becomes an
RFQ and the SSE stream ends. Acceptance, confirmation, on-chain
execution, and settlement arrive on the WebSocket and as
webhooks.
State is always readable. The read endpoints return current truth
whenever you ask. Use them to backfill after downtime and to reconcile what the push channels told
you.
WebSocket or webhooks
Both deliver post-trade lifecycle events and overlap for most of the lifecycle. They differ in the delivery guarantee.Typical integrations
Trading bot
- Create a quote request with
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}for live position updates. - On reconnect, reconcile against the read endpoints.

