Skip to main content
The maker WebSocket is the post-trade channel (channel 3 of the three-channel transport). It is a server → maker push connection that delivers win/loss notifications once a taker commits. It no longer carries quote requests or quote submissions — those moved to the SSE quote-request stream (in) and REST quote endpoints (out).

Endpoint

Authentication

Each market maker authenticates with a per-MM API key generated from the dashboard. The key maps to a stable makerId. Authenticate either way:
  • Query parameter: wss://api.convallax.com/maker/v1/ws?apiKey=<your-key>
  • auth message: send { "type": "auth", "apiKey": "<your-key>" } immediately after the socket opens.
On successful authentication, the server sends a confirmation that echoes your resolved makerId:
If the API key is missing or invalid (when the relay is configured with keys), the connection is closed with code 4001. If the relay is started without any keys, it runs in OPEN dev mode (anonymous makerId, accepts anyone). See the Authentication guide.
The post-trade WebSocket authenticates via ?apiKey= or the auth message. The SSE quote-request stream and REST quote endpoints authenticate via the X-API-Key header.

Keep-Alive

The server sends a WebSocket ping every ~25 seconds; respond with a pong to maintain the connection (most libraries do this automatically). You may also send an application-level { "type": "ping" }, to which the relay replies { "type": "pong", "timestamp": "..." }.

Server → Maker Messages

connected — Authentication confirmation

string
Always "connected".
number
Current protocol version. Currently 3.
string
Your resolved maker identifier.
boolean
true once your API key is accepted.
string
ISO 8601 server time at connection.

quote:accepted — You won; sign and confirm

Sent only to the winning maker when a taker commits. Sign the order with the wallet key for order.maker (using the provided domain and types) and POST the signature to POST /v1/mm/quotes/:quoteId/confirm before confirmationDeadline. The backend verifies that your signature recovers to order.maker.
string
Always "quote:accepted".
string
The server-generated quoteId of your winning quote. Use it in the confirm endpoint path.
string
The quote request you won.
object
The EIP-712 Order struct to sign: maker, seriesId, optionAmount, premiumAmount, makerSelling, taker, validUntil, nonce.
object
EIP-712 domain: name "ConvallaxRFQSettlement", version "1", chainId 80002, verifyingContract.
object
EIP-712 type definitions for Order.
string
ISO 8601 deadline to POST your signature (controlled by MAKER_CONFIRMATION_MS). Miss it and the backend falls back to the next-best maker.

quote:confirmed — Your quote won and was confirmed

Sent after your confirmation signature is verified.
string
Always "quote:confirmed".
string
The quote request.
string
Your confirmed quote’s server-generated identifier.

quote:rejected — Another maker won

Sent when another maker’s quote won, or the request closed without your quote winning. Drop it from local state.
string
Always "quote:rejected".
string
The quote request.
string
Your rejected quote’s server-generated identifier.
string
Reason for rejection, e.g. "another_quote_won".

pong — Heartbeat reply

Sent in reply to a { "type": "ping" } message.

Maker → Server Messages

auth — Authenticate

Optional if you already passed ?apiKey= on the connection URL. Send immediately after the socket opens.
string
required
Must be "auth".
string
required
Your per-MM API key.

ping — Application keep-alive

The relay replies with a pong message.

Protocol Version

The current protocol version is 3. Quote requests arrive over the SSE quote-request stream; quotes and confirmation signatures are submitted over REST. This WebSocket is post-trade only.

Example: Listening for Wins