Esports betting signals.
Mispricing, steam, and arb — one feed.

Signals are the alert layer on top of the board. Filter by kind (mispricing, steam, arb, or all), match, and min_edge. Each row carries the market, edge, and detail block so an agent can act without a second scrape.

Why this surface exists

A desk does not poll every book looking for steam by eye. Signals emit when the board crosses a threshold, with KashRock IDs already on the row.

What the record represents

Each signal has kind, sport, kr_match_id, market, edge_pct, detail, and detected_at. detail shape depends on kind.

Core endpoints

GET /v7/{sport}/signals or MCP v7_signals. Use kind= and min_edge= to filter.

EndpointPurposeKey filters
GET /v7/{sport}/signalsSignal alerts (Pro+)kind, match, market, min_edge
GET /v7/{sport}/flowUnderlying steam/shift/volume playskind=steam|shift|…
GET /v7/{sport}/arbDedicated arb board with stake splitQuant+
MCP v7_signalsSame feed from Cursor or Claudesport, kind

Canonical IDs

  • —kr_match_id — fixture the signal belongs to
  • —detail.play_id — flow play when kind=steam
  • —market — registry market key

Sample payload

Live CS2 steam: Los Ninos map_winner on GG.bet shortening about 35%, edge_pct 3.0, detected just now.

FieldExampleUsed for
kindsteammispricing | steam | arb
edge_pct3.0Signal strength floor
kr_match_idkr_cs2_…Match join
detail.bookggbetBook that moved
detail.directionshorteningHow the price moved
detected_atISO timeWhen the signal fired
GET /v7/cs2/signals?kind=steam
{
  "available": true,
  "sport": "cs2",
  "kind": "steam",
  "total": 13,
  "signals": [
    {
      "kind": "steam",
      "kr_match_id": "kr_cs2_alka-vs-los-ninos-23-10-2026",
      "market": "map_winner",
      "edge_pct": 3,
      "detail": {
        "side": "Los Ninos",
        "book": "ggbet",
        "direction": "shortening",
        "shift_pct": 0.3504
      },
      "detected_at": "2026-10-23T23:15:54.185611+00:00"
    }
  ]
}

Comparing sources

Signals read the same lines and flow workers that power /lines, /flow, and /arb.

SourceSchemaBest use
Manual Discord tipsUnstructuredChat noise
Single-book watchersOne venueNarrow alerts
KashRock signalsNormalized kinds + IDsAgent and webhook ready

How to use it

A signal is an alert, not a settled bet. Grade outcomes with /results; measure CLV with /clv.

Operational practices

  • —Set min_edge so low-noise alerts stay out.
  • —Webhook delivery is on Quant — pair with /webhooks.
  • —Pro unlocks signals; free Sandbox teaches IDs first.

Quick reference

GET /v7/cs2/signals?kind=steam returns steam alerts with edge_pct and detail. Get your free key.

If you need a normalized feed instead of another UI wrapper, the esports api exposes live boards, schedules, and history on one schema — with the IDs and outcome patterns that keep backtests and grading honest. Start free on Sandbox, or see published pricing.

Frequently asked questions

What kinds of signals exist?

mispricing, steam, arb, or all. Steam rows often carry a flow play_id and shift_pct in detail.

Which plan unlocks signals?

Pro and above. Sandbox is free for CS2 schema checks; upgrade when you need the alert feed.