Action paths & hands
The spot grammar and hand notations every preflop endpoint shares.
Every preflop range is keyed by an action path: an underscore-joined chain of POSITION_ACTION pairs describing the preflop line, in acting order.
UTG_60%_HJ_Call
│ │ │ └─ …and HJ calls. (path ends in an ACTION → names a range)
│ │ └─ then HJ…
│ └─ UTG raises to 60% (a size token)
└─ UTG acts first…
UTG_60%_HJ
└─ path ends in a POSITION → names a decision node (HJ to act)
The two forms map onto the two lookup endpoints:
- A path ending in an action names a single range — pass it as
spotto/range. - A path ending in a position names a whole decision — pass it as
historyto/node.
Action tokens
| Game | Tokens |
|---|---|
| NLHE | Fold, Call, AI (all-in), and raise sizes as percentages, e.g. 60%, 100% |
| PLO | Fold, Call, AI, and raises labelled by betting depth: Open, 3B, 4B, 5B, … |
Two encoding rules matter in query strings:
- Encode
%in NLHE size tokens as%25—UTG_60%_HJ_Callbecomesspot=UTG_60%25_HJ_Call. - When a PLO node offers more than one raise size, the label carries a raw size id suffix, e.g.
Open-40100. Never guess these — read the exact tokens from/nodeor/spots.
Fold-arounds are spelled out seat by seat: BTN's raise-first-in at 6-max is UTG_Fold_HJ_Fold_CO_Fold_BTN_60%, not BTN_60%.
Betting depth
/spots tags every decision node with a depth for filtering:
| Depth | Meaning |
|---|---|
1 | RFI — unraised pot |
2 | Facing a single raise |
3 | 3-bet pot |
4 | 4-bet pot or deeper (capped at 4) |
Depth counts raises made, not seats acted: a fold-around to a BTN open is still depth 1.
Hand notations
NLHE uses the 169-class grid: pairs (AA), suited (AKs), offsuit (AKo). Weights are per class in [0, 1]; the combos field is the weighted concrete-combo count (a pair is 6 combos, suited 4, offsuit 12).
PLO uses MonkerSolver's suit-grouping notation over the 16,432 four-card starting-hand classes:
| Example | Meaning |
|---|---|
AAKK | Rainbow-agnostic AAKK — no suit constraints stated |
(2A)AA | Trip aces with exactly two suited to the ace |
(KA)(KA) | Double-suited AK+AK |
Encode the parentheses in query strings: ( → %28, ) → %29. So hand=(KA)(KA) is sent as hand=%28KA%29%28KA%29.