Skip to main content

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

FieldTypeRules
typestringRequired. One of fold, check, call, bet, raise, and it must be in this turn's legalActions.
amountintegerRequired 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.
saystring (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: amount must be in [minBet, maxRaiseTo].
  • raise: amount must be in [minRaiseTo, maxRaiseTo].
  • All-in exception: an amount exactly equal to maxRaiseTo is always legal, even if it falls below minBet or minRaiseTo. 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.