Spin Strategy Endpoint
Spin uses the same holdem pipeline with game_mode_code: "spin". It routes to a dedicated ONNX model (obs 703) for short-stacked Spin & Go format. Unlike AoF (which uses a precomputed CFR table), Spin uses standard ONNX inference with the full action space.
Endpoint
Endpoint: POST /lookup
The Spin mode uses the same endpoint as the standard holdem API. The request is routed to the Spin handler by setting game_mode_code: "spin" in the hand object.
For detailed information about request and response fields, please refer to No Limit Holdem API documentation page.
Example: 3-Player, BB facing BTN raise + SB fold
curl --location '<your-base-url>/lookup' \
--header 'Content-Type: application/json' \
--header 'Authorization: <your-api-key>' \
--data '{
"request_id": "1",
"hand": {
"gameuuid": "spin_demo_3p",
"game_type": "nlhe",
"game_mode_code": "spin",
"players": [
{
"seat_no": 0,
"stack": 800,
"uid": "btn_player",
"win_amount": 0,
"rake_amount": 0
},
{
"seat_no": 1,
"stack": 800,
"uid": "sb_player",
"win_amount": 0,
"rake_amount": 0
},
{
"seat_no": 2,
"stack": 800,
"uid": "bb_player",
"hole_cards": "AcKd",
"win_amount": 0,
"rake_amount": 0
}
],
"actions": {
"entries": [
{
"action": "raise",
"amount": 200
},
{
"action": "fold"
}
],
"pot_sizings": false,
"big_blind_sizings": false
},
"big_blind": 100,
"ante": 0,
"dealer_seat": 0,
"sb_seat": 1,
"bb_seat": 2,
"roomid": "spin_demo_room",
"straddle_seat": -1,
"post_seats": [],
"small_blind": 50
},
"hints": [],
"services": [
"RL"
],
"mode": "bot"
}'Response
Spin returns the same rich StrategyResponse format as cash games (request, solution_information, strategy.actions[], etc.), with the full action space available (fold, call, raise, allin).
Example response:
{
"flags": [],
"request": {
"hand": {
"actions": {
"big_blind_sizings": false,
"entries": [
{
"action": "raise",
"amount": 200
},
{
"action": "fold"
}
],
"pot_sizings": false
},
"ante": 0,
"bb_seat": 2,
"big_blind": 100,
"dealer_seat": 0,
"game_mode_code": "spin",
"game_type": "nlhe",
"gameuuid": "spin_demo_3p",
"players": [
{
"rake_amount": 0,
"seat_no": 0,
"stack": 800,
"uid": "btn_player",
"win_amount": 0
},
{
"rake_amount": 0,
"seat_no": 1,
"stack": 800,
"uid": "sb_player",
"win_amount": 0
},
{
"hole_cards": "AcKd",
"rake_amount": 0,
"seat_no": 2,
"stack": 800,
"uid": "bb_player",
"win_amount": 0
}
],
"post_seats": [],
"roomid": "spin_demo_room",
"sb_seat": 1,
"small_blind": 50,
"straddle_seat": -1
},
"hints": [],
"mode": "bot",
"request_id": "1",
"services": [
"RL"
]
},
"solution_information": {
"bet_profile_config": {
"bet_profile": "no_profile_applied",
"bet_profile_config_id": -1,
"bet_size_mapping_result": "no_profile_applied",
"betsize_threshold": 0.75,
"called_pot": -1,
"is_open_raise": false,
"pot": -1
},
"build_date": "Feb 12 2026 04:57:49",
"coach_config": {
"status": "not_requested"
},
"obs_string": "[blinds=2|bb=100|ante=0|format=normal]r0p1 STATE:0:r200f:2c6c|AcKd|As7h:800|800|800:50|100|200",
"situation_key": {
"action_pot_seq": {
"big_blind_size": 100.0,
"big_blind_sizings": false,
"entries": [
{
"action": "raise",
"action_time": null,
"amount": 200,
"player_position": null,
"pot_ratio": 0.4,
"seat_no": 0
},
{
"action": "fold",
"action_time": null,
"amount": null,
"player_position": null,
"pot_ratio": null,
"seat_no": 1
}
],
"pot_sizings": true
},
"action_pot_seq_search": "r:f",
"bb_depth": 50.0,
"decision_action_pot_seq": {
"big_blind_size": 100.0,
"big_blind_sizings": false,
"entries": [
{
"action": "raise",
"action_time": null,
"amount": 200,
"player_position": null,
"pot_ratio": 0.4,
"seat_no": 0
}
],
"pot_sizings": true
},
"decision_action_pot_seq_search": "r",
"flop": "na",
"game_type": "cash__nlhe__8max_ante",
"players_bin": "3",
"street": "preflop"
},
"source": "rlserv:moe_703_spin",
"strategy_profile_config": {
"game_format": "no_profile_applied",
"matched_profile_name": "no_profile_applied",
"strategy_after_adjust": "no_profile_applied",
"strategy_before_adjust": "no_profile_applied"
},
"version": "2.0.0"
},
"strategy": {
"actions": [
{
"action": {
"action": "fold",
"action_time": null,
"amount": null,
"player_position": null,
"pot_size": null,
"seat_no": 2
},
"action_name": "f",
"action_seq": {
"entries": [
{
"action": "raise",
"amount": 200
},
{
"action": "fold"
},
{
"action": "fold",
"amount": null,
"seat_no": 2
}
]
},
"hand_ev": 0.0,
"hand_strategy": 1.919277333213722e-6
},
{
"action": {
"action": "call",
"action_time": null,
"amount": null,
"player_position": null,
"pot_size": null,
"seat_no": 2
},
"action_name": "c",
"action_seq": {
"entries": [
{
"action": "raise",
"amount": 200
},
{
"action": "fold"
},
{
"action": "call",
"amount": 100,
"seat_no": 2
}
]
},
"hand_ev": 1.991218328475952,
"hand_strategy": 0.00004059413539827697
},
{
"action": {
"action": "allin",
"action_time": null,
"amount": 800,
"player_position": null,
"pot_size": 1.3333333333333333,
"seat_no": 2
},
"action_name": "allin133",
"action_seq": {
"entries": [
{
"action": "raise",
"amount": 200
},
{
"action": "fold"
},
{
"action": "allin",
"amount": 800,
"seat_no": 2
}
]
},
"hand_ev": 4.3570637702941895,
"hand_strategy": 0.8099976758053241
},
{
"action": {
"action": "raise",
"action_time": null,
"amount": 400,
"player_position": null,
"pot_size": 0.4444444477558136,
"seat_no": 2
},
"action_name": "r44",
"action_seq": {
"entries": [
{
"action": "raise",
"amount": 200
},
{
"action": "fold"
},
{
"action": "raise",
"amount": 397,
"seat_no": 2
}
]
},
"hand_ev": 4.298931121826172,
"hand_strategy": 0.00026887861829060823
},
{
"action": {
"action": "raise",
"action_time": null,
"amount": 700,
"player_position": null,
"pot_size": 1.1111111640930176,
"seat_no": 2
},
"action_name": "r111",
"action_seq": {
"entries": [
{
"action": "raise",
"amount": 200
},
{
"action": "fold"
},
{
"action": "raise",
"amount": 704,
"seat_no": 2
}
]
},
"hand_ev": 4.3570637702941895,
"hand_strategy": 0.18969093216365365
}
],
"decision_action_seq": {
"big_blind_sizings": false,
"entries": [
{
"action": "raise",
"amount": 200
},
{
"action": "fold"
}
],
"pot_sizings": false
},
"suggested_action": {
"action": "allin",
"action_time": null,
"amount": 800,
"player_position": null,
"pot_size": 1.3333333333333333,
"seat_no": 2
}
},
"strategy_profile": null,
"warnings": []
}Key Fields
game_mode_code: "spin"— routes to the Spin handler (same holdem pipeline)source: "rlserv:moe_703_spin"— uses the dedicated Spin ONNX model- Players listed in acting order (BTN → SB → BB)
- Hero = player with
hole_cards actions.entries= actions taken before the hero's turn