For AI agents: the documentation index is at https://www.chessigma.com/llms.txt, and this page is available as Markdown at https://www.chessigma.com/developers/api/game-analysis.md.
Developers / APISubmit a chess game as PGN to get a link where it can be analyzed, then read the game back by its ID.
https://www.chessigma.com/public-api/v1/gameStores a chess game and returns a URL to view and analyze it on Chessigma. Duplicate games (same players + date) are deduplicated and return the existing gameId.
pgn string, 1 to 10000 characters, requiredPGN text. Must include [White], [Black], [Result] tags and a valid moves section.
curl -X POST https://www.chessigma.com/public-api/v1/game -H "Content-Type: application/json" -d '{"pgn":"[White \"Alice\"]\n[Black \"Bob\"]\n[Result \"1-0\"]\n\n1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 1-0"}'201 Game submitted
{
"gameId": "f222a278-3ed5-46c5-bd14-d0af7fa92e3d",
"url": "https://www.chessigma.com/games/f222a278-3ed5-46c5-bd14-d0af7fa92e3d",
"status": "submitted",
"message": "Successfully saved 1 game"
}gameId string (uuid)The game's ID. Pass it to GET /game/{gameId}.
url string (uri)Open this to view and analyze the game.
status string, always submittedmessage string400 Invalid or missing PGN, or missing required tags429 Rate limit exceeded (30 req/min global)500 Internal server errorhttps://www.chessigma.com/public-api/v1/game/{gameId}Returns game metadata and analysis. Because analysis runs client-side, this returns data only if a user has already opened the game page and triggered analysis. Only games submitted via this public API are readable here.
gameId string (uuid), requiredUUID returned by POST /game.
curl https://www.chessigma.com/public-api/v1/game/f222a278-3ed5-46c5-bd14-d0af7fa92e3d200 Game analysis
{
"gameId": "f222a278-3ed5-46c5-bd14-d0af7fa92e3d",
"status": "completed",
"analysis": {
"game": {
"id": "f222a278-3ed5-46c5-bd14-d0af7fa92e3d",
"pgn": "[White \"Alice\"]\n[Black \"Bob\"]\n[Result \"1-0\"]\n\n1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 1-0",
"white_username": "alice",
"black_username": "bob",
"white_rating": 0,
"black_rating": 0,
"white_result": "win",
"black_result": "loss",
"time_class": "correspondence",
"time_control": "unlimited",
"source": "public-api"
}
},
"metadata": {
"analysisCompletedAt": "2026-10-26T09:14:02.511Z",
"version": "1.0"
}
}gameId string (uuid)status string, always completedanalysis.game.id stringanalysis.game.pgn stringanalysis.game.white_username string or nullFrom the PGN's White tag, in lowercase.
analysis.game.black_username string or nullFrom the PGN's Black tag, in lowercase.
analysis.game.white_rating integer or nullFrom the PGN's WhiteElo tag. 0 or null when the PGN has none.
analysis.game.black_rating integer or nullFrom the PGN's BlackElo tag. 0 or null when the PGN has none.
analysis.game.white_result string or nullwin, loss or draw.
analysis.game.black_result string or nullwin, loss or draw.
analysis.game.time_class string or nullFrom the PGN's TimeControl tag: ultraBullet, bullet, blitz, rapid, classical, or correspondence when there is no clock.
analysis.game.time_control string or nullSeconds plus increment, such as 300+0, or unlimited.
analysis.game.source stringpublic-api for games submitted through this API.
metadata.analysisCompletedAt string (date-time)metadata.version string400 Invalid game ID format (must be a UUID)403 Game exists but was not submitted via the public API404 Game not found or analysis not yet available429 Rate limit exceeded500 Internal server errorerror field says what went wrong.