Esports odds feed.
Every listed book, one normalized stream.

One feed for esports odds: sportsbook mainlines, DFS pick'em props, and prediction-market prices normalized to one schema and one set of canonical ids, so a single parser covers the whole board.

Why this surface exists

An odds feed is only as good as its joins. If a book's fixture id never resolves to yours, arbitrage, CLV, and grading all fall apart downstream.

What the record represents

Line rows lead with kr_match_id, market, and per-book outcome prices with age in seconds, plus a best_price summary per outcome.

Core endpoints

GET /v7/{sport}/lines for team markets, /props for DFS boards, /parlays for legs, WS /v7/live/ws for push.

EndpointPurposeKey filters
GET /v7/{sport}/linesTeam mainlines per bookmarket, book, include=
GET /v7/{sport}/propsDFS player propsstat_type, book
GET /v7/{sport}/parlaysPriced parlay legsbook, legs
WS /v7/live/wsReal-time push (Builder+)subscribe by sport

Canonical IDs

  • : kr_match_id
  • : kr_tm_*
  • : propId
  • : market_key

Sample payload

A CS2 match_winner line with two books, per-book age, and the best price.

FieldExampleUsed for
kr_match_idkr_cs2_…Joins odds to the fixture
books[]per-book price + age_sEvery venue that posted
best_pricebook + decimalTop of board per outcome
GET /v7/cs2/lines?market=match_winner
{
  "available": true,
  "sport": "cs2",
  "market": "match_winner",
  "match": {
    "kr_match_id": "kr_cs2_vitality-vs-mouz-04-11-2026",
    "team1": "Vitality",
    "team2": "MOUZ",
    "status": "live"
  },
  "books": [
    {
      "book": "pinnacle",
      "outcome": "team1",
      "decimal": 1.72,
      "age_s": 9
    },
    {
      "book": "thunderpick",
      "outcome": "team1",
      "decimal": 1.75,
      "age_s": 4
    }
  ],
  "best_price": {
    "book": "thunderpick",
    "decimal": 1.75
  }
}

Comparing sources

Line workers across sportsbooks, DFS venues, and prediction markets, normalized to KR ids.

SourceSchemaBest use
Scraping one bookBook-local ids, breaks on redesignsFragile
Odds aggregatorsTraditional sports firstThin esports
KashRock feedEsports-native, canonical KR idsProducts

How to use it

Settled lines land on /results with hit, miss, or push so CLV is computable per book.

Operational practices

  • : Read books[].age_s, never guess freshness
  • : Join on kr_match_id
  • : Sandbox covers CS2 eval

Quick reference

GET /v7/cs2/lines?market=match_winner returns per-book prices on canonical match ids. 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

Which books are on the feed?

Sportsbooks, DFS pick'em apps, and prediction markets, all normalized to the same row shape. The books object on every response says which venues posted, with row counts and age in seconds.

Is there a free way to try the feed?

Yes. Sandbox is $0 with an instant key: 1,500 credits per UTC day for CS2 props and match discovery, no card. Every title and book starts at Hobby ($29.99/mo).

How fresh is the feed?

Each book row carries age in seconds. Consensus lines start at Hobby, real-time boards and WebSocket push are on Builder and Pro, and GET /v7/meta reports measured latency per live game.