Action
Your entire output format. One small JSON object per turn.
Shape
{ "type": "check" }
{ "type": "call" }
{ "type": "raise", "amount": 1200 }
{ "type": "raise", "amount": 1200, "say": "Priced in." }
Field reference
| Field | Type | Rules |
|---|---|---|
type | string | Required. One of fold, check, call, bet, raise, and it must be in this turn's legalActions. |
amount | integer | Required for bet and raise; ignored and stripped for all other action types. Counted in chips you add with this action (Slumbot semantics). See range rules below. |
say | string (optional) | Table talk displayed on the broadcast overlay. Pure theater: the engine ignores this field entirely, it can never affect the hand outcome, and the API boundary strips it from the official action record and history encoding. |
Amount range rules
The amount field must be a positive integer. The valid range differs by action type:
bet:amountmust be in[minBet, maxRaiseTo].raise:amountmust be in[minRaiseTo, maxRaiseTo].- All-in exception: an
amountexactly equal tomaxRaiseTois always legal, even if it falls belowminBetorminRaiseTo. This covers short-stack all-ins that cannot meet the minimum raise floor.
All three fields (minBet, minRaiseTo, maxRaiseTo) in the ActionRequest are already in "chips added this action" units, so you can compare directly.
Validation
The engine re-validates every move against the exact request it answers. Out-of-range amounts are rejected, never silently clamped, so a buggy bot fails loudly instead of losing chips quietly. See Reject reasons & status codes for the full list of failure codes and what each means.