← Sims library

Ranges API

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.

Your API access

Loading…

Authentication

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.

No-limit hold'em (6-max)

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.

GET/api/v1/ranges/nl/v2free

Discovery — covered stack depths and positions plus manifest metadata. Free, no key. Call this first.

GET/api/v1/ranges/nl/v2/range

The 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.

  • stackrequiredStack depth in bb, e.g. 100
  • spotrequiredAction path ending in an action, e.g. UTG_60%_HJ_Call (encode % as %25)
  • handoptional169-grid class, e.g. AKs
GET/api/v1/ranges/nl/v2/node

The 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.

  • stackrequiredStack depth in bb
  • historyrequiredAction path ending in a position, e.g. UTG_60%_HJ
  • handoptional169-grid class — returns action → freq
GET/api/v1/ranges/nl/v2/spots

Every 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.

  • stackrequiredStack depth in bb

Pot-limit Omaha (6-max)

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.

GET/api/v1/ranges/plofree

Discovery — stacks and positions for 6-max PLO. Free, no key.

GET/api/v1/ranges/plo/range

The range for one spot. Add `hand` for its frequency, `minFreq` to trim low-weight hands (PLO ranges are large).

  • stackrequiredStack depth in bb
  • spotrequiredAction path ending in an action, e.g. UTG_Open_HJ_3B
  • handoptionalMonkerSolver hand string
  • minFreqoptionalDrop hands at or below this weight (default 0)

Pot-limit Omaha (9-max)

The full-ring sibling — identical grammar and hand notation, nine seats: UTG, UTG1, UTG2, LJ, HJ, CO, BTN, SB, BB.

GET/api/v1/ranges/plo9free

Discovery — stacks (60, 100bb) and positions. Free, no key.

Postflop — NLHE solved boards

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.

GET/api/v1/postflop/catalogfree

Discovery — every pack with its preflop line, positions, stack, pot, and solved boards. Free, no key. Call this first.

GET/api/v1/postflop/node

One solver node: the acting player's strategy for every hand class, legal next segments, board, reach, and the reach-weighted action split.

  • packrequiredPack id from the catalog, e.g. nlhe-srp-btn-vs-bb-100bb
  • boardrequiredBoard in spaced form, e.g. "3h 3d 2s" (URL-encode the spaces)
  • pathoptionalJSON array of segments from the root, e.g. ["Check","Bet 5.5"]. Omit for the root node.

MCP server

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.