Lichess · Schema
Lichess Game
A single Lichess game as returned by the games API. Captures core metadata, players, clock, opening, and the move record.
ChessGamesOpen SourceNonprofitTournamentsPuzzlesBotsStreamingND-JSONOAuth
Properties
| Name | Type | Description |
|---|---|---|
| id | string | Short Lichess game identifier, typically eight characters. |
| rated | boolean | True if this is a rated game affecting player ratings. |
| variant | string | Chess variant played in this game. |
| speed | string | Time-control bucket for this game. |
| perf | string | Rating pool (perf) the game belongs to. |
| createdAt | integer | Game creation timestamp in milliseconds since the Unix epoch. |
| lastMoveAt | integer | Timestamp of the last move played, in milliseconds since the Unix epoch. |
| status | string | Final game status. |
| source | string | How the game was created (lobby, friend, ai, api, arena, swiss, position, import, etc.). |
| players | object | Players by color. |
| initialFen | string | Starting FEN. Present for variants or positional games where the start is not the standard initial position. |
| winner | string | Color of the winner if the game has a winner. |
| opening | object | Detected opening for the game. |
| moves | string | Space-separated list of moves in PGN SAN notation. Only present when requested in the export query. |
| pgn | string | Full PGN of the game. Only present when requested in the export query. |
| clock | object | Clock configuration. |
| daysPerTurn | integer | Correspondence days per turn (only set for correspondence games). |
| tournament | string | ID of the parent Arena tournament if the game is part of one. |
| swiss | string | ID of the parent Swiss tournament if the game is part of one. |
| analysis | array | Per-ply Stockfish evaluation when computer analysis has been requested. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/lichess/main/json-schema/lichess-game-schema.json",
"title": "Lichess Game",
"description": "A single Lichess game as returned by the games API. Captures core metadata, players, clock, opening, and the move record.",
"type": "object",
"required": ["id", "rated", "variant", "speed", "perf", "createdAt", "status"],
"properties": {
"id": {
"type": "string",
"description": "Short Lichess game identifier, typically eight characters."
},
"rated": {
"type": "boolean",
"description": "True if this is a rated game affecting player ratings."
},
"variant": {
"type": "string",
"description": "Chess variant played in this game.",
"enum": ["standard", "chess960", "crazyhouse", "antichess", "atomic", "horde", "kingOfTheHill", "racingKings", "threeCheck", "fromPosition"]
},
"speed": {
"type": "string",
"description": "Time-control bucket for this game.",
"enum": ["ultraBullet", "bullet", "blitz", "rapid", "classical", "correspondence"]
},
"perf": {
"type": "string",
"description": "Rating pool (perf) the game belongs to."
},
"createdAt": {
"type": "integer",
"description": "Game creation timestamp in milliseconds since the Unix epoch."
},
"lastMoveAt": {
"type": "integer",
"description": "Timestamp of the last move played, in milliseconds since the Unix epoch."
},
"status": {
"type": "string",
"description": "Final game status.",
"enum": ["created", "started", "aborted", "mate", "resign", "stalemate", "timeout", "draw", "outoftime", "cheat", "noStart", "unknownFinish", "variantEnd"]
},
"source": {
"type": "string",
"description": "How the game was created (lobby, friend, ai, api, arena, swiss, position, import, etc.)."
},
"players": {
"type": "object",
"description": "Players by color.",
"properties": {
"white": {"$ref": "#/$defs/player"},
"black": {"$ref": "#/$defs/player"}
}
},
"initialFen": {
"type": "string",
"description": "Starting FEN. Present for variants or positional games where the start is not the standard initial position."
},
"winner": {
"type": "string",
"description": "Color of the winner if the game has a winner.",
"enum": ["white", "black"]
},
"opening": {
"type": "object",
"description": "Detected opening for the game.",
"properties": {
"eco": {"type": "string", "description": "ECO code."},
"name": {"type": "string", "description": "Opening name."},
"ply": {"type": "integer", "description": "Number of plies that match the named opening."}
}
},
"moves": {
"type": "string",
"description": "Space-separated list of moves in PGN SAN notation. Only present when requested in the export query."
},
"pgn": {
"type": "string",
"description": "Full PGN of the game. Only present when requested in the export query."
},
"clock": {
"type": "object",
"description": "Clock configuration.",
"properties": {
"initial": {"type": "integer", "description": "Initial time in seconds."},
"increment": {"type": "integer", "description": "Increment per move in seconds."},
"totalTime": {"type": "integer", "description": "Estimated total game time in seconds."}
}
},
"daysPerTurn": {
"type": "integer",
"description": "Correspondence days per turn (only set for correspondence games)."
},
"tournament": {
"type": "string",
"description": "ID of the parent Arena tournament if the game is part of one."
},
"swiss": {
"type": "string",
"description": "ID of the parent Swiss tournament if the game is part of one."
},
"analysis": {
"type": "array",
"description": "Per-ply Stockfish evaluation when computer analysis has been requested.",
"items": {
"type": "object",
"properties": {
"eval": {"type": "integer", "description": "Centipawn evaluation from White's perspective."},
"best": {"type": "string", "description": "Best move in UCI notation."},
"variation": {"type": "string", "description": "Principal variation in SAN."},
"judgment": {
"type": "object",
"properties": {
"name": {"type": "string", "enum": ["Inaccuracy", "Mistake", "Blunder"]},
"comment": {"type": "string"}
}
},
"mate": {"type": "integer", "description": "Mate-in-N indicator."}
}
}
}
},
"$defs": {
"player": {
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"id": {"type": "string"},
"name": {"type": "string"},
"title": {"type": "string"},
"patron": {"type": "boolean"}
}
},
"aiLevel": {"type": "integer", "description": "Stockfish level when the player is the AI."},
"rating": {"type": "integer"},
"ratingDiff": {"type": "integer", "description": "Rating change applied after the game."},
"provisional": {"type": "boolean"},
"berserk": {"type": "boolean", "description": "True if the player berserked in an Arena game."},
"team": {"type": "string", "description": "Team identifier when the game is part of a Team Battle Arena."}
}
}
}
}