← All games

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. Start free; paid plans from $100/month.

Your API access

Copy your key, track requests and data, and change plans from API.

Open API →

Plans

Starter, Pro and Enterprise use the same endpoints and the same MCP server. REST and MCP calls share one meter; the first allowance reached wins, and nothing is billed as overage.

PlanPriceIncludesUse
No keyFreeDiscovery endpoints; on MCP, the tool list and every 6-max NL cash preflop tool, 200 tool calls a day per IPPersonal
StarterFree key, no cardEvery game and postflop, 100 requests or 50 MB lifetime, 10/secPersonal only
Pro$100/monthEvery game and postflop, 250,000 requests or 5 GB a month, 10/secPersonal only
Enterprise$250/monthEvery game and postflop, 5,000,000 requests or 100 GB a month, 50/sec (higher rate limit)Commercial use allowed
Studio$199/monthPoker Study AI on pokerstudy.aiPersonal
CustomContact usRedistribution, bulk export, training-data licences and SLAsCustom licence

Building a product, an app, or an agent for a company? That is commercial use: choose Enterprise, or contact us for redistribution.

Data use

Personal use: Starter, Pro and Studio. Commercial use (in a product, app or business): Enterprise. Training or fine-tuning AI/ML models on the data, redistribution or resale: not included in any self-serve plan; requires a Custom licence, contact us.

Authentication

Send your key as a Bearer header. Discovery endpoints are free and need no key; everything else does. A free trial key (100 requests, no card) is enough to try every example on this page.

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.

  • stackrequired— Stack depth in bb, e.g. 100
  • spotrequired— Action path ending in an action, e.g. UTG_60%_HJ_Call (encode % as %25)
  • handoptional— 169-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.

  • stackrequired— Stack depth in bb
  • historyrequired— Action path ending in a position, e.g. UTG_60%_HJ
  • handoptional— 169-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.

  • stackrequired— Stack depth in bb

No-limit hold'em tournament (8-max)

Chip-EV MTT ladder with a 1bb big-blind ante posted from the named stack (SB 0.5, BB 1). Same 169-grid as cash NLHE; seats are UTG, UTG1, LJ, HJ, CO, BTN, SB, BB. Raises use Open / 3B depth tags (plus Limp and AI). Each raise's sizeBb is the raise-to in big blinds. At 40bb the pack lists the open as 2.2x; the node decodes code 40034 to 2.19bb, and the SB open is 2.8x.

GET/api/v1/ranges/nlmtt8free

Discovery — stacks (10–300bb) and the 8-max ring. Free, no key.

GET/api/v1/ranges/nlmtt8/configfree

Table config for one stack: seats, ante-inclusive stacks, blinds, open sizes, and EV units. Free, no key. 40bb open is listed 2.2x; the node decodes it to 2.19bb. SB is 2.8x.

  • stackrequired— Stack depth in bb, e.g. 40
GET/api/v1/ranges/nlmtt8/range

The range for one spot. Add `hand` for that class's frequency.

  • stackrequired— Stack depth in bb, e.g. 300
  • spotrequired— Action path ending in an action, e.g. UTG_Open
  • handoptional— 169-grid class, e.g. AKs
GET/api/v1/ranges/nlmtt8/node

The whole decision at a node. `history` ends in the actor. Each raise includes sizeBb. `full=1` writes all 169 hands with explicit 0.

  • stackrequired— Stack depth in bb
  • historyrequired— Action path ending in a position, e.g. UTG
  • handoptional— 169-grid class — returns action → freq
  • fulloptional— Pass 1 for every 169-hand weight, including explicit 0

Pot-limit Omaha (6-max)

Same action-path grammar, but raises are labelled by betting depth: Open, 3B, 4B, … Hands use 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).

  • stackrequired— Stack depth in bb
  • spotrequired— Action path ending in an action, e.g. UTG_Open_HJ_3B
  • handoptional— Suit-grouping hand string
  • minFreqoptional— Drop 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.

  • packrequired— Pack id from the catalog, e.g. nlhe-srp-btn-vs-bb-100bb
  • boardrequired— 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.

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. A pdk_key still works. Claude signs in with OAuth instead of a pasted key; that token uses the same plan and usage meter as the account's API key. Without a credential, the tool list, list_games, list_postflop_packs, the tree docs, and every 6-max NL cash preflop tool (game: "nl", all stacks) still answer, up to 200 tool calls a day per IP.

POST https://pokerdata.io/api/mcp
Authorization: Bearer pdk_YOUR_KEY

Tools: list_games, get_config, get_range, get_node, list_spots (preflop, including nl9, plo5, and plo6hu when published), list_datasets, get_tree_docs, get_range_metadata, get_exploitability, list_postflop_packs, get_postflop_node, get_postflop_range (postflop), explain_combo, get_board_report, compare_strategies, hand and session tools (free with any key, and they never use up your allowance), and a solver queue. Hand files go to /upload (get_upload_link). Coaching tools return context, solve quality when published, and explicit unsupported coverage instead of substituting cash data for tournament or ICM questions.

Want the raw solver exports instead? The sims library sells full game bundles for offline study.