PokerDataGet an API key
Menu

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

FieldUnit
stack, stacks, blinds, ante, sizeBb, openSizes.sizeBbbig blinds (bb)
sizePctPotpercent of the pot after calling
evssmall blinds (sb). evUnit is "sb". evBaseline "fold" means every stored fold EV is 0, so those evs are relative to folding
omitted weight0. 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: live stacks and positions. Keyless.
  • GET /api/v1/ranges/{game}/node?stack=&history= — every action at a decision. history ends in the seat to act. full=1 is the dense 169-hand mode.
  • GET /api/v1/ranges/{game}/range?stack=&spot= — one action's range. spot ends 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.

CodeMeaning
0Fold
1Call
3All-in (raise-to = stack)
5Min-raise
14Raise-to 3 small blinds (1.5bb)
40000+pctPot-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.