GTO poker solver data: NLHE/PLO preflop ranges, postflop strategy, EV. 6-max NL preflop free.
Call this server's tools from your browser. Nothing to install.
Bearer pdk_… API key from https://pokerdata.io/app/api. Optional: without it the tool list and 6-max NL cash preflop tools still work.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Preferred tool for differences between two preflop or postflop contexts. The server fetches both strategies and returns action-frequency/EV deltas plus the largest postflop combo changes, avoiding two large node payloads.
Preflop contexts use game/stack/history/hand. Postflop contexts use pack/board/path/combo.
The context deltas are measured from. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo.
The context deltas are measured to. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo.
Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage.
Requested poker format. "cash" uses the cash trees. "mtt" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported.
Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage.
Maximum largest-changing combos for aggregate postflop comparisons (default 12, maximum 50)
Preferred tool for differences between two preflop or postflop contexts. The server fetches both strategies and returns action-frequency/EV deltas plus the largest postflop combo changes, avoiding two large node payloads.
| Argument | Type | Description |
|---|---|---|
| anteBb | number | Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage. |
| domain* | string | Preflop contexts use game/stack/history/hand. Postflop contexts use pack/board/path/combo. |
| format | string | Requested poker format. "cash" uses the cash trees. "mtt" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported. |
| baseline* | object | The context deltas are measured from. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo. |
| objective | string | Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage. |
| comboLimit | number | Maximum largest-changing combos for aggregate postflop comparisons (default 12, maximum 50) |
| comparison* | object | The context deltas are measured to. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo. |
{
"type": "object",
"required": [
"domain",
"baseline",
"comparison"
],
"properties": {
"anteBb": {
"type": "number",
"description": "Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage."
},
"domain": {
"enum": [
"preflop",
"postflop"
],
"type": "string",
"description": "Preflop contexts use game/stack/history/hand. Postflop contexts use pack/board/path/combo."
},
"format": {
"enum": [
"cash",
"mtt"
],
"type": "string",
"description": "Requested poker format. \"cash\" uses the cash trees. \"mtt\" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported."
},
"baseline": {
"type": "object",
"properties": {
"game": {
"enum": [
"nl",
"nl9",
"nlmtt8",
"nlh8-hydra",
"plo",
"plo5",
"plo9",
"plo6hu"
],
"type": "string",
"description": "Preflop only. Both sides must name the same game."
},
"hand": {
"type": "string",
"description": "Preflop only. One hand or class, e.g. AKs. Provide it in both contexts or neither; PLO comparisons require it."
},
"pack": {
"type": "string",
"description": "Pack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or \"<pack>-flop33\" for 33%."
},
"path": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exact childSegment path from get_postflop_node, e.g. [\"Check\", \"Bet 5.5\"]. Empty for the root."
},
"board": {
"type": "string",
"description": "Postflop only. Board in spaced form, e.g. \"3h 3d 2s\"."
},
"combo": {
"type": "string",
"description": "Postflop only. Exact two-card combo, e.g. As5s. Provide it in both contexts or neither."
},
"stack": {
"type": "number",
"description": "Preflop only. Stack depth in big blinds."
},
"history": {
"type": "string",
"description": "Preflop only. Action path ending in the position about to act, e.g. \"UTG_60%_HJ\"."
}
},
"description": "The context deltas are measured from. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo.",
"additionalProperties": false
},
"objective": {
"enum": [
"solver_ev",
"chip_ev",
"icm",
"pko",
"satellite"
],
"type": "string",
"description": "Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage."
},
"comboLimit": {
"type": "number",
"description": "Maximum largest-changing combos for aggregate postflop comparisons (default 12, maximum 50)"
},
"comparison": {
"type": "object",
"properties": {
"game": {
"enum": [
"nl",
"nl9",
"nlmtt8",
"nlh8-hydra",
"plo",
"plo5",
"plo9",
"plo6hu"
],
"type": "string",
"description": "Preflop only. Both sides must name the same game."
},
"hand": {
"type": "string",
"description": "Preflop only. One hand or class, e.g. AKs. Provide it in both contexts or neither; PLO comparisons require it."
},
"pack": {
"type": "string",
"description": "Pack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or \"<pack>-flop33\" for 33%."
},
"path": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exact childSegment path from get_postflop_node, e.g. [\"Check\", \"Bet 5.5\"]. Empty for the root."
},
"board": {
"type": "string",
"description": "Postflop only. Board in spaced form, e.g. \"3h 3d 2s\"."
},
"combo": {
"type": "string",
"description": "Postflop only. Exact two-card combo, e.g. As5s. Provide it in both contexts or neither."
},
"stack": {
"type": "number",
"description": "Preflop only. Stack depth in big blinds."
},
"history": {
"type": "string",
"description": "Preflop only. Action path ending in the position about to act, e.g. \"UTG_60%_HJ\"."
}
},
"description": "The context deltas are measured to. One side of the comparison. Preflop contexts use game, stack, history and optional hand; postflop contexts use pack, board, path and optional combo.",
"additionalProperties": false
}
},
"additionalProperties": false
}Record a heads-up postflop solve request. Required: title, board, pot (bb), effective_stack (bb). The job stays pending: solver dispatch and billing are not configured, so this does not start a solve.
| Argument | Type | Description |
|---|---|---|
| pot* | number | Starting pot in big blinds. |
| tags | array | Free-form tags stored with the job. |
| board* | string | Board to solve, e.g. "3h 3d 2s". |
| title* | string | Label for the job, 1 to 120 characters. |
| ip_range | string | In-position range in the same weights format. |
| add_allin | boolean | Add an all-in branch alongside the bet sizes. |
| bet_sizes | array | Bet sizes as fractions of the pot, e.g. [0.33, 0.75]. |
| oop_range | string | Out-of-position range as hand-class weights, e.g. "AA:1,AKs:0.42". Defaults are left to the solver config. |
| iterations |
Preferred tool for exact NLHE postflop hand questions. Returns a canonical context, exact action mix, action EV/loss when available, made-hand and draw classification, blocker facts, and same-rank-class suit comparisons. The server computes evidence; the agent should phrase causality as interpretation.
| Argument | Type | Description |
|---|---|---|
| pack* | string | Pack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or "<pack>-flop33" for 33%. |
| path | array | Exact childSegment path from get_postflop_node, e.g. ["Check", "Bet 5.5"]. Empty for the root. |
| board* | string | Board in spaced form, e.g. "6s 4h 2s" |
| combo* | string | Required exact two-card combo, e.g. As5s |
| anteBb | number | Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage. |
| format | string | Requested poker format. "cash" uses the cash trees. "mtt" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported. |
| objective | string |
Find hands the account has uploaded. Returns hand_id, session_id, handAt, position, cards, game, board, potType, street lines, and netBb. Solver grade buckets are not filled. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.
| Argument | Type | Description |
|---|---|---|
| sort* | string | Row order: newest first, largest win first, or largest loss first (the default). |
| limit* | integer | Hands to return, 1 to 50. |
| filter | any | Hand-level filters, all optional. |
| game_type | any | Only hands of this game type. Matches hole-card count. |
| session_id | any | Only hands from this upload session (see list_my_sessions). |
| table_size | any | Only hands dealt at tables of this many seats. |
| gto_vs_3bet_bucket | any | Solver grade bucket for hero's action vs a 3-bet. Grades are not computed, so any value matches nothing rather than inventing a frequency. |
| gto_plo5_rfi_bucket |
Preferred tool for board-texture heuristics. Aggregates action frequencies and range/action composition across solved boards in one postflop pack. Results explicitly report sample breadth and use equal weight per board.
| Argument | Type | Description |
|---|---|---|
| pack* | string | Pack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or "<pack>-flop33" for 33%. |
| path | array | Exact childSegment path from get_postflop_node, e.g. ["Check", "Bet 5.5"]. Empty for the root. |
| anteBb | number | Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage. |
| format | string | Requested poker format. "cash" uses the cash trees. "mtt" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported. |
| filters | object | Texture filters applied to the pack's solved boards. All optional; omit for every board. |
| objective | string | Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage. |
| boardLimit | number |
Table for one preflop game and stack, in big blinds: seats, stacks, blinds (sb 0.5, bb 1), ante, antePostedBy, stackIncludesAnte, openSizes (first-in raise-to), evUnit, evBaseline. Convergence is not published. stackIncludesAnte is true: the named depth is the starting stack and the 1bb BB ante is posted from it. openSizes at 40bb is open 2.2x (listing 2.2bb; node decodes code 40034 to 2.19bb) and SB 2.8x (2.8bb). 10bb is all-in/fold versus 50bb stacks, so stacks is null there. evs on nodes are small blinds relative to fold. Example: get_config({ game: "nlmtt8", stack: 40 }).
| Argument | Type | Description |
|---|---|---|
| game* | string | "nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), "nlh8-hydra" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), "plo" = pot-limit Omaha 6-max cash (4-card), "plo5" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), "plo9" = pot-limit Omaha 9-max cash, "plo6hu" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only. |
| stack* | number | Stack depth in big blinds, e.g. 40 |
{
"type": "object",
"required": [
"game",
"stack"
],
"properties": {
"game": {
"enum": [
"nl",
"nl9",
"nlmtt8",
"nlh8-hydra",
"plo",
"plo5",
"plo9",
"plo6hu"
],
"type": "string",
"description": "\"nl\" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), \"nl9\" = no-limit hold'em 9-max cash, \"nlmtt8\" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), \"nlh8-hydra\" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), \"plo\" = pot-limit Omaha 6-max cash (4-card), \"plo5\" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), \"plo9\" = pot-limit Omaha 9-max cash, \"plo6hu\" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only."
},
"stack": {
"type": "number",
"description": "Stack depth in big blinds, e.g. 40"
}
},
"additionalProperties": false
}Preflop exploitability for a game. No preflop dataset publishes exploitability, convergence, or iteration counts. The answer is not available; this tool never fills in a number.
| Argument | Type | Description |
|---|---|---|
| game* | string | Preflop game id to report on, e.g. "nl" or "nlmtt8". Any known game answers "not available". |
{
"type": "object",
"required": [
"game"
],
"properties": {
"game": {
"type": "string",
"description": "Preflop game id to report on, e.g. \"nl\" or \"nlmtt8\". Any known game answers \"not available\"."
}
},
"additionalProperties": false
}Per-hand cumulative results for a winnings curve. `points` is [{ hand, bb }], oldest to newest, downsampled. Pass session_id for one session. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.
| Argument | Type | Description |
|---|---|---|
| max_points* | integer | Points on the curve after downsampling, 2 to 200. |
| session_id | any | Only this upload session's hands. Omit for the whole account. |
{
"type": "object",
"required": [
"max_points"
],
"properties": {
"max_points": {
"type": "integer",
"default": 80,
"maximum": 200,
"minimum": 2,
"description": "Points on the curve after downsampling, 2 to 200."
},
"session_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Only this upload session's hands. Omit for the whole account."
}
},
"additionalProperties": false
}Actions available at a decision node. `history` is an action path ending in the position about to act, e.g. "UTG_60%_HJ". sizeBb is the raise-to in big blinds and sizePctPot is the percent of the pot after calling (nlmtt8 40bb Open 40034 is 2.19bb; the pack label is 2.2x). evs are small blinds relative to fold. Compact mode returns action totals; add `hand` for its exact mixed strategy. full=true is full=1: all 169 hold'em hands with explicit 0, and no invented EVs.
| Argument | Type | Description |
|---|---|---|
| full | boolean | Hold'em only. When true, each action includes all 169 hands with weight 0 where the bundle omitted the hand. EVs stay only where the bundle scored them. |
| game* | string | "nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), "nlh8-hydra" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), "plo" = pot-limit Omaha 6-max cash (4-card), "plo5" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), "plo9" = pot-limit Omaha 9-max cash, "plo6hu" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only. |
| hand | string | Optional hand/class |
| stack* | number | Stack depth in big blinds |
| detail | string |
Shown-hand first-in limp range: 169-class counts of hole cards villains showed after an open limp. Pass position for one seat. Sample is showdown-only. This is not a solver range.
| Argument | Type | Description |
|---|---|---|
| limit* | integer | Hole-card classes to return, most frequent first, 1 to 169. |
| position | any | Only limps from these seats. |
| game_type | any | Only hands of this game type. |
| session_id | any | Only hands from this upload session. |
| table_size | any | Only hands dealt at tables of this many seats. |
| opponent_id | any | Only this opponent's limps (see list_my_opponents). Omit for every tracked villain. |
{
"type": "object",
"required": [
"limit"
],
"properties": {
"limit": {
"type": "integer",
"default": 30,
"maximum": 169,
"minimum": 1,
"description": "Hole-card classes to return, most frequent first, 1 to 169."
},
"position": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"UTG",
"UTG1",
"UTG2",
"MP",
"LJ",
"HJ",
"CO",
"BTN",
"SB",
"BB"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Only limps from these seats."
},
"game_type": {
"anyOf": [
{
"enum": [
"NLHE",
"PLO",
"PLO5",
"PLO6"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Only hands of this game type."
},
"session_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Only hands from this upload session."
},
"table_size": {
"anyOf": [
{
"type": "integer",
"maximum": 9,
"minimum": 2
},
{
"type": "null"
}
],
"description": "Only hands dealt at tables of this many seats."
},
"opponent_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Only this opponent's limps (see list_my_opponents). Omit for every tracked villain."
}
},
"additionalProperties": false
}Leak notes computed from uploaded hands for one opponent, with the sample size on each line.
| Argument | Type | Description |
|---|---|---|
| opponent_id* | string | Opponent id from list_my_opponents. |
{
"type": "object",
"required": [
"opponent_id"
],
"properties": {
"opponent_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Opponent id from list_my_opponents."
}
},
"additionalProperties": false
}One postflop solver node: the acting player's strategy for every hand class, the legal next segments, board, reach and the reach-weighted action split. Walk deeper by appending a returned childSegment (an action like "Bet 5.5" or a runout like "deal:7c") to `path`.
| Argument | Type | Description |
|---|---|---|
| pack* | string | Pack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or "<pack>-flop33" for 33%. |
| path | array | Segments from the root, e.g. ["Check", "Bet 5.5"]. Empty for the root node. |
| board* | string | Board in spaced form, e.g. "3h 3d 2s" |
| combo | string | Optional exact combo, e.g. AsKh (PLO5: five cards, as listed in the node's hands) |
| limit | number | Maximum representative compact combos (default 40, maximum 200) |
| detail | string | Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required. |
{
"type": "object",
"required": [
"pack",
"board"
],
"properties": {
"pack": {
"type": "string",
"description": "Pack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or \"<pack>-flop33\" for 33%."
},
"path": {
"type": "array",
"items": {
"type": "string"
},
"description": "Segments from the root, e.g. [\"Check\", \"Bet 5.5\"]. Empty for the root node."
},
"board": {
"type": "string",
"description": "Board in spaced form, e.g. \"3h 3d 2s\""
},
"combo": {
"type": "string",
"description": "Optional exact combo, e.g. AsKh (PLO5: five cards, as listed in the node's hands)"
},
"limit": {
"type": "number",
"description": "Maximum representative compact combos (default 40, maximum 200)"
},
"detail": {
"enum": [
"compact",
"full"
],
"type": "string",
"description": "Response detail. \"compact\" is the default and removes bulk maps; use \"full\" only when exact complete data is required."
}
},
"additionalProperties": false
}The range a player takes one flop action with, from a solved pack: hand-class weights ("AA:1,AKs:0.42,...", same format as the preflop ranges) after every earlier flop action on the path. `path` ends in the action whose range you want, e.g. ["Check", "Bet 1.8", "Call 1.8"] for the check-call range. Bet-size tree. "33" = 33% pot on the flop, then 75% pot on the turn and river, plus all-in. "75" = 75% pot on every street, plus all-in. Compact and full detail apply to the other range tools; this returns the action range itself.
| Argument | Type | Description |
|---|---|---|
| hand | string | Optional exact combo (AsKh) or hand class (AKs) for one frequency instead of reading the whole range. |
| pack* | string | Pack id from list_postflop_packs |
| path* | array | Flop actions ending in the action whose range you want |
| tree* | string | Bet-size tree. "33" = 33% pot on the flop, then 75% pot on the turn and river, plus all-in. "75" = 75% pot on every street, plus all-in. PLO5 packs are solved on "33" only. |
| board* | string | Flop, e.g. "3h 3d 2s" |
| minFreq | number | Drop classes at or below this weight. Default 0. |
Look up one queued solve for this account. status is pending, running, done, or failed. solution_id is null until a worker exists.
| Argument | Type | Description |
|---|---|---|
| queue_id* | integer | Queue id returned by enqueue_solve. |
{
"type": "object",
"required": [
"queue_id"
],
"properties": {
"queue_id": {
"type": "integer",
"description": "Queue id returned by enqueue_solve.",
"exclusiveMinimum": 0
}
},
"additionalProperties": false
}The GTO range for one spot. `spot` is an action path of POSITION_ACTION pairs ending in the action whose range you want, e.g. NLHE cash "UTG_60%_HJ_Call", nlmtt8 "UTG_Open", or PLO "UTG_Open_HJ_3B". Add `hand` for one exact frequency and EV. Compact mode is default; PLO returns representative pure/mixed hands unless a hand is specified; plo5 returns the top hands by EV that take the action (limit up to 500 compact, 2000 full).
| Argument | Type | Description |
|---|---|---|
| game* | string | "nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), "nlh8-hydra" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), "plo" = pot-limit Omaha 6-max cash (4-card), "plo5" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), "plo9" = pot-limit Omaha 9-max cash, "plo6hu" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only. |
| hand | string | Optional hand/class, e.g. AKs or (KA)(KA) |
| spot* | string | Action path ending in an action |
| limit | number | Maximum compact rows to return (default 120, maximum 500). |
| stack* | number | Stack depth in big blinds, e.g. 100 |
Index metadata for one preflop game, stack, and path: bundle stats for hold'em/PLO bundles, or the matching node row for plo5 and plo6hu. Does not return a strategy and does not invent exploitability.
| Argument | Type | Description |
|---|---|---|
| game* | string | Preflop game id, e.g. "nl", "nl9", "nlmtt8", "nlh8-hydra", "plo", "plo9", "plo5", "plo6hu". |
| path* | string | Action path, e.g. UTG_Open or LJ_Fold. Use (root) or empty for the plo5 root. |
| stack* | number | Stack depth in big blinds, e.g. 100. |
{
"type": "object",
"required": [
"game",
"stack",
"path"
],
"properties": {
"game": {
"type": "string",
"description": "Preflop game id, e.g. \"nl\", \"nl9\", \"nlmtt8\", \"nlh8-hydra\", \"plo\", \"plo9\", \"plo5\", \"plo6hu\"."
},
"path": {
"type": "string",
"description": "Action path, e.g. UTG_Open or LJ_Fold. Use (root) or empty for the plo5 root."
},
"stack": {
"type": "number",
"description": "Stack depth in big blinds, e.g. 100."
}
},
"additionalProperties": false
}One uploaded session's headline numbers: hero, game type, start and end times, hands played, net result in big blinds, and HUD rates (VPIP, PFR, 3-bet, open limp) as percentages with the sample size. Use it after list_my_sessions to report how a session went; use get_hand_results for its winnings curve and find_hands for individual hands. Returns an error for an unknown session id. Any key works, free trial included, and it never counts against the allowance. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.
| Argument | Type | Description |
|---|---|---|
| session_id* | string | Session id from list_my_sessions. |
{
"type": "object",
"required": [
"session_id"
],
"properties": {
"session_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Session id from list_my_sessions."
}
},
"additionalProperties": false
}Start here with a new user. Returns the short set of questions to ask them (game, format, stakes, goal), a menu of what PokerData can do with the tools for each, what is free without a key, and how to file a feature or data request. Free, no key needed.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}MTT results imported from tournament summary files. Money is in cents. Hand histories are not a source of buy-ins or prizes. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.
| Argument | Type | Description |
|---|---|---|
| limit* | integer | Tournament summaries to include, 1 to 500. |
{
"type": "object",
"required": [
"limit"
],
"properties": {
"limit": {
"type": "integer",
"default": 200,
"maximum": 500,
"minimum": 1,
"description": "Tournament summaries to include, 1 to 500."
}
},
"additionalProperties": false
}Tree documentation for one dataset: coverage note from the shipped README and per-stack bundle or node counts from the shipped index. Does not read or modify range bytes.
| Argument | Type | Description |
|---|---|---|
| dataset* | string | Dataset id from list_datasets, e.g. "nl/v2", "nl9", "nlmtt8", "plo", "plo9", "plo5", "plo6hu". |
{
"type": "object",
"required": [
"dataset"
],
"properties": {
"dataset": {
"type": "string",
"description": "Dataset id from list_datasets, e.g. \"nl/v2\", \"nl9\", \"nlmtt8\", \"plo\", \"plo9\", \"plo5\", \"plo6hu\"."
}
},
"additionalProperties": false
}Primary hand-upload path. Returns https://pokerdata.io/upload on this origin, with a short-lived signed token for the caller's account when signing is configured. Hand the URL to the user. Pasting histories into chat is the fallback.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}List preflop datasets in the shipped tree documentation (stacks, positions, whether each bundle was analyzed). Preflop exploitability is not available.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Discover covered stack depths and positions. Call this before low-level preflop queries. "nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), "nlh8-hydra" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), "plo" = pot-limit Omaha 6-max cash (4-card), "plo5" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), "plo9" = pot-limit Omaha 9-max cash, "plo6hu" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only.
| Argument | Type | Description |
|---|---|---|
| detail | string | Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required. |
{
"type": "object",
"properties": {
"detail": {
"enum": [
"compact",
"full"
],
"type": "string",
"description": "Response detail. \"compact\" is the default and removes bulk maps; use \"full\" only when exact complete data is required."
}
},
"additionalProperties": false
}Finished postflop solutions saved for this account. None are marked done while dispatch is disabled.
| Argument | Type | Description |
|---|---|---|
| limit* | integer | Solutions to return, 1 to 50. |
{
"type": "object",
"required": [
"limit"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Solutions to return, 1 to 50."
}
},
"additionalProperties": false
}Tracked opponents from uploaded hands. Each row has handCount, handsVsHero, and heroBb100Vs. Pass name to find one villain.
| Argument | Type | Description |
|---|---|---|
| hero | any | Only hands where this hero name was seated. |
| name | any | Case-insensitive substring of the opponent's screen name. |
| sort* | string | Row order: most hands, most recent, or by hero's bb/100 against them (toughest = worst for hero). |
| limit* | integer | Opponents to return, 1 to 500. |
| game_type | any | Only hands of this game type, e.g. "NLHE" or "PLO". |
| min_hands* | integer | Drop opponents seen in fewer hands than this. |
{
"type": "object",
"required": [
"limit",
"min_hands",
"sort"
],
"properties": {
"hero": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Only hands where this hero name was seated."
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Case-insensitive substring of the opponent's screen name."
},
"sort": {
"enum": [
"hands",
"last_seen",
"toughest",
"softest"
],
"type": "string",
"default": "hands",
"description": "Row order: most hands, most recent, or by hero's bb/100 against them (toughest = worst for hero)."
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 500,
"minimum": 1,
"description": "Opponents to return, 1 to 500."
},
"game_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Only hands of this game type, e.g. \"NLHE\" or \"PLO\"."
},
"min_hands": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Drop opponents seen in fewer hands than this."
}
},
"additionalProperties": false
}List the feature and data requests this account has filed, newest first, with their status. Free with any key.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Maximum requests to return (default 20, maximum 100). |
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Maximum requests to return (default 20, maximum 100)."
}
},
"additionalProperties": false
}Recent uploaded sessions, newest first: id, hero, game type, dates, hands, and net result. game_type matches hole-card count. If this account has no hands, offer the hosted upload page from get_upload_link (https://pokerdata.io/upload) instead of asking the user to paste histories into chat.
| Argument | Type | Description |
|---|---|---|
| limit* | integer | Sessions to return, 1 to 50. |
| game_type | any | Only sessions containing this game type. |
{
"type": "object",
"required": [
"limit"
],
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Sessions to return, 1 to 50."
},
"game_type": {
"anyOf": [
{
"enum": [
"NLHE",
"PLO",
"PLO5",
"PLO6"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Only sessions containing this game type."
}
},
"additionalProperties": false
}Every solved postflop pack: preflop line, positions (OOP vs IP), stack, pot, the bet-size trees it is solved under, and the solved boards. Boards use the spaced form ("3h 3d 2s"). NLHE packs list `sizingTrees`: "75" (75% pot every street, the pack id itself) and "33" (33% pot on the flop, then 75%, under the `<pack>-flop33` id); every postflop tool accepts either tree's packId. PLO5 packs (ids starting plo5-) solve one 33% flop tree, flop decisions only. Compact output lists board names per pack. Pass `pack` (the 75% id or the -flop33 id) for that tree's per-board detail and per-flop exploitability where the index publishes a number. Missing exploitability is omitted, never estimated. Pass `variant` to list only NLHE or PLO5 packs. Call this before get_postflop_node.
| Argument | Type | Description |
|---|---|---|
| pack | string | One pack id (75% id or the -flop33 id): per-board detail and that tree's exploitability |
| detail | string | Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required. |
| variant | string | Only packs of this game: nlhe (hold'em) or plo5 (five-card Omaha) |
{
"type": "object",
"properties": {
"pack": {
"type": "string",
"description": "One pack id (75% id or the -flop33 id): per-board detail and that tree's exploitability"
},
"detail": {
"enum": [
"compact",
"full"
],
"type": "string",
"description": "Response detail. \"compact\" is the default and removes bulk maps; use \"full\" only when exact complete data is required."
},
"variant": {
"enum": [
"nlhe",
"plo5"
],
"type": "string",
"description": "Only packs of this game: nlhe (hold'em) or plo5 (five-card Omaha)"
}
},
"additionalProperties": false
}List this account's solver-queue jobs, newest first. Jobs are not dispatched.
| Argument | Type | Description |
|---|---|---|
| limit* | integer | Jobs to return, 1 to 50. |
{
"type": "object",
"required": [
"limit"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Jobs to return, 1 to 50."
}
},
"additionalProperties": false
}Search valid decision nodes for a stack depth, tagged by depth (1 = RFI, 2 = vs open, 3 = 3-bet pots, …). Compact mode is paginated; use depth, contains, and offset to narrow results without loading thousands of paths. plo9 has no spot index: walk it with get_node from history "UTG".
| Argument | Type | Description |
|---|---|---|
| game* | string | "nl" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), "nl9" = no-limit hold'em 9-max cash, "nlmtt8" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), "nlh8-hydra" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), "plo" = pot-limit Omaha 6-max cash (4-card), "plo5" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), "plo9" = pot-limit Omaha 9-max cash, "plo6hu" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only. |
| depth | number | Optional decision depth filter |
| limit | number | Maximum compact rows to return (default 120, maximum 500). |
| stack* | number | Stack depth in big blinds |
| detail | string | Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required. |
| offset |
File a feature request or data request for the user, after telling them their question isn't covered and they agree. kind "data" is missing coverage (a game, format, stack depth, spot, or solve); kind "feature" is a missing capability (a tool, filter, export, or endpoint). Free with any key; the PokerData team reads every one.
| Argument | Type | Description |
|---|---|---|
| kind* | string | "data" for missing coverage, "feature" for a missing capability. |
| details | string | Anything else that helps: game, format, stakes, stack depths, positions, how they would use it. |
| summary* | string | One line saying what the user wants, e.g. "9-max MTT preflop at 25bb with ICM". |
| question | string | The user's original question that couldn't be answered, verbatim if possible. |
{
"type": "object",
"required": [
"kind",
"summary"
],
"properties": {
"kind": {
"enum": [
"feature",
"data"
],
"type": "string",
"description": "\"data\" for missing coverage, \"feature\" for a missing capability."
},
"details": {
"type": "string",
"maxLength": 4000,
"description": "Anything else that helps: game, format, stakes, stack depths, positions, how they would use it."
},
"summary": {
"type": "string",
"maxLength": 200,
"description": "One line saying what the user wants, e.g. \"9-max MTT preflop at 25bb with ICM\"."
},
"question": {
"type": "string",
"maxLength": 2000,
"description": "The user's original question that couldn't be answered, verbatim if possible."
}
},
"additionalProperties": false
}Secondary upload path for a small paste. Prefer get_upload_link and the hosted /upload page. Runs the same ingestion pipeline and returns hands parsed, tournaments parsed, and errors. Does not grade solver frequencies.
| Argument | Type | Description |
|---|---|---|
| text* | string | Raw hand history or tournament summary text. |
| filename | string | Name to record for the paste. Defaults to "paste.txt". |
{
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"minLength": 1,
"description": "Raw hand history or tournament summary text."
},
"filename": {
"type": "string",
"description": "Name to record for the paste. Defaults to \"paste.txt\"."
}
},
"additionalProperties": false
}| integer |
| Requested solver iterations, 50 to 5000. |
| effective_stack* | number | Effective stack behind, in big blinds. |
| max_aggressions | integer | Raises allowed per street, 1 to 4. |
{
"type": "object",
"required": [
"title",
"board",
"pot",
"effective_stack"
],
"properties": {
"pot": {
"type": "number",
"description": "Starting pot in big blinds.",
"exclusiveMinimum": 0
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Free-form tags stored with the job."
},
"board": {
"type": "string",
"minLength": 5,
"description": "Board to solve, e.g. \"3h 3d 2s\"."
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Label for the job, 1 to 120 characters."
},
"ip_range": {
"type": "string",
"description": "In-position range in the same weights format."
},
"add_allin": {
"type": "boolean",
"description": "Add an all-in branch alongside the bet sizes."
},
"bet_sizes": {
"type": "array",
"items": {
"type": "number",
"exclusiveMinimum": 0
},
"description": "Bet sizes as fractions of the pot, e.g. [0.33, 0.75]."
},
"oop_range": {
"type": "string",
"description": "Out-of-position range as hand-class weights, e.g. \"AA:1,AKs:0.42\". Defaults are left to the solver config."
},
"iterations": {
"type": "integer",
"maximum": 5000,
"minimum": 50,
"description": "Requested solver iterations, 50 to 5000."
},
"effective_stack": {
"type": "number",
"description": "Effective stack behind, in big blinds.",
"exclusiveMinimum": 0
},
"max_aggressions": {
"type": "integer",
"maximum": 4,
"minimum": 1,
"description": "Raises allowed per street, 1 to 4."
}
},
"additionalProperties": false
}| Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage. |
| comparisonLimit | number | Maximum same-rank-class suit comparisons (default 6, maximum 12) |
{
"type": "object",
"required": [
"pack",
"board",
"combo"
],
"properties": {
"pack": {
"type": "string",
"description": "Pack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or \"<pack>-flop33\" for 33%."
},
"path": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exact childSegment path from get_postflop_node, e.g. [\"Check\", \"Bet 5.5\"]. Empty for the root."
},
"board": {
"type": "string",
"description": "Board in spaced form, e.g. \"6s 4h 2s\""
},
"combo": {
"type": "string",
"description": "Required exact two-card combo, e.g. As5s"
},
"anteBb": {
"type": "number",
"description": "Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage."
},
"format": {
"enum": [
"cash",
"mtt"
],
"type": "string",
"description": "Requested poker format. \"cash\" uses the cash trees. \"mtt\" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported."
},
"objective": {
"enum": [
"solver_ev",
"chip_ev",
"icm",
"pko",
"satellite"
],
"type": "string",
"description": "Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage."
},
"comparisonLimit": {
"type": "number",
"description": "Maximum same-rank-class suit comparisons (default 6, maximum 12)"
}
},
"additionalProperties": false
}| any |
| Solver grade bucket for PLO5 raise-first-in. Grades are not computed, so any value matches nothing. |
{
"type": "object",
"required": [
"sort",
"limit"
],
"properties": {
"sort": {
"enum": [
"recent",
"biggest_win",
"biggest_loss"
],
"type": "string",
"default": "biggest_loss",
"description": "Row order: newest first, largest win first, or largest loss first (the default)."
},
"limit": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Hands to return, 1 to 50."
},
"filter": {
"anyOf": [
{
"type": "object",
"properties": {
"pfr": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero raised preflop."
},
"rfi": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero raised first in."
},
"vpip": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero put money in voluntarily."
},
"isPfr": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero was the preflop raiser."
},
"limped": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero open-limped."
},
"rfiOpp": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero had a raise-first-in opportunity (folded to hero)."
},
"wasSrp": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hand was a single-raised pot."
},
"sawFlop": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero saw a flop."
},
"position": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"UTG",
"UTG1",
"UTG2",
"MP",
"LJ",
"HJ",
"CO",
"BTN",
"SB",
"BB"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Keep hands where hero sat in one of these seats."
},
"threeBet": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero 3-bet."
},
"facedLimp": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero acted after an opponent's open limp."
},
"isIpVsPfr": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero was in position against the preflop raiser."
},
"sawShowdown": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hand reached showdown."
},
"facedThreeBet": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero's open was 3-bet."
},
"flopBetPctPot": {
"anyOf": [
{
"type": "object",
"properties": {
"max": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Exclusive upper bound, % of pot."
},
"min": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Inclusive lower bound, % of pot."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Size of hero's flop bet, as % of pot."
},
"turnBetPctPot": {
"anyOf": [
{
"type": "object",
"properties": {
"max": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Exclusive upper bound, % of pot."
},
"min": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Inclusive lower bound, % of pot."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Size of hero's turn bet, as % of pot."
},
"wonAtShowdown": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero won at showdown."
},
"riverBetPctPot": {
"anyOf": [
{
"type": "object",
"properties": {
"max": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Exclusive upper bound, % of pot."
},
"min": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Inclusive lower bound, % of pot."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Size of hero's river bet, as % of pot."
},
"wasThreeBetPot": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hand was a 3-bet pot."
},
"flopFirstAction": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"check",
"bet",
"call",
"fold",
"raise"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Hero's first action on the flop."
},
"turnFirstAction": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"check",
"bet",
"call",
"fold",
"raise"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Hero's first action on the turn."
},
"foldedToThreeBet": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Hero folded to a 3-bet."
},
"riverFirstAction": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"check",
"bet",
"call",
"fold",
"raise"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Hero's first action on the river."
},
"vsThreeBetAction": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"fold",
"call",
"raise"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Opener's action vs a 3-bet: fold, call, or raise (4-bet)."
},
"flopFacedBetPctPot": {
"anyOf": [
{
"type": "object",
"properties": {
"max": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Exclusive upper bound, % of pot."
},
"min": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Inclusive lower bound, % of pot."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Size of the flop bet hero faced, as % of pot."
},
"turnFacedBetPctPot": {
"anyOf": [
{
"type": "object",
"properties": {
"max": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Exclusive upper bound, % of pot."
},
"min": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Inclusive lower bound, % of pot."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Size of the turn bet hero faced, as % of pot."
},
"riverFacedBetPctPot": {
"anyOf": [
{
"type": "object",
"properties": {
"max": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Exclusive upper bound, % of pot."
},
"min": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
],
"description": "Inclusive lower bound, % of pot."
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Size of the river bet hero faced, as % of pot."
},
"flopFirstResponseToBet": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"check",
"bet",
"call",
"fold",
"raise"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Hero's first action facing a flop bet."
},
"turnFirstResponseToBet": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"check",
"bet",
"call",
"fold",
"raise"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Hero's first action facing a turn bet."
},
"riverFirstResponseToBet": {
"anyOf": [
{
"type": "array",
"items": {
"enum": [
"check",
"bet",
"call",
"fold",
"raise"
],
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Hero's first action facing a river bet."
}
},
"description": "Hand-level filters. Every field is optional; null means the filter is not applied.",
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "Hand-level filters, all optional."
},
"game_type": {
"anyOf": [
{
"enum": [
"NLHE",
"PLO",
"PLO5",
"PLO6"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Only hands of this game type. Matches hole-card count."
},
"session_id": {
"anyOf": [
{
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
{
"type": "null"
}
],
"description": "Only hands from this upload session (see list_my_sessions)."
},
"table_size": {
"anyOf": [
{
"type": "integer",
"maximum": 9,
"minimum": 2
},
{
"type": "null"
}
],
"description": "Only hands dealt at tables of this many seats."
},
"gto_vs_3bet_bucket": {
"anyOf": [
{
"enum": [
"solver_default",
"mixer",
"freq0",
"no_reach",
"unmapped"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Solver grade bucket for hero's action vs a 3-bet. Grades are not computed, so any value matches nothing rather than inventing a frequency."
},
"gto_plo5_rfi_bucket": {
"anyOf": [
{
"enum": [
"solver_default",
"mixer",
"freq0",
"no_reach",
"unmapped"
],
"type": "string"
},
{
"type": "null"
}
],
"description": "Solver grade bucket for PLO5 raise-first-in. Grades are not computed, so any value matches nothing."
}
},
"additionalProperties": false
}| Maximum matching boards to analyze (default and maximum 50) |
| representativeLimit | number | Maximum representative boards returned (default 12, maximum 20) |
{
"type": "object",
"required": [
"pack"
],
"properties": {
"pack": {
"type": "string",
"description": "Pack id from list_postflop_packs. Use a sizingTrees packId to pick the tree: the pack id for 75% pot on the flop, or \"<pack>-flop33\" for 33%."
},
"path": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exact childSegment path from get_postflop_node, e.g. [\"Check\", \"Bet 5.5\"]. Empty for the root."
},
"anteBb": {
"type": "number",
"description": "Requested ante in bb. nlmtt8 models a 1bb BB-ante; other positive antes return unsupported coverage."
},
"format": {
"enum": [
"cash",
"mtt"
],
"type": "string",
"description": "Requested poker format. \"cash\" uses the cash trees. \"mtt\" is supported only for preflop chip-EV against game nlmtt8; ICM, PKO, and satellite remain unsupported."
},
"filters": {
"type": "object",
"properties": {
"highCard": {
"enum": [
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"T",
"J",
"Q",
"K",
"A"
],
"type": "string",
"description": "Exact highest board rank."
},
"pairedness": {
"enum": [
"unpaired",
"paired",
"double_paired",
"trips",
"quads"
],
"type": "string",
"description": "Rank repetition on the board."
},
"suitTexture": {
"enum": [
"rainbow",
"two_tone",
"monotone",
"three_flush",
"four_flush",
"five_flush"
],
"type": "string",
"description": "Most cards of one suit on the board. A three-card monotone flop is monotone."
},
"connectivity": {
"enum": [
"connected",
"semi_connected",
"disconnected"
],
"type": "string",
"description": "How many board cards sit inside one five-rank straight window."
},
"highCardClass": {
"enum": [
"ace_high",
"broadway_high",
"middle",
"low"
],
"type": "string",
"description": "Highest board rank bucketed: ace, ten through king, seven through nine, or lower."
}
},
"description": "Texture filters applied to the pack's solved boards. All optional; omit for every board.",
"additionalProperties": false
},
"objective": {
"enum": [
"solver_ev",
"chip_ev",
"icm",
"pko",
"satellite"
],
"type": "string",
"description": "Requested optimization objective. chip_ev is supported for nlmtt8 preflop. ICM, PKO, and satellite return unsupported coverage."
},
"boardLimit": {
"type": "number",
"description": "Maximum matching boards to analyze (default and maximum 50)"
},
"representativeLimit": {
"type": "number",
"description": "Maximum representative boards returned (default 12, maximum 20)"
}
},
"additionalProperties": false
}| Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required. |
| history* | string | Action path ending in a position |
| minFreq | number | Trim per-action ranges |
{
"type": "object",
"required": [
"game",
"stack",
"history"
],
"properties": {
"full": {
"type": "boolean",
"description": "Hold'em only. When true, each action includes all 169 hands with weight 0 where the bundle omitted the hand. EVs stay only where the bundle scored them."
},
"game": {
"enum": [
"nl",
"nl9",
"nlmtt8",
"nlh8-hydra",
"plo",
"plo5",
"plo9",
"plo6hu"
],
"type": "string",
"description": "\"nl\" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), \"nl9\" = no-limit hold'em 9-max cash, \"nlmtt8\" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), \"nlh8-hydra\" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), \"plo\" = pot-limit Omaha 6-max cash (4-card), \"plo5\" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), \"plo9\" = pot-limit Omaha 9-max cash, \"plo6hu\" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only."
},
"hand": {
"type": "string",
"description": "Optional hand/class"
},
"stack": {
"type": "number",
"description": "Stack depth in big blinds"
},
"detail": {
"enum": [
"compact",
"full"
],
"type": "string",
"description": "Response detail. \"compact\" is the default and removes bulk maps; use \"full\" only when exact complete data is required."
},
"history": {
"type": "string",
"description": "Action path ending in a position"
},
"minFreq": {
"type": "number",
"description": "Trim per-action ranges"
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"pack",
"tree",
"board",
"path"
],
"properties": {
"hand": {
"type": "string",
"maxLength": 40,
"description": "Optional exact combo (AsKh) or hand class (AKs) for one frequency instead of reading the whole range."
},
"pack": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Pack id from list_postflop_packs"
},
"path": {
"type": "array",
"items": {
"type": "string",
"pattern": "^(Check|Fold|Call|Bet|Raise|AllIn)( \\d+(\\.\\d+)?)?$"
},
"maxItems": 8,
"minItems": 1,
"description": "Flop actions ending in the action whose range you want"
},
"tree": {
"enum": [
"33",
"75"
],
"type": "string",
"description": "Bet-size tree. \"33\" = 33% pot on the flop, then 75% pot on the turn and river, plus all-in. \"75\" = 75% pot on every street, plus all-in. PLO5 packs are solved on \"33\" only."
},
"board": {
"type": "string",
"maxLength": 40,
"minLength": 6,
"description": "Flop, e.g. \"3h 3d 2s\""
},
"minFreq": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Drop classes at or below this weight. Default 0."
}
},
"additionalProperties": false
}| detail | string | Response detail. "compact" is the default and removes bulk maps; use "full" only when exact complete data is required. |
| minFreq | number | Drop hands at or below this weight (PLO ranges are large) |
{
"type": "object",
"required": [
"game",
"stack",
"spot"
],
"properties": {
"game": {
"enum": [
"nl",
"nl9",
"nlmtt8",
"nlh8-hydra",
"plo",
"plo5",
"plo9",
"plo6hu"
],
"type": "string",
"description": "\"nl\" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), \"nl9\" = no-limit hold'em 9-max cash, \"nlmtt8\" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), \"nlh8-hydra\" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), \"plo\" = pot-limit Omaha 6-max cash (4-card), \"plo5\" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), \"plo9\" = pot-limit Omaha 9-max cash, \"plo6hu\" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only."
},
"hand": {
"type": "string",
"description": "Optional hand/class, e.g. AKs or (KA)(KA)"
},
"spot": {
"type": "string",
"description": "Action path ending in an action"
},
"limit": {
"type": "number",
"description": "Maximum compact rows to return (default 120, maximum 500)."
},
"stack": {
"type": "number",
"description": "Stack depth in big blinds, e.g. 100"
},
"detail": {
"enum": [
"compact",
"full"
],
"type": "string",
"description": "Response detail. \"compact\" is the default and removes bulk maps; use \"full\" only when exact complete data is required."
},
"minFreq": {
"type": "number",
"description": "Drop hands at or below this weight (PLO ranges are large)"
}
},
"additionalProperties": false
}| number |
| Compact pagination offset |
| contains | string | Optional case-insensitive history substring filter |
{
"type": "object",
"required": [
"game",
"stack"
],
"properties": {
"game": {
"enum": [
"nl",
"nl9",
"nlmtt8",
"nlh8-hydra",
"plo",
"plo5",
"plo9",
"plo6hu"
],
"type": "string",
"description": "\"nl\" = no-limit hold'em 6-max cash (169-grid hands, per-hand EV in small blinds), \"nl9\" = no-limit hold'em 9-max cash, \"nlmtt8\" = no-limit hold'em 8-max MTT chip-EV (10–300bb, 1bb BB-ante; Fold/Call/Limp/AI/Open/3B tokens), \"nlh8-hydra\" = no-limit hold'em 8-max MTT chip-EV with a classic 0.1bb ante from every seat (10, 20, 30, 60bb; same tokens as nlmtt8), \"plo\" = pot-limit Omaha 6-max cash (4-card), \"plo5\" = pot-limit Omaha 5-card 6-max (100bb, 1.2bb ante), \"plo9\" = pot-limit Omaha 9-max cash, \"plo6hu\" = 6-card Omaha heads-up (BTN vs BB, 100bb). Cash trees are not tournament, ICM, PKO, or satellite solves. nlmtt8 is chip-EV only."
},
"depth": {
"type": "number",
"description": "Optional decision depth filter"
},
"limit": {
"type": "number",
"description": "Maximum compact rows to return (default 120, maximum 500)."
},
"stack": {
"type": "number",
"description": "Stack depth in big blinds"
},
"detail": {
"enum": [
"compact",
"full"
],
"type": "string",
"description": "Response detail. \"compact\" is the default and removes bulk maps; use \"full\" only when exact complete data is required."
},
"offset": {
"type": "number",
"description": "Compact pagination offset"
},
"contains": {
"type": "string",
"description": "Optional case-insensitive history substring filter"
}
},
"additionalProperties": false
}