Skip to main content
Every message the server sends is a JSON object with a type field. Confirmed-event payloads are shown here. Pending-transaction payloads are on the Mempool page. Every event frame carries a confirmed boolean on the envelope — true for on-chain confirmed events, false for pending (mempool) transactions — and both use the bare channel name.

Event frame

{
  "type": "event",
  "id": "s1",
  "channel": "trading",
  "confirmed": true,
  "data": {
    "type": "order_filled_v2",
    "orderHash": "0x…",
    "maker": "0x…",
    "taker": "0x…",
    "side": 0,
    "tokenId": "0x…",
    "makerAmountFilled": "0x…",
    "takerAmountFilled": "0x…",
    "fee": "0x…",
    "builder": "0x…",
    "metadata": "0x…"
  }
}
  • id — the subscription id you gave.
  • channel — the channel that matched (the bare name, the same for confirmed and pending).
  • confirmedtrue for on-chain confirmed events, false for pending transactions. Route pending vs confirmed by this flag and your subscription id.
  • data.type — tells you which event it is (snake_case). The other keys are the event’s fields, decoded straight from the on-chain event.
The example above is one trading event. data.type and the field set change per event. Each channel page lists every event it carries with its own payload example and full field table — see the Payloads section on trading, fees, oracle, resolution, lifecycle, positions, combos, transfers, and accounts. The clob.* channels are the exception: their data has no type field, because each clob channel has one fixed payload shape.

Control frames

These confirm the messages you send:
{ "type": "subscribed", "id": "s1", "channel": "trading" }
{ "type": "unsubscribed", "id": "s1" }
{ "type": "pong" }

Error frames

Errors carry a fixed code and a message you can read.
codeWhenConnection
invalid_messageThe message was not valid JSON.Stays open
unknown_channelUnknown channel name, or a required filter is missing or wrong.Stays open
subscription_limitThe subscribe would go over your plan’s subscriptions per connection.Stays open
laggedThe client fell behind the live stream, so some events were dropped.Stays open
key_revokedThe API key was revoked or is no longer valid.Closes
revalidation_failedRadion could not re-check the API key after several tries.Closes
A lagged error also tells you how many events were skipped:
{
  "type": "error",
  "code": "lagged",
  "skipped": 42,
  "message": "Receiver fell behind; 42 events dropped. Reconnect to resume."
}
See Limitations → Backpressure for why lag happens and how to handle it.
Last modified on July 5, 2026