Get a key

Lines

Cross-venue consensus for match/map mainlines across sportsbooks (Bovada, Thunderpick, Cloudbet, BetRivers, Pinnacle, Courtside, Betway, Dexsport, Picklebet, 1xBet, BetOnline, Bet365, BetWhale), DFS Teams (PrizePicks / Underdog / Sleeper), and Kalshi + Polymarket prediction markets. De-vig, weighted fair probability, and gated edges. Upcoming events only by default.

GET/v6/esports/{sport}/lines

Auth: X-API-Key. Base https://kashrock.up.railway.app. Requires Hobby plan (Sandbox is blocked).

ParamTypeRequiredDescription
sportpathYescs2, valorant, lol, dota2, cod, r6, mlbb, deadlock
event_idstring—Optional. Canonical event id or matchup key. Omit = all upcoming.
marketstring—match_winner | map_winner | total_maps | map_handicap | correct_score | outright | objective | round_winner. Omit = all (top-level market stays null). correct_score returns every listed final score with each book’s own price and the best price, with no consensus. outright returns tournament futures tables (Winner, To Reach Final and similar) — every listed pick with each book’s own price, no consensus. objective is which team takes the xth map objective (baron, dragon, tower…) — the line is the ordinal. round_winner is an in-play single-round winner — the line is the round index.
pm_weightfloat—Prediction-market weight vs sportsbook (default 1.5)
live_onlybool—true (default) = upcoming only; false = include started/past kickoffs still on the tape
cURLGET
curl -H "X-API-Key: YOUR_API_KEY" \
  "https://kashrock.up.railway.app/v6/esports/cs2/lines?market=match_winner"
200 · consensus
{
  "source": "kashrock",
  "sport": "cs2",
  "market": null,
  "pm_weight": 1.5,
  "books": [
    "thunderpick",
    "kalshi",
    "polymarket"
  ],
  "total_events": 1,
  "total_top_edges": 1,
  "events": [
    {
      "event_id": "kr_ev_example",
      "home_team": "Team Vitality",
      "away_team": "Lynn Vision",
      "event_time": "2026-09-12T15:00:00Z",
      "matchup_key": "lynn vision__team vitality",
      "markets": [
        {
          "market": "match_winner",
          "map": null,
          "line": null,
          "consensus_confidence": 0.91,
          "sources_used": [
            "thunderpick",
            "kalshi",
            "polymarket"
          ],
          "outcomes": [
            {
              "name": "team vitality",
              "consensus_probability": 0.62,
              "sources": [
                {
                  "source": "thunderpick",
                  "type": "sportsbook",
                  "probability": 0.58,
                  "decimal": 1.65,
                  "american": -154,
                  "volume": null,
                  "open_interest": null,
                  "liquidity": null
                },
                {
                  "source": "kalshi",
                  "type": "prediction_market",
                  "probability": 0.63,
                  "decimal": 1.59,
                  "american": -170,
                  "volume": 1200,
                  "open_interest": 800,
                  "liquidity": null
                },
                {
                  "source": "polymarket",
                  "type": "prediction_market",
                  "probability": 0.6,
                  "decimal": 1.67,
                  "american": -150,
                  "volume": 5000,
                  "open_interest": null,
                  "liquidity": 2200
                }
              ],
              "best_price": {
                "source": "thunderpick",
                "type": "sportsbook",
                "decimal": 1.72,
                "probability": 0.58,
                "edge_pct": 6.64
              }
            }
          ],
          "best_edge": {
            "source": "thunderpick",
            "outcome": "team vitality",
            "decimal": 1.72,
            "edge_pct": 6.64,
            "adjusted_edge_pct": 5.2,
            "liquidity_score": 0.9
          },
          "quality": {
            "source_count": 3,
            "max_disagreement": 0.05,
            "unreliable": false,
            "low_confidence": false,
            "suspect_edge": false,
            "surfaced": true
          },
          "entity_match": "ok"
        }
      ],
      "best_edge": {
        "market": "match_winner",
        "map": null,
        "line": null,
        "outcome": "team vitality",
        "source": "thunderpick",
        "edge_pct": 6.64,
        "surfaced": true
      }
    }
  ],
  "top_edges": [
    {
      "event_id": "kr_ev_example",
      "home_team": "Team Vitality",
      "away_team": "Lynn Vision",
      "market": "match_winner",
      "outcome": "team vitality",
      "source": "thunderpick",
      "edge_pct": 6.64,
      "adjusted_edge_pct": 5.2,
      "sources_used": [
        "thunderpick",
        "kalshi",
        "polymarket"
      ]
    }
  ]
}

Field reference

FieldMeaning
market (top-level)Echo of ?market=. null when you omit the filter (all markets returned).
mapMap number for map_winner only. null on match_winner / totals / handicap.
lineSet for total_maps and map_handicap. null on match_winner / map_winner.
consensus_probabilityDe-vigged, venue-weighted fair probability for the outcome.
best_priceBest payout on the outcome: decimal, implied prob, edge_pct, and links.bet when the winning source has a URL.
edge_pctEV vs consensus: consensus × decimal − 1. Positive = value (informational).
sources[]Per-venue price. Includes links.bet when the underlying prop has a bet/market/event URL (sportsbooks, DFS Teams, prediction markets).
deeplinkOn each sources[] entry and on best_price: a URL that opens that book to bet, or null.
deeplink_levelselection, player, match, or board (best first). Pinnacle, Bovada, Polymarket, Picklebet, Betway, Dexsport, and BetOnline link to the match. Thunderpick, Kalshi, 1xBet, Bet365, and DFS Teams link to the board. null when unavailable.
qualityGate flags: source_count, max_disagreement, unreliable, low_confidence, suspect_edge, surfaced.
top_edgesOnly markets that clear every quality gate. Thin or disagreeing markets stay in events only.

How consensus works

Prediction markets are read as probabilities. Sportsbook and DFS Teams American odds are converted to implied probability, then each source is de-vigged so outcomes sum to 1.0. Consensus is a weighted mean (prediction markets default weight 1.5). Edge is informational EV vs that fair number — not betting advice.

Hard quality gates before a pick is surfaced in top_edges: Kalshi/Polymarket liquidity floors, at least 3 sources, max source disagreement of 12 points, and raw edge capped at 8%. Ranking uses confidence × liquidity × edge. Thin or disagreeing markets stay in events with quality flags but are excluded from the top feed.

Markets: match winner, map winner, total maps, map handicap. Kalshi has no map handicap on the live board — that source is omitted for handicap only. total_maps requires same matchup + same line across venues.

Errors

  • 401 — missing / invalid API key
  • 403 — plan below Hobby (Sandbox)
  • 400 — invalid market

Closing prints after a match leaves this board: History tape · closing mainlines (GET …/matches/{slug}/lines/history, Builder+).

Related: Props · Markets · Route index · Consensus product page