PlayUp API.
PlayUp esports lines, normalized.
Quick answer: PlayUp esports odds are live on KashRock: match winner, per-map winners, total maps, map handicaps and correct scores for Counter-Strike and League of Legends, on the same canonical ids as the other books. One key, GET /v7/{sport}/lines.
What PlayUp posts
PlayUp posts esports markets across its match board: match winner, per-map winners, total maps, map handicaps and correct scores. Every price lands on the same canonical ids as the rest of the line books, prematch and in-play on one board.
Where PlayUp shows up
- : /lines: PlayUp'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 playup as the leg book and price a ticket or discover +EV parlays against the rest of the market.
- : /flow: When playup moves a number first, the shift and steam plays record which venue led and how far the price ran.
Endpoints
PlayUp 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 across every market PlayUp posts | book row: playup |
| GET /v7/{sport}/parlays | Price or discover parlays with playup as the leg book | book=playup |
| GET /v7/{sport}/flow | Steam, shift, volume and whale plays where playup moves lead | kind=steam|shift|volume|whale |
| GET /v7/meta | The registry entry: key, kind, supported markets | key=playup |
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": 704,
"key": "playup",
"display_name": "PlayUp",
"status": "active",
"aliases": [
"playup",
"playup.com.au",
"play up"
],
"logo": "https://www.kashrock.com/logos/playup.png"
}Reading it honestly
The booksobject on /lines reports each venue's presence, row count, and age in seconds on every call. When PlayUp 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 theplayuprows - : Compare against the consensus fair price on the same
kr_match_id
Quick reference
| Field | Value |
|---|---|
| Book key | book=playup |
| Surfaces | /lines, /parlays, /flow |
| Registry | /v7/meta key=playup |
| 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.