Ranges contract
What every preflop ranges response means — units, the shared endpoints, raise-size codes, and what is not published.
schemaVersion 1. Machine-readable spec: openapi.yaml.
These reads are served at https://pokerdata.io/api/v1/ranges. The same text, with every game's specifics in one file, is at pokerdata.io/ranges.md.
This page is the part of the contract that is the same for every game. Each game has its own page with its seats, stacks and open sizes: No-limit hold'em (6-max), No-limit hold'em tournament (8-max), Pot-limit Omaha (6-max), Pot-limit Omaha (9-max).
Units
| Field | Unit |
|---|---|
| stack, stacks, blinds, ante, sizeBb, openSizes.sizeBb | big blinds (bb) |
| sizePctPot | percent of the pot after calling |
| evs | small blinds (sb). evUnit is "sb". evBaseline "fold" means every stored fold EV is 0, so those evs are relative to folding |
| omitted weight | 0. full=1 on a hold'em node writes all 169 hands with explicit 0. EVs are only present for hands the bundle scored, including a scored hand at frequency 0. full=1 leaves evs only where the bundle scored the hand |
Two small blinds are one big blind. evs stay in small blinds.
A node whose stored fold EVs are not all 0 reports evBaseline null. The small blind has already posted 0.5bb, so an SB fold is -1sb.
Responses include schemaVersion and a units object.
Endpoints
Every game serves the same four reads under its own prefix (nl/v2, nlmtt8, plo, plo9):
GET /api/v1/ranges/{game}— discovery: livestacksandpositions. Keyless.GET /api/v1/ranges/{game}/node?stack=&history=— every action at a decision.historyends in the seat to act.full=1is the dense 169-hand mode.GET /api/v1/ranges/{game}/range?stack=&spot=— one action's range.spotends in the action.GET /api/v1/ranges/{game}/spots?stack=— every spot in the tree at that depth.
A game whose table has more to say than seats and stacks — blinds, an ante, listed open sizes — also serves a keyless GET /api/v1/ranges/{game}/config?stack=. Today that is nlmtt8. Unknowns are null and listed in unverified.
history and spot use the preflop action tree.
Raise sizes
Each raise on /node carries sizeBb (raise-to in big blinds) and sizePctPot. When a published action has no code, sizeBb is null and sizeReason says so.
A filename code 40000+pct raises by pct percent of the pot after calling. Blinds and any dead ante are in the pot.
raiseTo = currentBet + (pct/100) * (pot + toCall)
toCall is currentBet - chipsAlreadyIn, so a posted blind is not paid twice.
| Code | Meaning |
|---|---|
| 0 | Fold |
| 1 | Call |
| 3 | All-in (raise-to = stack) |
| 5 | Min-raise |
| 14 | Raise-to 3 small blinds (1.5bb) |
| 40000+pct | Pot-percent raise |
Checked sizes:
- 9-max, no ante, 100bb, open
40120→ sizeBb 4, sizePctPot 120 - nlmtt8 40bb (blinds 0.5/1, 1bb BB ante), open
40034→ sizeBb 2.19, sizePctPot 34 (the pack lists this as 2.2x)
The game pages list what each pack labels its sizes; the node always decodes the code.
Convergence
Convergence is not published.