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-SourceNon-ProfitTournamentsPuzzlesBotsStreamingND-JSONAuthentication

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."}
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/lichess-game"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.