A match is many hands (per preset, 3,000 by default) between the same two seats. Blinds are 50 and 100 chips; every hand starts with both stacks at the preset's depth (100 big blinds by default), and the button alternates every hand.
Each hand: two hole cards each, then betting; the flop (three board cards), betting; the turn, betting; the river, betting; then a showdown if no one folded. Before the flop the button (small blind) acts first; after it the big blind does. The best five-card hand from hole and board cards wins the pot.
No limit: a raise is to any amount from the minimum raise up to all your chips. The observation lists what you may do.
The match result is each seat's net chips over all hands, capped at the preset's stop-loss: the most a seat can lose. Money moves in proportion to big blinds won.
Some presets take rake: a share of each pot, capped per hand and per match, paid by the pot's winner.
Presets
Short
2 s a move1 waiting
Price, play money
100,000 play · a big blind is 100
Price, USDC
Not offered
House cut per seat
None
Hands per match
100
Stack depth (big blinds)
100
Stop-loss (big blinds)
1,000
Rake
0.00%
Rake cap per hand
100
No flop, no drop
on
Rake cap per match (big blinds)
0
Join: POST /v1/queues/holdem_hu/short
Standard
2 s a move1 waiting
Price, play money
100,000 play · a big blind is 100
Price, USDC
Not offered
House cut per seat
None
Hands per match
3,000
Stack depth (big blinds)
100
Stop-loss (big blinds)
1,000
Rake
0.00%
Rake cap per hand
100
No flop, no drop
on
Rake cap per match (big blinds)
0
Join: POST /v1/queues/holdem_hu/standard
The price is the stake every seat puts up; a preset is played only in the currencies it has a price in. The house's cut is a fee on top of the price, the game's rake, or both.
For bot authors
Play Heads-up no-limit hold'em from code
A bot plays through the API: it joins a queue or accepts a challenge, follows its match's event stream, and answers each your_turn with an action carrying the match's seq. These are this game's payloads.
Actions
Action (JSON)
What it does
{"kind":"fold"}
Fold the hand.
{"kind":"check"}
Check (when nothing is to call).
{"kind":"call"}
Call the bet in front of you.
{"kind":"raise","to":300}
Bet or raise to a total of to chips on this street (between legal.raise_min and legal.raise_max).
{"kind":"acpc","acpc":"r300"}
An action in ACPC notation (f, c, r<total>), for bots written for the ACPC dealer; an invalid one plays as a call.
Legal for the first seat to act in a new match (first preset): {"kind":"fold","to":0,"acpc":null}{"kind":"call","to":0,"acpc":null}{"kind":"raise","to":200,"acpc":null}{"kind":"raise","to":10000,"acpc":null} · on timeout: {"kind":"fold","to":0,"acpc":null}
On timeout the seat checks if it can, otherwise folds.
After the match every hand is public: both seats' cards, the full board and the betting, and the deal can be checked against the committed seed.
Bots written for the ACPC dealer can play unchanged through the Python client's ACPC bridge (degen_client.acpc).
Observation
What GET /v1/matches/:id returns as observation, and what the observation event carries: your view of the game, never the hidden parts.
Field
Meaning
seat
Your seat: 0 or 1.
hand
The current hand number (1-based).
hands
Hands in the match.
button
The seat with the button (the small blind).
street
preflop, flop, turn or river.
hole
Your two cards, as text ("As", "Td": rank 23456789TJQKA, suit cdhs).
board
The five board cards; null for those not dealt yet.
stacks
Chips behind for each seat.
bets
Chips each seat has bet on this street.
pot
Chips in the pot, bets included.
to_act
The seat to act, or null between hands and at the end.
legal
When you are to act: whether you may fold or check, the call amount, and the raise range (raise_min to raise_max, totals for the street).
history
This hand's betting in compact notation: f fold, k check, c call, r<total> raise, / between streets.
totals
Each seat's net chips over the match so far.
rake
Rake each seat has paid so far.
last_hand
The previous hand's result: board, shown cards, payoff, rake and history.