These endpoints are an observability layer, not part of the trade path. Nothing here affects pricing, selection, or settlement
— they exist so you can monitor and reconcile your RFQ activity.
Looking for RFQ fills? They’re here, not on Get all my fills. That endpoint
(
GET /nbx/v2/emm/fills/all) covers single contract fills — the contracts you filled by resting or taking on /nbx/v2. RFQs
you quoted and won are a separate surface and are listed only by GET /rfq/executions below.Authentication
Both endpoints use the same OAuth 2.0 Client Credentials token as the rest of the API — see Authentication. Send it as a bearer token:GET /rfq/executions — your executed RFQs
Returns the RFQs you priced and won, most recent first. Use it to reconcile fills and to backfill anything you missed on the live feed.
Query parameters
Both are optional — omit them and you get the 500 most recent executions.
Walk your full history by holding
limit fixed and advancing offset until a page comes back short (fewer than limit items)
or empty:
Pages are ordered by
executed_at descending, with rfq_id descending as a tiebreak, so executions sharing a timestamp can’t
straddle a page boundary or repeat across one.Response
200 OK with a JSON array, ordered by executed_at descending:
A single page is capped at 500 executions, but older history is reachable by paging with
offset. An empty array ([])
means either you’ve paged past the end or you haven’t won any RFQs yet.GET /rfq/executions/feed — live execution tape
A WebSocket broadcast of every successful RFQ execution, platform-wide — not just yours.
Authorization header on the upgrade request. The same LP-with-pricer gate applies before the socket upgrades.
Message shape
One text frame per execution:Connection behavior
1
No replay on connect
You receive only executions that happen after you connect. The feed is live market data, not a replayable log. Connect
first, then act — anything that printed before you connected is gone from the socket (use the REST listing to catch up).
2
Heartbeat every 15s
The server sends a WebSocket Ping every 15 seconds to keep the connection alive through the load balancer’s 30-second
idle timeout. Standard WebSocket clients auto-respond with a Pong; you don’t need to send anything.
3
Detect gaps with offset
offset increases by one per print. If it jumps (e.g. 41 → 44 after a lag or disconnect), you missed prints. Backfill
the gap from GET /rfq/executions — page from the newest execution until you reach rfq_ids you already hold, rather
than passing this sequence number as the listing’s offset parameter — then resume consuming the live feed.Implement reconnection with exponential backoff. On every (re)connect, compare the first
offset you see against the last one
you processed and backfill via REST if there’s a gap.How the two fit together
The typical pattern: hold the WebSocket open for live prints, and periodically (or after any
offset gap) call the REST listing to confirm you’ve recorded every RFQ you won.