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.
View JSON Schema on GitHub

JSON Schema

lichess-game-schema.json Raw ↑
{
  "$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."}
      }
    }
  }
}