Portal
Sign In Console

Strategy Grid

While /lookup answers "what should this player do with their hand", /strategy_grid answers the same question for every possible starting hand at once: one request returns the full grid — the 169 starting-hand classes (13×13 pairs / suited / offsuit) with their strategies, EVs, and presentation menus, down to the individual combos.

Examples on this page use a No Limit Hold'em cash game.

Endpoint

Endpoint: POST /strategy_grid

curl --location '<glue-URL>/strategy_grid' \
--header 'Content-Type: application/json' \
--header 'Authorization: <Auth-TOKEN>' \
--data '{ ... }'

The actual <glue-URL> for your environment (dev / stg / prod) and the <Auth-TOKEN> are provided separately — the same ones you use for /lookup. As with /lookup, engine soft failures can be reported inside an HTTP 200 body via the error / error_code response fields.

Request

The request body is the same as for /lookup: request_id, the hand object, and request_profile. Two things change in practice:

  • No hole_cards. The grid computes every starting hand, so no player carries hole cards.
  • The grid is computed for the player whose turn it is at the end of actions.entries (returned as currentPlayer in the response).

request_profile works exactly as on /lookup — the same single field applies the same predefined configuration, with the same override rules, and its effects carry over to the grid: probabilities are thresholded, results are deterministic, every action carries its ev_rank label, and each hand gets the reduced presentation menu. See B2C Features for the full parameter walkthrough.

The same 8-handed spot used on the B2C Features page (straddle on seat 2, 50-chip ante, preflop, seat 3 to act):

curl --location '<glue-URL>/strategy_grid' \
--header 'Content-Type: application/json' \
--header 'Authorization: <Auth-TOKEN>' \
--data '{
  "request_id": "grid-demo",
  "hand": {
    "gameuuid": "3b-0.5_8p_game",
    "game_type": "nlhe",
    "game_mode_code": "normal",
    "players": [
      { "seat_no": 0, "stack": 46720 },
      { "seat_no": 1, "stack": 32580 },
      { "seat_no": 2, "stack": 27000 },
      { "seat_no": 3, "stack": 40368 },
      { "seat_no": 4, "stack": 105250 },
      { "seat_no": 5, "stack": 9700 },
      { "seat_no": 6, "stack": 35440 },
      { "seat_no": 7, "stack": 13550 }
    ],
    "big_blind": 100,
    "ante": 50,
    "dealer_seat": 7,
    "sb_seat": 0,
    "bb_seat": 1,
    "straddle_seat": 2,
    "actions": { "entries": [] }
  },
  "request_profile": "<client_profile>"
}'

Response

{
  "hands": [ <Hand-class> × 169 ],
  "actionLabels": [ <Action-label> ],
  "currentPlayer": <acting-seat>,
  "numCombos": 1326,
  "numBoardCards": 0,
  "overallReach": 1.0,
  "supportScore": <0-to-1>
}
FieldMeaning
handsOne entry per starting-hand class (169 for Hold'em) — see below.
actionLabelsThe action menu of the spot, shared by all hands — see below.
currentPlayerThe seat the grid was computed for.
numCombosNumber of concrete combos covered (1326 preflop).
numBoardCardsBoard cards dealt so far at the requested spot.
overallReachHow much of the acting player's full range reaches this spot (1.0 preflop).
supportScoreModel confidence that it covers this spot, 0 to 1.

The response also carries diagnostic members not listed here.

Action labels

actionLabels describes the spot's action menu once, so the per-hand data can stay compact. Each entry:

{
  "name": "raise 5.0 BB",
  "amount": 500,
  "amountBb": 5.0,
  "potRatio": 0.3157894736842105,
  "strategy": 0.10491631517209216
}
FieldMeaning
nameHuman-readable action label ("fold", "call 2.0 BB", "raise 5.0 BB", "all-in 403.2 BB").
amountThe action's chip amount (null for fold).
amountBbThe same amount in big blinds.
potRatioBet size as a ratio of the pot (null for fold/call).
strategyHow often the whole range takes this action at the spot.

In the example spot, the range-level strategy reads: fold 76.9%, call 0.02%, raise to 5 bb 10.5%, raise to 7 bb 12.6% — the acting player opens about a quarter of all hands.

Hand classes

Each hands[] entry describes one starting-hand class:

{
  "handName": "TT",
  "reach": 1.0,
  "ev": 5.747151374816894,
  "actions": [
    { "actionName": "raise5.0", "probability": 0.5339687181136681, "ev": 5.747151374816895 },
    { "actionName": "raise7.0", "probability": 0.466031281886332, "ev": 5.747151374816895 }
  ],
  "reduced_actions": [
    { "actionName": "fold", "probability": 0.0, "ev": 0.0,
      "ev_rank": "EVR_2", "reduced_action_sizing": 0.0 },
    { "actionName": "call", "probability": 0.0, "ev": 4.7471513748168945,
      "ev_rank": "EVR_3", "reduced_action_sizing": 1.0 },
    { "actionName": "raise5.0", "probability": 0.5274196517442273, "ev": 5.7471513748168945,
      "ev_rank": "EVR_4", "reduced_action_sizing": 2.5 },
    { ... }
  ],
  "combos": [
    {
      "combo": "TcTd",
      "reach": 1.0,
      "actions": [
        {
          "actionName": "fold",
          "probability": 0.0,
          "ev": 0.0,
          "ev_rank": "EVR_2"
        },
        {
          "actionName": "raise5.0",
          "probability": 0.533968718113668,
          "ev": 5.7471513748168945,
          "ev_rank": "EVR_4"
        },
        { ... }
      ],
      "reduced_actions": [ ... ]
    },
    { ... }
  ],
  "supportScore": 1.0
}
FieldMeaning
handNameThe hand class: "TT", "AKs", "72o", ...
reachHow often this hand reaches the requested spot (1.0 preflop; below 1.0 postflop, when part of it was folded or raised earlier).
evThe class EV in big blinds under its strategy.
actionsThe actions this class actually plays — only entries above the probability threshold, with their probability and EV.
reduced_actionsThe same presentation menu /lookup returns, computed per hand class: the selected tier's entries with ev_rank labels and the reduced_action_sizing display size — preflop a multiplier of the bet being raised over (this spot has a 2 bb straddle, hence 2.5 for the raise to 5 bb), postflop a percentage of the pot. See Reading the Response. Use this for anything shown to players.
combosPer-combo breakdown: each concrete combo ("TcTd") with its own reach, full action list (every menu entry with probability, EV, and ev_rank), and its own reduced_actions.
supportScoreModel confidence for this hand class.

The ev_rank labels follow the same scale as on /lookup — see Reading the Response on the B2C Features page.

Reading the example: TT opens 100% of the time, mixing a raise to 5 bb (53.4%) and a raise to 7 bb (46.6%), both labeled EVR_4 and worth +5.75 bb — while a class like 72o returns a single entry, fold at 100%. The compact class-level actions list carries just what the hand plays; the reduced_actions and combos carry the full detail when you need it.

Notes

  • All B2C features apply per hand — strategy_min_threshold trims the class-level actions, reduced_actions_tier shapes each hand's presentation menu, show_labels provides the ev_rank labels — and request_profile follows the same silent-no-match rule as on /lookup: a misspelled profile name applies no defaults and raises no error.
  • The grid response can be large (169 classes × combos). Request it per decision point, not per player action batch.