No-limit hold'em tournament (8-max)
The nlmtt8 chip-EV preflop ranges — eight seats, a big-blind ante, ante-inclusive stacks, listed open sizes, and the keyless config endpoint.
Eight-handed no-limit hold'em tournament ranges, chip EV, at stack depths 10, 15, 20, 30, 40, 50, 75, 100, 200, and 300bb. Spots use the preflop action tree with raises by betting depth (Open, 3B, 4B, 5B); the chip raise-to is sizeBb on the action, not the token. Units, the shared endpoints and the raise-size codes are in the ranges contract.
ICM, PKO, satellites and other ante structures are not published. nlmtt8 is the only tournament dataset, and it is chip EV.
Stacks, seats, and the ante
nlmtt8 is 8-max. Seats, in acting order: UTG, UTG1, LJ, HJ, CO, BTN, SB, BB.
Blinds are sb 0.5 and bb 1. The ante is 1bb, posted by the BB. stackIncludesAnte is true: the named depth is the starting stack, and the 1bb BB ante is posted from that stack. 10bb is all-in/fold versus 50bb stacks, so per-seat stacks at 10bb are null.
Config endpoint
GET /api/v1/ranges/nlmtt8/config?stack= — seats, stacks, blinds, ante, openSizes, importedAt. Keyless. Unknowns are null and listed in unverified.
openSizes is the pack listing (the labeled multiple). At 40bb, openSizes.open is { "label": "2.2x", "sizeBb": 2.2 } and openSizes.sb is { "label": "2.8x", "sizeBb": 2.8 }. The node decodes that 2.2x open to 2.19bb.
Open sizes (pack listing)
| Stack (bb) | Open | SB open |
|---|---|---|
| 10 | all-in | all-in |
| 15 | 2x | 2.5x |
| 20 | 2x | 2.5x |
| 30 | 2x | 2.8x |
| 40 | 2.2x | 2.8x |
| 50 | 2.2x | 2.8x |
| 75 | 2.5x | 2.8x |
| 100 | 2.25x | 3x |
| 200 | 2.5x | 3x |
| 300 | 2.5x | 3x |
Exact open raise-to
Each raise on GET /api/v1/ranges/nlmtt8/node carries sizeBb and sizePctPot. Checked sizes:
- 40bb (blinds 0.5/1, 1bb BB ante), open
40034→ sizeBb 2.19, sizePctPot 34 (the pack lists this as 2.2x) - same stack, SB
40060→ sizeBb 2.8, sizePctPot 60 (listed as 2.8x)
Example
GET /api/v1/ranges/nlmtt8/config?stack=40
ante is 1, antePostedBy is BB, stackIncludesAnte is true, evUnit is sb, evBaseline is fold.
GET /api/v1/ranges/nlmtt8/node?stack=40&history=UTG_Fold_UTG1_Fold_LJ_Fold_HJ_Fold_CO_Fold_BTN
Actor BTN. Fold EVs are 0. Open is code 40034, sizeBb 2.19, sizePctPot 34. Open AA is frequency 1 at 23.27sb.
Operations
/api/v1/ranges/nlmtt8free · no keyCovered stacks (10–300bb) and the 8-max ring. Free, no key. Seats are UTG, UTG1, LJ, HJ, CO, BTN, SB, BB. The named stack includes the 1bb BB ante (stackIncludesAnte). Blinds are sb 0.5 and bb 1.
curl "https://pokerdata.io/api/v1/ranges/nlmtt8"{
"game": "nlmtt8",
"stacks": [
10,
15,
20,
30,
40,
50,
75,
100,
200,
300
],
"positions": [
"BB",
"BTN",
"CO",
"HJ",
"LJ",
"SB",
"UTG",
"UTG1"
]
}/api/v1/ranges/nlmtt8/configKeyless seats, stacks, blinds, ante, and first-in open sizes for one depth. openSizes is the pack listing. At 40bb the open label is 2.2x (listing sizeBb 2.2); the node decodes code 40034 to sizeBb 2.19. SB is 2.8x (code 40060, sizeBb 2.8). stackIncludesAnte is true. 10bb is all-in/fold versus 50bb stacks, so stacks is null there. evUnit is sb and evBaseline is fold. Convergence is not published. Unknowns are null and listed in unverified. Security is optional. Without a key, 200 calls a day per IP. A Bearer key uses that key's plan meter instead.
stackintegerrequired- Stack depth in bb.
curl "https://pokerdata.io/api/v1/ranges/nlmtt8/config" \
-H "Authorization: Bearer pdk_YOUR_KEY"{
"schemaVersion": 1,
"units": {
"stack": "bb",
"stacks": "bb",
"blinds": "bb",
"ante": "bb",
"openSizes": "bb",
"evs": "sb"
},
"game": "nlmtt8",
"stack": 40,
"seats": [
"UTG",
"UTG1",
"LJ",
"HJ",
"CO",
"BTN",
"SB",
"BB"
],
"stacks": [
40,
40,
40,
40,
40,
40,
40,
40
],
"blinds": {
"sb": 0.5,
"bb": 1
},
"ante": 1,
"antePostedBy": "BB",
"stackIncludesAnte": true,
"openSizes": {
"open": {
"label": "2.2x",
"sizeBb": 2.2
},
"sb": {
"label": "2.8x",
"sizeBb": 2.8
}
},
"evUnit": "sb",
"evBaseline": "fold"
}/api/v1/ranges/nlmtt8/nodeEvery action at a decision. history ends in the seat to act. Each raise includes sizeBb (big blinds) and sizePctPot when the bundle stored them. At 40bb, BTN Open is code 40034, sizeBb 2.19 (pack label 2.2x). SB Open is code 40060, sizeBb 2.8. Fold EVs are 0 when evBaseline is fold. full=1 writes all 169 hands with explicit 0 and does not add evs the bundle did not score. An omitted weight is 0.
stackintegerrequired- Stack depth in bb.
historystringrequired- Action path ending in the position about to act.
handstringoptional- 169-grid class.
minFreqnumberoptional- Drop hands at or below this weight.
fulloptional- Hold'em dense mode. Return all 169 hands with explicit 0 weights. Does not invent EVs.
curl "https://pokerdata.io/api/v1/ranges/nlmtt8/node" \
-H "Authorization: Bearer pdk_YOUR_KEY"{
"schemaVersion": 1,
"units": {
"stack": "bb",
"sizeBb": "bb",
"sizePctPot": "percent_of_pot_after_call",
"evs": "sb"
},
"game": "nlmtt8",
"stack": 40,
"history": "UTG_Fold_UTG1_Fold_LJ_Fold_HJ_Fold_CO_Fold_BTN",
"actor": "BTN",
"evUnit": "sb",
"evBaseline": "fold",
"actions": [
{
"action": "Fold",
"kind": "fold",
"weights": {
"72o": 1
},
"evs": {
"72o": 0
}
},
{
"action": "Open",
"kind": "raise",
"sizeBb": 2.19,
"sizePctPot": 34,
"weights": {
"AA": 1
},
"evs": {
"AA": 23.27
}
}
]
}/api/v1/ranges/nlmtt8/rangeOne action's range. spot ends in an action such as UTG_Open. Omitted weight means 0. evs are small blinds relative to fold when the bundle scored the hand.
stackintegerrequired- Stack depth in bb.
spotstringrequired- Action path ending in an action.
handstringoptional- 169-grid class.
minFreqnumberoptional- Drop hands at or below this weight.
curl "https://pokerdata.io/api/v1/ranges/nlmtt8/range" \
-H "Authorization: Bearer pdk_YOUR_KEY"{
"schemaVersion": 1,
"game": "nlmtt8",
"stack": 40,
"spot": "UTG_Open",
"sizeBb": 2.19,
"sizePctPot": 34,
"evUnit": "sb",
"evBaseline": "fold",
"hand": "AA",
"freq": 1,
"ev": 23.27
}/api/v1/ranges/nlmtt8/spotsEvery valid decision node for a stack, tagged by depth.
stackintegerrequired- Stack depth in bb.
curl "https://pokerdata.io/api/v1/ranges/nlmtt8/spots" \
-H "Authorization: Bearer pdk_YOUR_KEY"