Export games by user
Download all games of any user in PGN or ndjson format. Games are sorted by reverse chronological order (most recent first).Endpoint
Path Parameters
The username of the player whose games to export
Query Parameters
Download games played since this timestamp (in milliseconds)
Download games played until this timestamp (in milliseconds)
Maximum number of games to download. Leave empty to download all games.
Filter games by opponent username
Download only rated (
true) or casual (false) games. Leave empty for both.Filter by speed or variant. Multiple values can be specified, separated by commas.Examples:
blitz,rapid,classical, bullet, ultraBullet, chess960, crazyhouse, antichess, atomic, horde, kingOfTheHill, racingKings, threeCheckFilter by player color:
white or blackDownload only games with computer analysis available (
true) or without (false). Leave empty for both.Include ongoing games. Ongoing games will be omitted by default.
Include finished games. Set to
false to only get ongoing games.Include the PGN moves
Include the full PGN within the JSON response (only for ndjson format)
Include the PGN tags
Include clock comments in the PGN moves when available. This makes the response significantly larger.
Include analysis evaluation comments in the PGN when available
Include accuracy percent of each player when available
Include the opening name
Include the division data (plies of opening, middlegame, endgame)
Insert textual annotations in the PGN about the opening, analysis variations, mistakes, and game termination
Sort order:
dateAsc (oldest first) or dateDesc (newest first)Request Headers
Specify the response format:
application/x-chess-pgnorapplication/pgnfor PGN format (default)application/x-ndjsonfor newline-delimited JSON
Example Requests
Download all blitz games as PGN
Download rated games against a specific opponent
Download recent games with analysis
Response Formats
PGN Format
WhenAccept: application/x-chess-pgn is specified, games are returned in standard PGN format:
NDJSON Format
WhenAccept: application/x-ndjson is specified, each game is a JSON object on a separate line:
NDJSON Response Fields
Game ID
Whether the game was rated
Game variant (standard, chess960, crazyhouse, etc.)
Game speed (ultraBullet, bullet, blitz, rapid, classical, correspondence)
Performance type used for rating
Game creation timestamp in milliseconds
Timestamp of the last move in milliseconds
Game status:
created, started, aborted, mate, resign, stalemate, timeout, draw, outoftime, cheat, noStart, unknownFinish, variantEndInformation about both players
Game winner:
white or black (absent for draws)Opening information (if
opening=true)Game moves in UCI or SAN format (if
moves=true)Full PGN of the game (if
pgnInJson=true)Clock configuration
Tournament ID if the game was part of a tournament
Game phase division (if
division=true)Rate Limiting
Rate limits depend on:- Whether you’re authenticated
- Whether you’re requesting your own games
- Your OAuth token’s rate limit
- Whether you’re verified
- Authenticated users (own games): ~60 games per second
- OAuth requests: ~30 games per second
- Anonymous requests: ~25 games per second
Streaming Best Practices
- Process line by line: Don’t load the entire response into memory
- Handle disconnections: Implement retry logic with exponential backoff
- Use compression: The server supports gzip compression
- Respect rate limits: Space out your requests appropriately

