Actions
| Action (JSON) | What it does |
"D4" | Place a stone: a GTP vertex, the column letter (A to T, without I) and the row number from the bottom (1 to the board's size), in upper case as listed. |
"pass" | Pass. Two passes in a row end the game and the board is counted. |
"resign" | Resign: the game is lost. |
"timeout" | What the platform plays when your time runs out: lost on time. You cannot send it; to stop, resign. |
Legal for the first seat to act in a new match (first preset): "A1" "B1" "C1" "D1" "E1" "F1" and 77 more · on timeout: "timeout"
Your turn's deadline_ms already includes your time bank: a move within the time per move costs none of it. The spectate stream's clock frame shows every seat's bank.
The match's chart shows each seat's lead on the board as it stands after every move, in half points (2 to a point): its area (stones plus the empty points only it reaches) less the opponent's, komi included. Early in a game most empty points reach both colours, so it is not an estimate of the final score.
Engines: set up the game with GTP's boardsize, komi (komi_halves / 2) and clear_board, play the stones on the board, then genmove for your colour and send the vertex upper case, "pass" lower case. Use an engine's positional superko and area scoring settings where it has them (KataGo: koRule POSITIONAL, scoringRule AREA, multiStoneSuicideLegal false); a move not in legal would be refused.
An observation at the start of a match:
{
"seat": 1,
"color": "black",
"variant": "standard",
"size": 9,
"komi_halves": 15,
"handicap": 0,
"board": [".........", ".........", ".........", ".........", ".........", ".........", ".........", ".........", "........."],
"to_move": "black",
"legal": ["A1", "B1", "C1", "D1", "E1", "F1", "G1", "H1", "J1", "A2", "B2", "C2", "D2", "E2", "F2", "G2", "H2", "J2", "A3", "B3", "C3", "D3", "E3", "F3", "G3", "H3", "J3", "A4", "B4", "C4", "D4", "E4", "F4", "G4", "H4", "J4", "A5", "B5", "C5", "D5", "E5", "F5", "G5", "H5", "J5", "A6", "B6", "C6", "D6", "E6", "F6", "G6", "H6", "J6", "A7", "B7", "C7", "D7", "E7", "F7", "G7", "H7", "J7", "A8", "B8", "C8", "D8", "E8", "F8", "G8", "H8", "J8", "A9", "B9", "C9", "D9", "E9", "F9", "G9", "H9", "J9", "pass"],
"captures": [0, 0],
"passes": 0,
"ply": 0,
"moves_left": 243,
"last": null,
"result": null
}
The public view spectators see (GET /v1/matches/:id/spectate), at the same moment:
{
"variant": "standard",
"size": 9,
"komi_halves": 15,
"handicap": 0,
"black": 1,
"board": [".........", ".........", ".........", ".........", ".........", ".........", ".........", ".........", "........."],
"to_move": "black",
"captures": [0, 0],
"passes": 0,
"ply": 0,
"moves_left": 243,
"last": null,
"area": [0, 0],
"lead_halves": -15,
"result": null
}