Channel Name
Channel:lifecycle (Global channel for all markets)
Subscription
Event Types
Event Liveness: EVENT_GOLIVE and EVENT_UNLIVE
EVENT_GOLIVE and EVENT_UNLIVE are the two edges of a single boolean: whether the event’s status is OPEN_INGAME. They are event-level, so you receive one tick per open market in the event — the market payload tells you which markets are affected, and every tick in the burst carries the same eventId.
Why this matters: fees follow liveness. Taker fees are charged only on fills matched while the event is live (OPEN_INGAME). Non-live fills are not charged, and makers are never charged a fee — they may instead earn a Maker Credit. Liveness is resolved at match time from the same event status these ticks announce, so the lifecycle channel is your fee-relevant signal for whether a fill you are about to take will be charged. See Trading Fees for the fee formula itself.
On
EVENT_GOLIVE, the drain is announced before it is itemized: the EVENT_GOLIVE tick(s) arrive first, followed by an individual CANCEL tick per drained order on the tape and market channels, and on your private channel for your own orders. Markets are not closed by going live — you can immediately re-quote at live prices.
Derive liveness from the tick’s
type, not from market.event.status. The event join is a snapshot taken when the market entered the book — it may be absent from tick payloads entirely, and when present its status is not guaranteed to reflect the transition the tick is announcing. For an authoritative status snapshot, use the REST endpoints below.If an event has no open markets left (for example every market has already settled), the terminal EVENT_UNLIVE has no market to name and no tick is sent.Reading Event Status over REST
The WebSocket gives you the transitions; REST gives you the snapshot. Use REST to bootstrap liveness on connect and after any reconnect (you cannot see edges that fired while you were disconnected), then let the lifecycle channel carry you forward. One event by id — readstatus directly:
status == "OPEN_INGAME" is exactly the condition under which taker fees are charged. Any other value — OPEN_PREGAME, CLOSED_PREGAME, DELAYED, FINAL, CANCELED — is non-live and uncharged.
Every live event — filter server-side, and use it as your startup snapshot:
Message Format
Lifecycle ticks arrive as bare payloads — there is no{ "event": ..., "data": ... } envelope on this channel (the envelope is only used for subscription acks, errors, and private events):
Market Object
Themarket object in lifecycle events contains: