/api/v1/ranges/nl/v2freeDiscovery — covered stack depths and positions plus manifest metadata. Free, no key. Call this first.
The GTO preflop ranges behind our sims, as a clean HTTP API — no-limit hold’em and pot-limit Omaha (6- & 9-max), every stack depth, every position, every action line. JSON, CORS-open, read-only. $100/month.
Loading…
Send your key as a Bearer header. Discovery endpoints are free; the example links on this page also run keyless in your browser, so you can explore everything before subscribing.
curl "https://pokerdata.io/api/v1/ranges/nl/v2/range?stack=100&spot=UTG_60%25_HJ_Call" \ -H "Authorization: Bearer pdk_YOUR_KEY"
Unauthenticated calls get a JSON 401 pointing back here. Responses are privately cacheable; the underlying solves are effectively immutable.
Ranges are keyed by an action path: a chain of POSITION_ACTION pairs describing the preflop line. A path ending in an action (Fold / Call / AI / a raise size like 60%) names a single range; a path ending in a position names a whole decision. Encode % in raise sizes as %25. Weights are on the 169-grid (AA, AKs, AKo…), each in [0, 1]; v2 responses carry per-hand EV in small blinds.
/api/v1/ranges/nl/v2freeDiscovery — covered stack depths and positions plus manifest metadata. Free, no key. Call this first.
/api/v1/ranges/nl/v2/rangeThe range for one spot. `spot` is an action path ending in the action whose range you want. Add `hand` for that class's frequency and EV.
stackrequired— Stack depth in bb, e.g. 100spotrequired— Action path ending in an action, e.g. UTG_60%_HJ_Call (encode % as %25)handoptional— 169-grid class, e.g. AKs/api/v1/ranges/nl/v2/nodeThe whole decision at a node — every available action with its range. `history` ends in the position about to act. Add `hand` for its mixed strategy.
stackrequired— Stack depth in bbhistoryrequired— Action path ending in a position, e.g. UTG_60%_HJhandoptional— 169-grid class — returns action → freq/api/v1/ranges/nl/v2/spotsEvery valid decision node for a stack depth, tagged by depth (1 = RFI, 2 = vs open, 3 = 3-bet pots, …). Build a spot picker without 404 probing.
stackrequired— Stack depth in bbcombos is the weighted concrete-combo count (pair 6, suited 4, offsuit 12)./api/v1/ranges/nl, /nl/range, /nl/node, /nl/spots) serve the same trees without EV data.400 malformed path, 404 spot not in the dataset.Same action-path grammar, but raises are labelled by betting depth: Open, 3B, 4B, … Hands use MonkerSolver's suit-grouping notation over the 16,432 PLO starting hands: AAKK, (2A)AA, (KA)(KA) — encode ( ) as %28 %29.
/api/v1/ranges/plofreeDiscovery — stacks and positions for 6-max PLO. Free, no key.
/api/v1/ranges/plo/rangeThe range for one spot. Add `hand` for its frequency, `minFreq` to trim low-weight hands (PLO ranges are large).
stackrequired— Stack depth in bbspotrequired— Action path ending in an action, e.g. UTG_Open_HJ_3Bhandoptional— MonkerSolver hand stringminFreqoptional— Drop hands at or below this weight (default 0)/api/v1/ranges/plo/nodeThe whole decision at a node. Add `hand` for its mixed strategy, `minFreq` to trim.
stackrequired— Stack depth in bbhistoryrequired— Action path ending in a positionhandoptional— MonkerSolver hand stringminFreqoptional— Trim per-action ranges/api/v1/ranges/plo/spotsEvery valid decision node for a stack depth, tagged by depth.
stackrequired— Stack depth in bb/api/v1/ranges/plo for the live list.Open-40100) — always read exact action tokens from /node or /spots.The full-ring sibling — identical grammar and hand notation, nine seats: UTG, UTG1, UTG2, LJ, HJ, CO, BTN, SB, BB.
/api/v1/ranges/plo9freeDiscovery — stacks (60, 100bb) and positions. Free, no key.
/api/v1/ranges/plo9/rangeThe range for one spot.
stackrequired— 60 or 100spotrequired— Action path ending in an actionhandoptional— MonkerSolver hand stringminFreqoptional— Trim low-weight hands/api/v1/ranges/plo9/nodeThe whole decision at a node.
stackrequired— 60 or 100historyrequired— Action path ending in a positionhandoptional— MonkerSolver hand stringminFreqoptional— Trim per-action ranges/api/v1/ranges/plo9/spotsEvery valid decision node for a stack depth.
stackrequired— 60 or 100UTG_Fold_UTG1_Fold_…_BTN_Open) — pass minFreq to keep responses small.Full postflop solver strategy, board by board: heads-up pots from the solved preflop lines (BTN opens BB calls, 3-bet pots, …), walked node by node. Boards use the spaced form (3h 3d 2s); a node's childSegments are the legal next steps — actions like Bet 5.5 or runouts like deal:7c — which you append to path to walk deeper.
/api/v1/postflop/catalogfreeDiscovery — every pack with its preflop line, positions, stack, pot, and solved boards. Free, no key. Call this first.
/api/v1/postflop/nodeOne solver node: the acting player's strategy for every hand class, legal next segments, board, reach, and the reach-weighted action split.
packrequired— Pack id from the catalog, e.g. nlhe-srp-btn-vs-bb-100bbboardrequired— Board in spaced form, e.g. "3h 3d 2s" (URL-encode the spaces)pathoptional— JSON array of segments from the root, e.g. ["Check","Bet 5.5"]. Omit for the root node.The same data is exposed as a Model Context Protocol server — point an MCP client (Claude, Cursor, or any agent framework) at it and the ranges become tool calls. Stateless Streamable HTTP, authenticated with the same Bearer key as the REST API.
POST https://pokerdata.io/api/mcp Authorization: Bearer pdk_YOUR_KEY
Tools: list_games, get_range, get_node, list_spots (preflop), list_postflop_packs, get_postflop_node (postflop) — the same endpoints documented above, one tool each.
Want the raw solver exports instead? The sims library sells full game bundles for offline study.