Esports odds feed.
Every listed book, one normalized stream.
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.
| Endpoint | Purpose | Key filters |
|---|---|---|
| GET /v7/{sport}/lines | Team mainlines per book | market, book, include= |
| GET /v7/{sport}/props | DFS player props | stat_type, book |
| GET /v7/{sport}/parlays | Priced parlay legs | book, legs |
| WS /v7/live/ws | Real-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.
| Field | Example | Used for |
|---|---|---|
| kr_match_id | kr_cs2_… | Joins odds to the fixture |
| books[] | per-book price + age_s | Every venue that posted |
| best_price | book + decimal | Top of board per outcome |
{
"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.
| Source | Schema | Best use |
|---|---|---|
| Scraping one book | Book-local ids, breaks on redesigns | Fragile |
| Odds aggregators | Traditional sports first | Thin esports |
| KashRock feed | Esports-native, canonical KR ids | Products |
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.