Virgin Bet API.
Virgin Bet esports lines, normalized.
Quick answer: Virgin Bet esports odds are live on KashRock: match, map, rounds and kills lines for CS2, Dota 2, League of Legends, Call of Duty and Rainbow Six, on the same canonical ids as the other 81 books. One key, GET /v7/{sport}/lines.
What Virgin Bet posts
Virgin Bet posts team mainlines: match winner, maps handicap and total maps at series level, plus per-map winners, round handicaps, round and kill totals scoped per map, objective markets and correct-score tables. Every price lands on the same kr_match_id and market names as the rest of the line books.
Where Virgin Bet shows up
- : /lines: Virgin Bet's price per market next to the consensus fair price, the books object reports its row count and age in seconds on every call.
- : /parlays: Name virginbet as the leg book and price a ticket or discover +EV parlays against the rest of the market.
- : /flow: When virginbet moves a number first, the shift and steam plays record which venue led and how far the price ran.
Endpoints
Virgin Bet is read through the shared v7 surface: no book-specific integration, no upstream fetch on the request path.
| Endpoint | What it returns | Key filter |
|---|---|---|
| GET /v7/{sport}/lines | Per-book prices and the consensus view | book row: virginbet |
| GET /v7/{sport}/parlays | Price or discover parlays with virginbet as the leg book | book=virginbet |
| GET /v7/{sport}/flow | Steam, shift, volume and whale plays where virginbet moves lead | kind=steam|shift|volume|whale |
| GET /v7/meta | The registry entry: key, kind, supported markets | key=virginbet |
Live in the book registry
The real /v7/meta entry: the key, kind, and what the book supports, exactly as the API reports it.
{
"book_id": 505,
"key": "virginbet",
"display_name": "Virgin Bet",
"status": "active",
"aliases": [
"virginbet.com",
"virgin bet",
"virginbet uk"
]
}Reading it honestly
The booksobject on /lines reports each venue's presence, row count, and age in seconds on every call. When Virgin Bet has nothing posted for a board, the response says so instead of hiding the gap: an empty board is an answer, not an error.
Start in minutes
- : Create a key on Pricing : Sandbox is $0; book lines need Hobby and up
- : Call
GET /v7/{sport}/linesand read thevirginbetrows - : Compare against the consensus fair price on the same
kr_match_id
Quick reference
| Field | Value |
|---|---|
| Book key | book=virginbet |
| Surfaces | /lines, /parlays, /flow |
| Registry | /v7/meta key=virginbet |
| Plan | Hobby and up, from $29.99/mo |
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.