Alerts when our arb engine finds or updates a cross-platform opportunity for a subscribed match group, and when an opportunity expires.
Overview
Use case: Drive arb terminals and notifications tied to match groups you care about.
Requirements
- Pro or Enterprise API key.
- Subscribe with group_ids only (match group ids).
- market_ids are ignored for this channel.
Send
| Field | Type | Required | Notes |
|---|---|---|---|
| action | string | yes | Must be "subscribe" for this section. |
| channel | string | yes | Must be "arb". |
| market_ids | string[] | unsupported | Ignored / not used by this channel. |
| group_ids | number[] | optional | Group scope; expands to markets linked to each group. |
| wildcard | behavior | not available | At least one supported id list should be provided. |
Receive
Data messages use the standard envelope: channel, type, ts, data. Types for this channel include: arb_update, arb_expired.
Data fields (inside data)
| Field | Type | Description |
|---|---|---|
| type | string | arb_update or arb_expired. arb_expired carries only type + group_id. |
| group_id | number | Match group id. |
| group_title | string | Human-readable group title (arb_update only). |
| event_type | string | Event category (arb_update only). |
| event_date | string | Event date (arb_update only). |
| risk_free_return_after_fees | number | Net-of-fees ROI as a percent (e.g. 5.49 = 5.49%). Same value the REST /arb endpoint exposes as roi_pct. |
| lowest_yes / lowest_no | object | Each leg: { price (cents), source, url, market_id, ticker }. |
| yes_leg_depth / no_leg_depth | number | Executable depth for each leg in USD (REST /arb: legs[].liquidity_usd). |
| max_wager_amount | number | Max executable wager in USD (REST /arb: max_wager_usd). |
| yes_fee_usd / no_fee_usd | number | Per-leg entry (taker) fee in USD for ONE contract at the quoted price; not linear in size (REST /arb: legs[].fee_usd). |
| updated_at | number | Unix timestamp of the update. |





