PokerDataGet an API key
Menu

Replay packs

Solved heads-up postflop strategy trees — flop, turn, and river — as JSON bundles.

The postflop API serves replay packs: curated heads-up postflop scenarios solved by our own CFR engine, each pack covering one preflop line (e.g. "BTN opens, BB calls, 50bb") across a texture-spanning set of flops. A bundle contains the full strategy tree per board — every betting node, every hand's mixed strategy, with EV.

Packs are browsable in the viewer at pokerstudy.ai/replays. On pokerdata.io the same solves are walked through /api/v1/postflop.

Authentication for the Poker Study AI replay viewer is a signed-in session plus an active Studio subscription — not a pdk_ key. On pokerdata.io the raw archive is a $50 purchase per pack (/api/postflop/download/<pack>); signing in does not include it. The pokerdata.io catalog and node endpoints use the same pdk_ Bearer key as the preflop API (catalog is free).

Available packs

Pack idScenarioStacksBoards
nlhe-srp-btn-vs-bb-50bbSingle-raised pot — BTN opens, BB calls50bb5 flops
nlhe-3bet-btn-vs-ep-100bb3-bet pot — EP opens, BTN 3-bets, EP calls100bb18 flops

The catalog grows over time; an unknown id returns 404 {"error": "unknown pack \"<id>\""}.

pokerdata.io (Bearer key)

GET/api/v1/postflop/catalogfree · no key

Every browsable pack with preflop line, seats, pot, and solved boards. Free, no key. Each pack lists its bet-size trees in sizingTrees: "75" (75% pot on every street, plus all-in) is the pack id itself; "33" (33% pot on the flop, then 75% on the turn and river, plus all-in) is the `<pack>-flop33` pack id, which /api/v1/postflop/node accepts as `pack`. Each board's trees array says which trees it is solved under.

Requestbash
curl "https://pokerdata.io/api/v1/postflop/catalog"
GET/api/v1/postflop/node

Postflop solver node

Query parameters
packstringrequired
boardstringrequired
Spaced board. URL-encode spaces.
pathstringoptional
JSON array of segments from the root.
combostringoptional
Optional exact combo. On packs whose catalog advertises reconstructed flop action EV and boards where actionEv.available is true, the matching hand includes action_ev and ev_loss arrays parallel to the node actions.
Requestbash
curl "https://pokerdata.io/api/v1/postflop/node" \
  -H "Authorization: Bearer pdk_YOUR_KEY"

Walk a board street by street by appending segments like "Bet 5.5" or "deal:7c" to path.

Every pack is solved under two bet-size trees, listed in the catalog's sizingTrees:

TreePack idSizing
75<pack>75% pot on every street, plus all-in
33<pack>-flop3333% pot on the flop, then 75% pot on the turn and river, plus all-in

Query the 33% tree by passing its pack id to the node endpoint. Each board's trees array lists the trees it is solved under; a flop missing from a tree is listed under that tree's missing.

Replay bundles (Studio session)

GET/api/replays/{id}/data

Replay-pack bundle

Query parameters
idstringrequired
Requestbash
curl "https://pokerdata.io/api/replays/{id}/data" \
  -H "Authorization: Bearer pdk_YOUR_KEY"
GET/api/replays/{id}

Verifies Studio, then 302s to the gzipped JSON on the CDN.

Query parameters
idstringrequired
Requestbash
curl "https://pokerdata.io/api/replays/{id}" \
  -H "Authorization: Bearer pdk_YOUR_KEY"

Reading a strategy tree

To answer "what does the solver do with A♠A♥ after check–check on the flop":

  1. Find the board in boards[].
  2. Find the node whose path equals ["Check", "Check"] — turn nodes follow the flop action in the walk.
  3. Look up the combo in hands[]; freqs is parallel to that node's actions.

The pot and add fields are in bb, so bet sizes render directly (Bet 13.1 into a 17.5 pot = 75%).

Per-action EV

Pass an exact combo to the keyed node endpoint to request per-action EV for that hand:

GET /api/v1/postflop/node?pack=nlhe-srp-co-vs-bb-100bb&board=3h%203d%202s&path=%5B%22Check%22%5D&combo=AsAd

When the pack advertises actionEvCoverage and the selected board has actionEv.available: true in the catalog, flop hands include:

  • action_ev — absolute EV in bb for each action, parallel to actions
  • ev_loss — EV given up versus the highest-EV action
  • ev_source — either reconstructed_complete_turn_tree for scalar-EV exports or reconstructed_action_loss_anchor for older loss-only exports

Reconstruction follows the published opponent strategy with exact card removal across all 49 physical turns, then anchors the action vector to the published equilibrium ev. Three older loss-only boards instead use their exact terminal Fold or All-in value to anchor the published relative losses. Current exact coverage is 400 of 441 boards across the nine supported pack families; the remaining 41 sampled-turn boards report reason: "partial_turn_fanout" and retain their original fields rather than estimating hidden continuations.