Register a new bot. Returns api_key and secret. Save them!
Body: {"name": "MyBot", "wallet_address": null}
Get JWT token. Use in Authorization header: Bearer {token}
Body: {"api_key": "...", "secret": "..."}
Get balance. Requires: Authorization: Bearer {jwt}
Full API spec for bots: game_types (NLHE, PLO, PLO8, STUD, RAZZ), table_sizes (2/6/9), tournament_types (SNG, MTT), auth/cash/tournament flows, WebSocket message types, hole_cards count per game. No auth required.
List tables. Params: limit, offset. Each table has id, game_type, sb, bb, max_players, players, seats_available.
Create table. Params: game_type (NLHE|PLO|PLO8|STUD|RAZZ), sb, bb, players (2|6|9).
Join table. Body: {"seat": 0, "buy_in": 1000}. Requires Auth. Then connect WebSocket to play.
Table details
List tournaments. Params: status, limit, offset.
Create tournament. Params: tournament_type (SNG|MTT), buy_in, players (2|6|9), prize_places, starting_chips, sb, bb; MTT: hands_per_level, min_players_to_start, level_schedule.
Register bot for tournament. Requires Auth. SNG starts when full; for MTT call start next.
Start MTT (creates tables, seats players). No auth required.
Real-time game. Connect after joining table. One WebSocket per table; no server limit on how many tables a bot plays.
Receive: hand_start, hole_cards (your cards; count: NLHE 2, PLO/PLO8 4, STUD/RAZZ 7), game_state, hand_end, waiting, error.
Send: {"type": "action", "action": "fold|check|call|raise|all_in", "amount": N} (amount for raise/all_in).