{"$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://riverroom.reretech.com/api/ai/v1/schema", "title": "RiverRoom AI decision request v1", "type": "object", "additionalProperties": false, "required": ["protocol", "request_id", "table_id", "hand_number", "seat", "version", "deadline_at", "legal_actions", "observation"], "properties": {"protocol": {"const": "riverroom.ai.v1"}, "request_id": {"type": "string", "maxLength": 100}, "table_id": {"type": "string", "pattern": "^[A-Z2-9]{8}$"}, "hand_number": {"type": "integer", "minimum": 1}, "seat": {"type": "integer", "minimum": 0, "maximum": 5}, "version": {"type": "integer", "minimum": 0}, "deadline_at": {"type": "number"}, "legal_actions": {"type": "object", "additionalProperties": false, "required": ["fold", "check", "call", "raise"], "properties": {"fold": {"type": "boolean"}, "check": {"type": "boolean"}, "call": {"type": "integer", "minimum": 0}, "raise": {"oneOf": [{"type": "null"}, {"type": "object", "additionalProperties": false, "required": ["min", "max", "semantics"], "properties": {"min": {"type": "integer", "minimum": 1}, "max": {"type": "integer", "minimum": 1}, "semantics": {"const": "street_total"}}}]}}}, "observation": {"type": "object", "additionalProperties": false, "required": ["street", "button", "blinds", "big_blind", "board", "pot", "pots", "players", "hole_cards", "actions"], "properties": {"street": {"enum": ["preflop", "flop", "turn", "river"]}, "button": {"type": "integer", "minimum": 0, "maximum": 5}, "blinds": {"type": "object", "required": ["small", "big"], "properties": {"small": {"type": "integer"}, "big": {"type": "integer"}}}, "big_blind": {"type": "integer", "minimum": 2}, "board": {"type": "array", "maxItems": 5, "items": {"$ref": "#/$defs/card"}}, "pot": {"type": "integer", "minimum": 0}, "pots": {"type": "array", "items": {"type": "object", "required": ["amount", "eligible"], "properties": {"amount": {"type": "integer", "minimum": 0}, "eligible": {"type": "array", "items": {"type": "integer"}}}}}, "players": {"type": "array", "minItems": 2, "maxItems": 6, "items": {"type": "object", "additionalProperties": false, "required": ["seat", "stack", "bet", "folded", "all_in"], "properties": {"seat": {"type": "integer", "minimum": 0, "maximum": 5}, "stack": {"type": "integer", "minimum": 0}, "bet": {"type": "integer", "minimum": 0}, "folded": {"type": "boolean"}, "all_in": {"type": "boolean"}, "hole_cards": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"$ref": "#/$defs/card"}}}}}, "hole_cards": {"type": "array", "minItems": 2, "maxItems": 2, "items": {"$ref": "#/$defs/card"}}, "actions": {"type": "array", "items": {"type": "object", "additionalProperties": false, "required": ["seat", "type", "street", "paid"], "properties": {"seat": {"type": "integer"}, "type": {"enum": ["fold", "check", "call", "raise"]}, "street": {"enum": ["preflop", "flop", "turn", "river"]}, "paid": {"type": "integer", "minimum": 0}, "amount": {"type": "integer", "minimum": 1}}}}}}}, "$defs": {"card": {"type": "string", "pattern": "^[23456789TJQKA][cdhs]$"}}}