openapi: 3.1.0 info: version: 2.0.144 title: Lichess.org API reference Account Puzzles API contact: name: Lichess.org API url: https://lichess.org/api email: contact@lichess.org x-logo: url: https://lichess1.org/assets/logo/lichess-pad12.svg license: name: AGPL-3.0-or-later url: https://www.gnu.org/licenses/agpl-3.0.txt description: '# Introduction Welcome to the reference for the Lichess API! Lichess is free/libre, open-source chess server powered by volunteers and donations. - Get help in the [Lichess Discord channel](https://discord.gg/lichess) - API demo app with OAuth2 login and gameplay: [source](https://github.com/lichess-org/api-demo) / [demo](https://lichess-org.github.io/api-demo/) - API UI app with OAuth2 login and endpoint forms: [source](https://github.com/lichess-org/api-ui) / [website](https://lichess.org/api/ui) - [Contribute to this documentation on Github](https://github.com/lichess-org/api) - Check out [Lichess widgets to embed in your website](https://lichess.org/developers) - [Download all Lichess rated games](https://database.lichess.org/) - [Download all Lichess puzzles with themes, ratings and votes](https://database.lichess.org/#puzzles) - [Download all evaluated positions](https://database.lichess.org/#evals) ## Endpoint All requests go to `https://lichess.org` (unless otherwise specified). ## Clients - [Python general API](https://github.com/lichess-org/berserk) - [MicroPython general API](https://github.com/mkomon/uberserk) - [Python general API - async](https://pypi.org/project/async-lichess-sdk) - [Python Lichess Bot](https://github.com/lichess-bot-devs/lichess-bot) - [Python Board API for Certabo](https://github.com/haklein/certabo-lichess) - [Java general API](https://github.com/tors42/chariot) - [JavaScript & TypeScript general API](https://github.com/devjiwonchoi/equine) - [LichessNET - C# API Wrapper](https://github.com/Rabergsel/LichessNET) - [.NET general API](https://github.com/Dblike/LichessSharp) ## Rate limiting All requests are rate limited using various strategies, to ensure the API remains responsive for everyone. Only make one request at a time. If you receive an HTTP response with a [429 status](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#429), you have exceded one of the rate limits. In most cases, waiting one minute before retrying will be sufficient, but some limits may require longer. Reduce your request frequency before retrying. ## Streaming with ND-JSON Some API endpoints stream their responses as [Newline Delimited JSON a.k.a. **nd-json**](https://github.com/ndjson/ndjson-spec), with one JSON object per line. Here''s a [JavaScript utility function](https://gist.github.com/ornicar/a097406810939cf7be1df8ea30e94f3e) to help reading NDJSON streamed responses. ## Authentication ### Which authentication method is right for me? [Read about the Lichess API authentication methods and code examples](https://github.com/lichess-org/api/blob/master/example/README.md) ### Personal Access Token Personal API access tokens allow you to quickly interact with Lichess API without going through an OAuth flow. - [Generate a personal access token](https://lichess.org/account/oauth/token) - `curl https://lichess.org/api/account -H "Authorization: Bearer {token}"` - [NodeJS example](https://github.com/lichess-org/api/tree/master/example/oauth-personal-token) ### Token Security - Keep your tokens secret. Do not share them in public repositories or public forums. - Your tokens can be used to make your account perform arbitrary actions (within the limits of the tokens'' scope). You remain responsible for all activities on your account. - Do not hardcode tokens in your application''s code. Use environment variables or a secure storage and ensure they are not shipped/exposed to users. Be especially careful that they are not included in frontend bundles or apps that are shipped to users. - If you suspect a token has been compromised, revoke it immediately. To see your active tokens or revoke them, see [your Personal API access tokens](https://lichess.org/account/oauth/token). ### Authorization Code Flow with PKCE The authorization code flow with PKCE allows your users to **login with Lichess**. Lichess supports unregistered and public clients (no client authentication, choose any unique client id). The only accepted code challenge method is `S256`. Access tokens are long-lived (expect one year), unless they are revoked. Refresh tokens are not supported. See the [documentation for the OAuth endpoints](#tag/OAuth) or the [PKCE RFC](https://datatracker.ietf.org/doc/html/rfc7636#section-4) for a precise protocol description. - [Demo app](https://lichess-org.github.io/api-demo/) - [Minimal client-side example](https://github.com/lichess-org/api/tree/master/example/oauth-app) - [Flask/Python example](https://github.com/lakinwecker/lichess-oauth-flask) - [Java example](https://github.com/tors42/lichess-oauth-pkce-app) - [NodeJS Passport strategy to login with Lichess OAuth2](https://www.npmjs.com/package/passport-lichess) #### Real life examples - [PyChess](https://github.com/gbtami/pychess-variants) ([source code](https://github.com/gbtami/pychess-variants)) - [Lichess4545](https://www.lichess4545.com/) ([source code](https://github.com/cyanfish/heltour)) - [English Chess Federation](https://ecf.octoknight.com/) - [Rotherham Online Chess](https://rotherhamonlinechess.azurewebsites.net/tournaments) ### Token format Access tokens and authorization codes match `^[A-Za-z0-9_]+$`. The length of tokens can be increased without notice. Make sure your application can handle at least 512 characters. By convention tokens have a recognizable prefix, but do not rely on this. ' servers: - url: https://lichess.org - url: https://lichess.dev - url: http://localhost:{port} variables: port: default: '8080' - url: http://l.org tags: - name: Puzzles description: 'Fetch and solve [puzzles](https://lichess.org/training), view your puzzle history and dashboard. Our collection of puzzles is in the public domain, you can [download it here](https://database.lichess.org/#puzzles). For a list of our [puzzle themes](https://lichess.org/training/themes) with their description, check out the [theme translation file](https://github.com/ornicar/lila/blob/master/translation/source/puzzleTheme.xml). ' paths: /api/puzzle/daily: get: operationId: apiPuzzleDaily summary: Get the daily puzzle description: 'Get the daily Lichess puzzle in JSON format. ' tags: - Puzzles security: [] responses: '200': description: The daily puzzle. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleAndGame' examples: default: $ref: '#/components/examples/puzzles-getDailyPuzzle.json' /api/puzzle/{id}: get: operationId: apiPuzzleId summary: Get a puzzle by its ID description: Get a single Lichess puzzle in JSON format. tags: - Puzzles security: [] parameters: - in: path name: id required: true description: The puzzle ID schema: type: string responses: '200': description: The requested puzzle. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleAndGame' examples: default: $ref: '#/components/examples/puzzles-getPuzzleById.json' /api/puzzle/next: get: operationId: apiPuzzleNext summary: Get a new puzzle description: 'Get a random Lichess puzzle in JSON format. If authenticated, only returns puzzles that the user has never seen before. **DO NOT** use this endpoint to enumerate puzzles for mass download. Instead, download the [full public puzzle database](https://database.lichess.org/#puzzles). ' tags: - Puzzles security: - OAuth2: - puzzle:read parameters: - in: query name: angle required: false description: 'The theme or opening to filter puzzles with. Available themes are listed in [the lichess source code](https://github.com/ornicar/lila/blob/master/translation/source/puzzleTheme.xml) and [the lichess training themes hyperlinks](https://lichess.org/training/themes). ' schema: type: string - in: query name: difficulty required: false description: The desired puzzle difficulty, relative to the authenticated user puzzle rating, or 1500 if anonymous. schema: type: string enum: - easiest - easier - normal - harder - hardest - in: query name: color required: false description: The color to play. Better left empty to automatically get 50% white. schema: type: string enum: - white - black responses: '200': description: The requested puzzle. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleAndGame' examples: default: $ref: '#/components/examples/puzzles-getNewPuzzle.json' /api/puzzle/batch/{angle}: get: operationId: apiPuzzleBatchSelect summary: Get multiple puzzles at once description: 'Get a batch of random Lichess puzzles in JSON format. If authenticated, only returns puzzles that the user has never seen before. **DO NOT** use this endpoint to enumerate puzzles for mass download. Instead, download the [full public puzzle database](https://database.lichess.org/#puzzles). ' tags: - Puzzles security: - OAuth2: - puzzle:read parameters: - in: path name: angle schema: type: string example: mix required: true description: 'The theme or opening to filter puzzles with. Recommended: `mix`. Available themes are listed in [the lichess source code](https://github.com/ornicar/lila/blob/master/translation/source/puzzleTheme.xml) and [the lichess training themes hyperlinks](https://lichess.org/training/themes). ' - in: query name: difficulty required: false description: The desired puzzle difficulty, relative to the authenticated user puzzle rating, or 1500 if anonymous. schema: type: string enum: - easiest - easier - normal - harder - hardest - in: query name: nb description: 'How many puzzles to fetch. Just set it to `1` if you only need one puzzle. ' schema: type: integer minimum: 1 maximum: 50 example: 10 default: 15 required: false - in: query name: color required: false description: 'The color to play. Better left empty to automatically get 50% white. Currently only works when `nb=1`. ' schema: type: string enum: - white - black responses: '200': description: The requested puzzles. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleBatchSelect' examples: default: $ref: '#/components/examples/puzzles-getMultiplePuzzlesAtOnce.json' post: operationId: apiPuzzleBatchSolve summary: Solve multiple puzzles at once description: 'Set puzzles as solved and update ratings. ' tags: - Puzzles security: - OAuth2: - puzzle:write parameters: - in: path name: angle schema: type: string example: mix required: true description: 'The theme or opening of the solved puzzles. Available themes are listed in [the lichess source code](https://github.com/ornicar/lila/blob/master/translation/source/puzzleTheme.xml) and [the lichess training themes hyperlinks](https://lichess.org/training/themes). ' - in: query name: nb description: 'When > 0, the response includes a new puzzle batch with that many puzzles. This is equivalent to calling [/api/puzzle/batch/{angle}](#tag/puzzles/GET/api/puzzle/batch/{angle}), and can sometimes save a request. ' schema: type: integer minimum: 0 maximum: 50 example: 1 default: 0 required: false requestBody: description: List of solved puzzles required: true content: application/json: schema: $ref: '#/components/schemas/PuzzleBatchSolveRequest' responses: '200': description: The solved puzzles, named `rounds`, and a new puzzle batch named `puzzles`. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleBatchSolveResponse' examples: default: $ref: '#/components/examples/puzzles-solveMultiplePuzzlesAtOnce.json' /api/puzzle/activity: get: operationId: apiPuzzleActivity summary: Get your puzzle activity description: 'Download your puzzle activity in [ndjson](#description/streaming-with-nd-json) format. Puzzle activity is sorted by reverse chronological order (most recent first) We recommend streaming the response, for it can be very long. ' tags: - Puzzles security: - OAuth2: - puzzle:read parameters: - in: query name: max description: How many entries to download. Leave empty to download all activity. schema: type: integer minimum: 1 - in: query name: before description: Download entries before this timestamp. Defaults to now. Use `before` and `max` for pagination. schema: type: integer minimum: 1356998400070 - in: query name: since description: Download entries since this timestamp. Defaults to account creation date. schema: type: integer minimum: 1356998400070 responses: '200': description: The puzzle activity of the logged in user. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/x-ndjson: schema: $ref: '#/components/schemas/PuzzleActivity' examples: default: $ref: '#/components/examples/puzzles-getYourPuzzleActivity.json' /api/puzzle/replay/{days}/{theme}: get: operationId: apiPuzzleReplay summary: Get puzzles to replay description: Gets the puzzle IDs of remaining puzzles to re-attempt in JSON format. tags: - Puzzles security: - OAuth2: - puzzle:read parameters: - in: path name: days required: true description: How many days to look back when aggregating puzzle results. 30 is sensible. schema: type: integer - in: path name: theme required: true description: The theme or opening to filter puzzles with. schema: type: string responses: '200': description: The requested puzzles to replay. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleReplay' examples: default: $ref: '#/components/examples/puzzles-getPuzzlesToReplay.json' '404': description: No puzzles to replay were found content: application/json: schema: properties: error: type: string example: No puzzles to replay /api/puzzle/dashboard/{days}: get: operationId: apiPuzzleDashboard summary: Get your puzzle dashboard description: 'Download your [puzzle dashboard](https://lichess.org/training/dashboard/30/dashboard) as JSON. Also includes all puzzle themes played, with aggregated results. Allows re-creating the [improvement/strengths](https://lichess.org/training/dashboard/30/improvementAreas) interfaces. ' tags: - Puzzles security: - OAuth2: - puzzle:read parameters: - in: path name: days required: true description: How many days to look back when aggregating puzzle results. 30 is sensible. schema: type: integer minimum: 1 responses: '200': description: The puzzle dashboard of the logged in user. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleDashboard' examples: default: $ref: '#/components/examples/puzzles-getYourPuzzleDashboard.json' /api/storm/dashboard/{username}: get: operationId: apiStormDashboard summary: Get the storm dashboard of a player description: 'Download the [storm dashboard](https://lichess.org/storm/dashboard/mrbasso) of any player as JSON. Contains the aggregated highscores, and the history of storm runs aggregated by days. Use `?days=0` if you only care about the highscores. ' tags: - Puzzles security: [] parameters: - in: path name: username description: Username of the player schema: type: string required: true - in: query name: days description: How many days of history to return schema: type: integer minimum: 0 maximum: 365 default: 30 responses: '200': description: The storm dashboard of a player. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleStormDashboard' examples: default: $ref: '#/components/examples/puzzles-getStormDashboardOfPlayer.json' /api/racer: post: operationId: racerPost summary: Create and join a puzzle race description: 'Create a new private [puzzle race](https://lichess.org/racer). The Lichess user who creates the race must join the race page, and manually start the race when enough players have joined. - ' tags: - Puzzles security: - OAuth2: - racer:write responses: '200': description: The new puzzle race. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleRacer' examples: default: $ref: '#/components/examples/puzzles-createAndJoinPuzzleRace.json' /api/racer/{id}: get: operationId: racerGet summary: Get puzzle race results description: 'Get the results of a [puzzle race](https://lichess.org/racer). Returns information about players, puzzles, and the current status of the race. - Note that Lichess puzzle races are not persisted, and are only available for 30 minutes. After that delay, they are permanently deleted. ' tags: - Puzzles security: - OAuth2: [] parameters: - in: path name: id description: The puzzle race ID schema: type: string required: true responses: '200': description: The puzzle race results. headers: Access-Control-Allow-Origin: schema: type: string default: '''*''' content: application/json: schema: $ref: '#/components/schemas/PuzzleRaceResults' examples: default: $ref: '#/components/examples/puzzles-getRaceResults.json' '404': description: The puzzle race was not found, or is no longer available. content: application/json: schema: $ref: '#/components/schemas/NotFound' components: schemas: PuzzleBatchSolveRequest: type: object properties: solutions: type: array items: type: object properties: id: type: string win: type: boolean rated: type: boolean PuzzleDashboard: type: object properties: days: type: integer global: $ref: '#/components/schemas/PuzzlePerformance' themes: type: object additionalProperties: type: object properties: results: $ref: '#/components/schemas/PuzzlePerformance' theme: type: string required: - results - theme required: - days - global - themes PuzzleAndGame: type: object properties: game: type: object properties: clock: type: string id: type: string perf: type: object properties: key: $ref: '#/components/schemas/PerfType' name: type: string required: - key - name pgn: type: string players: type: array items: type: object properties: color: $ref: '#/components/schemas/GameColor' flair: $ref: '#/components/schemas/Flair' id: type: string name: type: string patron: $ref: '#/components/schemas/Patron' patronColor: $ref: '#/components/schemas/PatronColor' rating: type: integer title: $ref: '#/components/schemas/Title' required: - color - id - name - rating minItems: 2 maxItems: 2 rated: type: boolean required: - clock - id - perf - pgn - players - rated additionalProperties: false puzzle: type: object properties: id: type: string initialPly: type: integer plays: type: integer rating: type: integer fen: type: string lastMove: type: string description: In UCI format, e.g. "e2e4" solution: type: array items: type: string themes: type: array items: type: string required: - id - initialPly - plays - rating - solution - themes additionalProperties: false required: - game - puzzle PatronColor: type: integer description: 'Players can choose a color for their Patron wings. See [here for the color mappings](https://github.com/lichess-org/lila/blob/master/ui/lib/css/abstract/_patron-colors.scss). The presence of this field indicates the player is an active Patron. ' minimum: 1 maximum: 10 PuzzleBatchSolveResponse: type: object properties: puzzles: type: array items: $ref: '#/components/schemas/PuzzleAndGame' glicko: $ref: '#/components/schemas/PuzzleGlicko' rounds: type: array items: type: object properties: id: type: string win: type: boolean ratingDiff: type: integer PuzzleRacer: type: object properties: id: type: string url: type: string format: uri required: - id - url PuzzlePerformance: type: object properties: firstWins: type: integer nb: type: integer performance: type: integer puzzleRatingAvg: type: integer replayWins: type: integer required: - firstWins - nb - performance - puzzleRatingAvg - replayWins Patron: type: boolean deprecated: true description: 'Use patronColor value instead to determine if player is a patron. ' GameColor: type: string enum: - white - black NotFound: properties: error: type: string required: - error example: error: Not found. PuzzleBatchSelect: type: object properties: puzzles: type: array items: $ref: '#/components/schemas/PuzzleAndGame' glicko: $ref: '#/components/schemas/PuzzleGlicko' PerfType: type: string enum: - ultraBullet - bullet - blitz - rapid - classical - correspondence - chess960 - crazyhouse - antichess - atomic - horde - kingOfTheHill - racingKings - threeCheck PuzzleStormDashboard: type: object properties: days: type: array items: type: object properties: _id: type: string combo: type: integer errors: type: integer highest: type: integer moves: type: integer runs: type: integer score: type: integer time: type: integer required: - _id - combo - errors - highest - moves - runs - score - time high: type: object properties: allTime: type: integer day: type: integer month: type: integer week: type: integer required: - allTime - day - month - week required: - days - high Flair: type: string description: See [available flair list and images](https://github.com/lichess-org/lila/tree/master/public/flair) PuzzleGlicko: type: object properties: rating: type: number deviation: type: number provisional: type: boolean PuzzleReplay: type: object properties: replay: type: object properties: days: type: integer theme: type: string nb: type: integer remaining: type: array items: type: string required: - days - theme - nb - remaining angle: type: object properties: key: type: string name: type: string desc: type: string required: - key - name - desc required: - replay - angle PuzzleActivity: type: object properties: date: type: integer puzzle: type: object properties: fen: type: string id: type: string lastMove: type: string plays: type: integer rating: type: integer solution: type: array items: type: string themes: type: array items: type: string required: - fen - id - lastMove - plays - rating - solution - themes win: type: boolean required: - date - puzzle - win Title: type: string enum: - GM - WGM - IM - WIM - FM - WFM - NM - CM - WCM - WNM - LM - BOT description: only appears if the user is a titled player or a bot user PuzzleRaceResults: type: object properties: id: type: string description: Unique identifier of the puzzle race owner: type: string description: Owner of the puzzle race players: type: array description: List of players participating in the race items: type: object properties: name: type: string description: Player username score: type: integer description: Player's current score in the race id: type: string description: User ID. Missing if player is anonymous. flair: type: string description: User's flair icon patron: $ref: '#/components/schemas/Patron' patronColor: $ref: '#/components/schemas/PatronColor' required: - name - score puzzles: type: array description: List of puzzles in the race items: type: object properties: id: type: string description: Puzzle ID fen: type: string description: X-FEN position of the puzzle line: type: string description: Solution moves sequence rating: type: integer description: Puzzle Glicko2 rating required: - id - fen - line - rating finishesAt: type: integer description: Timestamp in milliseconds when the race finishes startsAt: type: integer description: Timestamp in milliseconds when the race started required: - id - owner - players - puzzles - finishesAt - startsAt examples: puzzles-getYourPuzzleActivity.json: value: date: 1778812618669 win: true puzzle: id: 6ewuj rating: 1122 plays: 24846 solution: - d5d2 - g2h1 - d2b2 themes: - middlegame - fork - advantage - short fen: r3k3/pp3p2/2p1n3/2br4/4P3/P5P1/1B4KP/R2B1R2 b q - 0 1 lastMove: e3e4 puzzles-getRaceResults.json: value: id: nkEw7 owner: lichess players: - name: Hossienshirmohamady flair: activity.yo-yo id: hossienshirmohamady score: 62 - name: Dswift1_Makar-1 flair: activity.lichess-variant-crazyhouse id: dswift1_makar-1 score: 41 - name: ManavKumar1865 id: manavkumar1865 score: 50 - name: sir_john_doe id: sir_john_doe score: 40 - name: BubblyBakerHound score: 6 - name: ttrv flair: activity.trophy patron: true patronColor: 10 id: ttrv score: 37 - name: FairyGliedt id: fairygliedt score: 11 - name: BecomingWillingRuyLopez score: 29 - name: EternalDrummerSalmon score: 0 - name: AdroitLiterateCoder score: 0 puzzles: - id: oiHY2 fen: 1r6/7R/1n2p2p/p2kN3/3P3P/PPp5/2P5/2K5 b - - 1 38 line: d5d4 e5c6 d4e4 c6b8 rating: 1016 - id: 3EzyJ fen: 8/p3r1pp/1pp5/2p5/3k4/2RP4/PP3KPP/8 b - - 5 38 line: e7e3 c3c4 d4d3 c4c3 d3d2 c3e3 rating: 1031 - id: uclhP fen: 1n1r2k1/N2Prppp/1p6/2p5/2P1p3/P6B/1P3P2/3R1K2 b - - 0 29 line: b8d7 a7c6 g8f8 c6d8 rating: 1062 - id: A6eYH fen: r4r2/1p2q3/p1p1p1pQ/3nP3/P5k1/4P3/1P4K1/R4R2 b - - 1 31 line: e7g5 h6h3 rating: 1088 - id: KCUmn fen: r1bq1rk1/pppnBppp/2n1p3/3p4/3P3Q/1N1B1P2/PPP3PP/R3K1NR b KQ - 0 11 line: d8e7 h4h7 rating: 1129 - id: V6fYA fen: 5rk1/pp1b2pp/2p4b/2nprp2/5N1P/P1NB1PP1/1PP5/1K2RR2 b - - 1 22 line: f8d8 e1e5 h6f4 g3f4 c5d3 c2d3 rating: 1161 - id: BLlhu fen: r4rk1/1b1n1ppp/p2p4/1pqN1PP1/8/5Q2/PPPR3P/2K2B1R b - - 4 17 line: d7b6 d5e7 g8h8 f3b7 rating: 1190 - id: wGzcz fen: r1b2rk1/5pp1/1q2pn1p/n2p4/1ppP2N1/4P1P1/PPQ2PP1/1BR1RNK1 b - - 4 19 line: b4b3 g4f6 g7f6 c2h7 rating: 1272 - id: koNaI fen: 4r3/pk1nr3/1pp1q2p/4n3/4QB2/1PP5/P5PP/3R1R1K b - - 9 35 line: e5g4 e4e6 e7e6 d1d7 rating: 1291 - id: UrPl5 fen: 1k5r/p6P/1p4p1/1Pp1Pr2/2P5/5NP1/1P4K1/7R b - - 4 31 line: f5h5 h1h5 g6h5 f3g5 rating: 1309 - id: UOc8p fen: r3qr2/6pk/3b1p1p/1p1P1N2/p1n3RQ/4P2P/3R1PP1/6K1 b - - 9 30 line: f8f7 g4g7 f7g7 h4h6 h7g8 h6g7 rating: 1327 - id: lz9D3 fen: 8/pp6/8/2P5/1Pk4p/P7/6K1/8 b - - 2 45 line: c4b3 b4b5 b3c4 c5c6 b7c6 b5c6 rating: 1414 - id: 6kFcn fen: r1b2r2/5pkp/1qpQ1np1/2n1p3/p3P1P1/P1N2N1P/1PP1BP2/2KR3R b - - 0 17 line: c5e4 c3e4 f6e4 d6e5 rating: 1431 - id: 6tr7c fen: 2q1r1k1/5pp1/2p4p/3p1N2/3PR2P/2P3P1/2Q2PK1/8 b - - 0 31 line: e8e4 c2e4 d5e4 f5e7 g8h7 e7c8 rating: 1445 - id: mkyEZ fen: 3k1r2/1p3p2/p2P1Q2/P1p5/2P1P3/8/P5PK/2q5 b - - 2 39 line: d8d7 f6e7 d7c6 e7c7 rating: 1459 - id: fX84W fen: 2b2rk1/4b1pp/1q3p2/1p1BN3/1p3Q2/7P/PPP3PK/5R2 b - - 1 25 line: g8h8 e5g6 h7g6 f4h4 rating: 1479 - id: MI2jt fen: 5rk1/1rpq2b1/Q1np2pp/3Npp2/2P1P3/3P2P1/P3NPBP/5RK1 b - - 0 20 line: b7a7 a6c6 d7c6 d5e7 g8h8 e7c6 rating: 1559 - id: Yz0fD fen: r1bqkb1r/pp1n1ppp/5n2/1B1pp3/3P4/2N1PN2/PP3PPP/R1BQK2R b KQkq - 1 7 line: f8d6 d4e5 d6e5 f3e5 rating: 1575 - id: gLXCp fen: r1b2rk1/ppq3b1/2pp4/4pP2/3P2p1/2PB2Pn/PP1N2K1/R2Q2BR b - - 0 24 line: c8f5 d3f5 f8f5 d1g4 h3f4 g3f4 rating: 1588 - id: jAqV7 fen: 6k1/1ppr1pp1/pb5B/8/P1Q5/2P4P/1P3qPK/R7 b - - 0 30 line: g7h6 c4g4 g8f8 g4d7 f2f4 h2h1 rating: 1604 - id: EhkBX fen: 3r2k1/pp4pp/5p2/q2Rp3/2Q5/1P6/P3RPPP/6K1 b - - 0 27 line: a5d5 e2d2 d5c4 d2d8 g8f7 b3c4 rating: 1615 - id: ECY0A fen: 4rrk1/1p3p2/5q2/p2pp3/4N3/1BPP2R1/Pb3PP1/1N4K1 b - - 1 27 line: f6g7 e4f6 g8h8 g3h3 g7h6 h3h6 rating: 1695 - id: XmDE6 fen: rR4k1/p1p1brp1/2q2pNp/2n1p3/3p2Q1/3P2BP/2P2PP1/1R4K1 b - - 5 24 line: a8b8 b1b8 e7f8 b8f8 f7f8 g6e7 rating: 1707 - id: RWGfE fen: 3rkbr1/pp3p1p/5p2/2p5/2P1P1b1/q2n1N2/P1QBB1PP/1R3K1R b - - 11 19 line: b7b6 b1b3 a3a4 e2d3 g4f3 g2f3 rating: 1726 - id: 52zOY fen: 8/p1r2k1p/1p3p2/1P1p4/1QbBnPqN/6P1/P6P/4R1K1 b - - 2 40 line: e4g3 h2g3 g4g3 h4g2 rating: 1737 - id: fT2rI fen: 8/4n1p1/p2BPk1p/PB1p4/1P1P4/2P2K2/3b4/8 b - - 0 45 line: a6b5 d6e7 f6e7 a5a6 rating: 1753 - id: YGDJo fen: 5n2/p1n5/1pP1kqp1/7p/1P3N2/P1Q1P3/7K/8 b - - 13 40 line: e6f5 e3e4 f5f4 c3f6 rating: 1829 - id: rH2VZ fen: r3kb1r/1pp2pp1/p1n2q1p/4N3/Q2PB1b1/2P1P1P1/PP3PP1/R3K2R b KQkq - 1 13 line: g4d7 e5d7 e8d7 d4d5 b7b5 d5c6 rating: 1875 - id: aKemL fen: r1b1kbnr/ppppqppp/6n1/1N2P3/3P4/8/PPP1QPPP/R1B1KB1R b KQkq - 4 8 line: d7d6 b5c7 e8d8 c7a8 rating: 1899 - id: pYMPH fen: r1bqkb1r/p1pn3p/2p1pp2/3p2B1/3N4/3P4/PPP2PPP/RN1QK2R b KQkq - 1 9 line: f6g5 d1h5 e8e7 d4c6 e7d6 c6d8 rating: 1925 - id: zwwhE fen: r7/2P2pkp/4p1p1/8/3bN3/1R4PP/5PK1/8 b - - 0 39 line: a8c8 e4d6 c8c7 d6e8 g7g8 e8c7 rating: 1940 - id: pe36T fen: 6k1/pbp1R1pp/1p6/8/2P3P1/1PKB4/P4r2/8 b - - 4 36 line: f2f7 e7e8 f7f8 d3h7 g8f7 h7g6 rating: 1967 - id: J1B1v fen: 6k1/4rp2/6p1/1p1p4/3q4/3PpR1Q/2r3PP/4R2K b - - 1 29 line: c2f2 h3c8 g8g7 f3h3 d4h4 h3h4 rating: 1988 - id: GkNRd fen: 3r1rk1/1p2bppp/p1q1b3/2p5/4B3/4BP2/PPP3PP/R1QR2K1 b - - 5 17 line: e6d5 d1d5 d8d5 c2c4 d5d6 e4c6 rating: 2007 - id: SvmVG fen: r2r1k2/p4ppp/3p2n1/6Q1/3N4/2P5/Pq3PPP/1R2R1K1 b - - 1 21 line: d8e8 e1e8 a8e8 d4e6 e8e6 g5d8 e6e8 d8e8 f8e8 b1b2 rating: 2018 - id: Z9d0B fen: r3kb1r/pp3ppp/2p1pq2/3P1n2/5N2/3Q1P2/PPPB2PP/R4RK1 b kq - 0 15 line: c6d5 d3b5 e8d8 b5b7 rating: 2036 - id: vdTvR fen: 3r1r1k/p3q1p1/1pQb2Pp/3Rp1p1/4P3/3R1PB1/P5K1/8 b - - 11 37 line: e7f6 d5d6 d8d6 c6d6 f6d6 d3d6 rating: 2048 - id: glKGa fen: 8/p6p/1pk2pp1/2p1pP2/2NnP1PP/PP2K3/8/8 b - - 1 34 line: d4b3 f5g6 h7g6 h4h5 g6h5 g4h5 rating: 2067 - id: G7VSz fen: 8/1p4R1/4p3/3rPkp1/8/4K1P1/5P2/8 b - - 4 40 line: b7b6 f2f4 g5f4 g3f4 d5e5 f4e5 rating: 2076 - id: sF6cP fen: 3rr1k1/2p2ppp/pp2bq2/2n5/7P/2N5/PPPR1QP1/1K3B1R b - - 0 22 line: e6a2 b1a2 d8d2 f2d2 rating: 2089 - id: 7YkHn fen: 4r1k1/p4pN1/1p1qr2p/2pn4/1P1p3R/P4PP1/3Q1PK1/7R b - - 0 28 line: e6e2 g7e8 e2d2 e8d6 rating: 2104 - id: j7Rjj fen: 1rb1kb1r/3pqp1p/pn3P2/4p1QB/1p6/1P2B3/6PP/5RK1 b k - 0 23 line: e7e6 h5f7 e6f7 g5e5 e8d8 e5b8 rating: 2111 - id: fgreb fen: 6k1/2r4p/1pP5/1P3p2/4p3/2R5/1r3P1P/3R2K1 b - - 1 33 line: b2b5 d1d7 c7d7 c6d7 b5d5 c3c8 rating: 2120 - id: paaOW fen: 2BQ4/6Rp/4P3/2Pp1p1k/br1P4/1p2q3/7K/8 b - - 0 40 line: b4d4 g7h7 h5g4 h7h4 g4f3 h4h3 f3f2 h3e3 rating: 2135 - id: NBV0m fen: r2q1rk1/ppp2pb1/3nb1pp/8/8/2NB1N2/PP1Q1PPP/3RR1K1 b - - 1 15 line: d6c4 d3c4 e6c4 d2f4 rating: 2143 - id: W8D1X fen: 5r2/4N3/p1R1p3/1k1p4/P2P2qr/6P1/1P3P2/5RK1 b - - 0 37 line: b5a4 c6b6 g4g3 f2g3 f8f1 g1f1 rating: 2154 - id: HYmzY fen: 3r3k/5p1p/3P4/8/R3Q3/1P2p3/K1Pq4/8 b - - 8 37 line: d8d6 e4e5 h8g8 a4a8 d6d8 e5g5 rating: 2169 - id: QqJEy fen: r7/7k/p4Qp1/1p3b2/4p3/2P2q2/PPB5/1K1R4 b - - 2 32 line: e4e3 d1d7 h7h6 f6h4 f3h5 h4f4 rating: 2180 - id: 9v76Q fen: 2k5/pb3P2/1pnqp2p/3p3P/P1pP1Pr1/2P5/2PQ4/1R1KR3 b - - 0 28 line: d6f4 d2e2 f4f7 e2g4 rating: 2196 - id: HIjI8 fen: 7r/2pk2pp/p7/P5B1/3Q3P/P4q2/2P1rP2/1R4K1 b - - 4 26 line: d7e6 d4c4 e6f5 c4f7 f5g4 b1b4 e2e4 f7e6 rating: 2211 - id: hIwiE fen: 8/7p/8/5pPP/2p1k3/8/2K5/8 b - - 0 52 line: e4e5 h5h6 e5f4 g5g6 rating: 2224 - id: jN5Ts fen: r4rk1/1R1R3p/5ppq/8/p2QP3/2P5/2P2P2/5K2 b - - 1 33 line: a4a3 d4c4 g8h8 c4c7 h6h1 f1e2 h1e4 e2d2 rating: 2242 - id: 6tSB4 fen: 2r1k2r/3b3p/1p2Rpp1/p7/3p1PQ1/6PK/P1q4P/1N2R3 b k - 0 32 line: d7e6 g4e6 e8f8 e6f6 f8g8 f6e6 rating: 2252 - id: M98Hk fen: 7r/1pq3kp/3pB1pR/2pPb1P1/5r2/pP1Q4/P1P5/1K5R b - - 5 27 line: c7e7 h6h7 h8h7 h1h7 g7f8 h7e7 rating: 2273 - id: z57yq fen: 8/2r3k1/3R2R1/1p2P1p1/6Pp/4r2P/6K1/8 b - - 11 48 line: g7f7 d6f6 f7e8 g6g8 e8d7 f6d6 d7e7 g8g7 e7f8 g7c7 rating: 2282 - id: zPOBo fen: 8/8/7p/1BKPkp1P/b5p1/8/6P1/8 b - - 1 43 line: f5f4 b5a4 f4f3 g2g3 f3f2 a4b5 rating: 2297 - id: 6b1KE fen: r4rk1/pp3ppp/5n1B/7q/2PP4/3B1b2/P1PQ1P1P/R3K1R1 b Q - 2 15 line: h5h2 g1g7 g8h8 d2g5 a8e8 e1d2 h2f2 d2c3 f6e4 d3e4 f2d4 c3d4 rating: 2309 - id: EAPaS fen: 6k1/p6p/1b3N2/1Q4K1/4q3/P5P1/2P1p2P/6r1 b - - 1 38 line: g8g7 b5d7 g7f8 d7c8 f8f7 c8g8 rating: 2337 - id: PJswp fen: 6k1/2p3b1/p3p1q1/1pBrPp2/1Pn1NP2/2P2QR1/P4PKP/2r5 b - - 7 35 line: g6h6 e4f6 g8f7 f6d5 c4d2 f3e3 rating: 2354 - id: fg9uw fen: r3n1k1/p5bp/1pq3p1/2p5/8/1PP2N2/PB2Q1PP/2R2K2 b - - 1 22 line: e8d6 e2e6 g8h8 c1d1 c6e4 e6d6 rating: 2361 - id: UaOV4 fen: r1bq1k1r/pppp1Bpp/2n5/4P1B1/1bQ5/2n2N2/P4PPP/R4K1R b - - 3 12 line: d7d5 c4f4 d8d7 f7e6 f8e8 e6d7 rating: 2374 - id: 6q7pY fen: 8/8/2p5/pp3p1p/2kPpPpP/P1P3P1/1PK5/8 b - - 3 52 line: e4e3 b2b3 c4d5 c2d3 e3e2 c3c4 rating: 2386 - id: WU2iW fen: rnb1rk2/ppp4p/6pb/q3P3/2B1Q3/2P5/P5PP/3R1RK1 b - - 0 20 line: c8f5 f1f5 f8g7 f5f7 g7h8 e4h4 a5b6 g1h1 rating: 2399 - id: ruvnu fen: 2k2Q2/p5p1/2r5/1p3p1p/4q2b/1PP4P/P3p1PB/4R2K b - - 7 35 line: c8b7 f8b8 b7a6 h2g1 c6b6 g1b6 rating: 2413 - id: 09L17 fen: 8/8/1p1P1k2/p4P1p/1P2K3/8/8/8 b - - 0 55 line: a5b4 e4d5 b4b3 d6d7 f6e7 d5c6 b3b2 f5f6 e7f7 d7d8q b2b1q d8e7 f7g6 e7g7 g6f5 g7h7 f5f6 h7b1 rating: 2424 - id: sXZNJ fen: 2r3k1/p2P1ppp/5q2/Q2p4/3np3/B3P1Pb/P3BP1P/3R3K b - - 0 28 line: h3d7 e3d4 f6f2 a5e1 rating: 2444 - id: M2T99 fen: 8/k7/3K4/2Q2p2/8/8/6P1/4q3 b - - 1 54 line: a7a6 d6c7 e1g3 c5d6 g3d6 c7d6 rating: 2458 - id: yLsF4 fen: r1b2r2/ppq3k1/2nRp3/5pR1/4Q3/PP4P1/4P2P/7K b - - 0 24 line: g7f6 e4f5 f6e7 g5g7 e7d6 f5d3 rating: 2476 - id: N1FQs fen: 5nk1/p4rpp/1p2p3/4P1QP/1P3P2/P1q5/2pR2P1/2B4K b - - 3 31 line: f7d7 d2d7 f8d7 h5h6 g8f7 h6g7 rating: 2496 startsAt: 1758635599928 finishesAt: 1758635689928 puzzles-getPuzzleById.json: value: game: id: AHGPPS44 perf: key: blitz name: Blitz rated: true players: - name: EricRosen title: IM flair: travel-places.ambulance patron: true patronColor: 10 id: ericrosen color: white rating: 2642 - name: Anton_Volovikov title: FM id: anton_volovikov color: black rating: 2619 pgn: d4 d5 Bf4 Bf5 Nf3 e6 c4 Nf6 Nc3 Bd6 Bg3 Nbd7 e3 O-O c5 Bxg3 hxg3 h6 Bd3 Ne4 Qc2 Ndf6 Nd2 Nxc3 Bxf5 exf5 bxc3 Ne4 Nxe4 fxe4 Rb1 b6 Rh5 bxc5 Rb5 cxd4 cxd4 c6 Qxc6 Rc8 Qxd5 Qf6 Qxe4 Rc1+ Ke2 Qa6 Qd5 Rc2+ Kf3 g6 Rxh6 Qf6+ Ke4 clock: 3+0 puzzle: id: PSjmf rating: 2652 plays: 806 solution: - g8g7 - d5e5 - f6e5 themes: - endgame - master - short - masterVsMaster - crushing fen: 5rk1/p4p2/5qpR/1R1Q4/3PK3/4P1P1/P1r2PP1/8 b - - 1 1 lastMove: f3e4 initialPly: 52 puzzles-getMultiplePuzzlesAtOnce.json: value: puzzles: - game: id: lzdAM1jJ perf: key: classical name: Classical rated: true players: - name: Abubakar flair: people.woman-mountain-biking-dark-skin-tone id: abubakar color: white rating: 1698 - name: Ivan title: WGM id: ivan color: black rating: 1637 pgn: d4 d6 c4 Nd7 e3 e5 Nf3 h6 Bd3 Ngf6 Bc2 Be7 O-O c6 Ne1 Nf8 g3 g5 dxe5 dxe5 Qxd8+ Bxd8 c5 Bh3 Ng2 h5 Nd2 h4 Nf3 hxg3 fxg3 e4 Nxg5 Bxg2 Kxg2 Ne6 Nxe4 Nxe4 Bxe4 Nxc5 Bc2 Be7 b4 Ne6 Bb3 Bxb4 Bb2 Rh5 Bd1 Rd5 a3 Bc5 e4 clock: 15+15 puzzle: id: 6ewuj rating: 1123 plays: 24845 solution: - d5d2 - g2h1 - d2b2 themes: - middlegame - fork - advantage - short initialPly: 52 - game: id: 6OH3Wycp perf: key: rapid name: Rapid rated: true players: - name: Hui patron: true patronColor: 1 id: hui color: white rating: 1954 - name: Pedro flair: people.person-walking-dark-skin-tone patron: true patronColor: 1 id: pedro color: black rating: 1823 pgn: e4 c5 Bc4 e6 Qh5 Nf6 Qf3 Nc6 Nc3 Nd4 Qd1 d5 exd5 exd5 Bb5+ Nxb5 Nxb5 Bd7 a4 a6 Nc3 d4 Qe2+ Be7 Ne4 Nxe4 Qxe4 Bc6 Qg4 O-O d3 Qd5 f3 Rfe8 Ne2 Qe5 Kf2 Bd6 Ng3 Qe7 Bd2 Bd7 Qg5 Bxg3+ Qxg3 clock: 15+10 puzzle: id: 1ygt6 rating: 1124 plays: 3186 solution: - e7e2 - f2g1 - e2d2 themes: - middlegame - fork - short - crushing initialPly: 44 glicko: rating: 1756 deviation: 51.98 puzzles-getDailyPuzzle.json: value: game: id: MmhaEJoJ perf: key: classical name: Classical rated: true players: - name: MuhCiri id: muhciri color: white rating: 1915 - name: saadatinia id: saadatinia color: black rating: 1798 pgn: e4 e5 Nf3 Nc6 Bc4 h6 c3 f5 d3 fxe4 clock: 15+15 puzzle: id: u3GaW rating: 1938 plays: 127146 solution: - f3e5 - g8f6 - e5f7 - d8e7 - f7h8 themes: - opening - long - fork - advantage fen: r1bqkbnr/pppp2p1/2n4p/4p3/2B1p3/2PP1N2/PP3PPP/RNBQK2R w KQkq - 0 1 lastMove: f5e4 initialPly: 9 puzzles-getYourPuzzleDashboard.json: value: days: 30 global: nb: 11 firstWins: 8 replayWins: 0 puzzleRatingAvg: 1489 performance: 1716 themes: middlegame: theme: Middlegame results: nb: 8 firstWins: 6 replayWins: 0 puzzleRatingAvg: 1529 performance: 1779 fork: theme: Fork results: nb: 2 firstWins: 2 replayWins: 0 puzzleRatingAvg: 1150 performance: 1650 opening: theme: Opening results: nb: 2 firstWins: 1 replayWins: 0 puzzleRatingAvg: 1112 performance: 1112 kingsideAttack: theme: Kingside attack results: nb: 2 firstWins: 1 replayWins: 0 puzzleRatingAvg: 1336 performance: 1336 discoveredAttack: theme: Discovered attack results: nb: 2 firstWins: 1 replayWins: 0 puzzleRatingAvg: 1801 performance: 1801 endgame: theme: Endgame results: nb: 1 firstWins: 1 replayWins: 0 puzzleRatingAvg: 1922 performance: 2422 pin: theme: Pin results: nb: 1 firstWins: 1 replayWins: 0 puzzleRatingAvg: 1487 performance: 1987 defensiveMove: theme: Defensive move results: nb: 1 firstWins: 1 replayWins: 0 puzzleRatingAvg: 1403 performance: 1903 puzzles-getNewPuzzle.json: value: game: id: mAe3fKx5 perf: key: blitz name: Blitz rated: true players: - name: Lenshrr id: lenshrr color: white rating: 1948 - name: Wmendes id: wmendes color: black rating: 1938 pgn: e4 c5 c3 Nc6 d4 cxd4 cxd4 e6 Nc3 Nf6 e5 Nd5 Nxd5 exd5 Nf3 d6 Be2 dxe5 dxe5 Be7 O-O O-O Bf4 Be6 Qb3 Rb8 Rad1 Qa5 Nd4 Nxd4 Rxd4 Rfc8 Qg3 Rc2 Bh6 Bf8 Bg4 Rxb2 Bxe6 fxe6 Rg4 g6 Bc1 Rxa2 h4 Rc8 h5 Rc3 f3 Qc5+ Kh2 Rxc1 hxg6 h6 g7 Be7 Qf4 Rxf1 clock: 5+0 puzzle: id: SLR3a rating: 1894 plays: 13601 solution: - f4f7 - g8f7 - g7g8q themes: - advancedPawn - short - attraction - promotion - endgame - mateIn2 initialPly: 57 puzzles-solveMultiplePuzzlesAtOnce.json: value: puzzles: - game: id: vgDNN1oc perf: key: rapid name: Rapid rated: true players: - name: Hui patron: true patronColor: 1 id: hui color: white rating: 1890 - name: Guang flair: people.rightwards-hand-medium-skin-tone id: guang color: black rating: 1873 pgn: e4 e5 Nf3 d6 d4 Bg4 dxe5 Bxf3 gxf3 Be7 exd6 Bxd6 f4 Nc6 Nc3 Nge7 a3 O-O Rg1 Ng6 Nd5 Nce7 Qg4 Nxd5 exd5 Qe7+ Be2 Qe4 f5 Qxg4 Rxg4 Ne5 Re4 Rae8 Bd2 Nd7 Rxe8 Rxe8 Be3 b6 O-O-O Bxh2 Bb5 Re7 Bg5 f6 Be3 Ne5 Rh1 Ng4 Be2 h5 clock: 10+0 puzzle: id: 2wzBW rating: 1374 plays: 12470 solution: - e2g4 - h5g4 - h1h2 themes: - endgame - advantage - short - capturingDefender initialPly: 51 - game: id: YwJ3U1fZ perf: key: rapid name: Rapid rated: true players: - name: Jiang flair: people.woman-cook-medium-light-skin-tone id: jiang color: white rating: 2084 - name: Svetlana id: svetlana color: black rating: 2043 pgn: d4 Nf6 c4 e6 Nf3 d5 g3 dxc4 Ne5 Bb4+ Nc3 b5 Bg2 Nd5 O-O f6 e4 Nxc3 bxc3 Bxc3 clock: 10+0 puzzle: id: 4seCY rating: 1377 plays: 22179 solution: - d1h5 - g7g6 - e5g6 - h7g6 - h5h8 themes: - middlegame - long - advantage initialPly: 19 glicko: rating: 1756.46 deviation: 54.13 rounds: - id: 6ewuj win: true ratingDiff: 0 puzzles-getStormDashboardOfPlayer.json: value: high: day: 0 week: 0 month: 0 allTime: 33 days: - _id: 2025/2/8 score: 1 moves: 1 errors: 0 combo: 1 time: 180 highest: 1020 runs: 1 - _id: 2025/1/23 score: 17 moves: 35 errors: 3 combo: 17 time: 164 highest: 1314 runs: 1 - _id: 2024/12/11 score: 16 moves: 41 errors: 6 combo: 20 time: 141 highest: 1315 runs: 1 puzzles-getPuzzlesToReplay.json: value: replay: days: 90 theme: mix nb: 3 remaining: - EMJ4a - 9bZjC - 5JGeN angle: key: mix name: Puzzle Themes desc: A mix of everything. You don't know what to expect, so be ready for anything! Just like in real games. puzzles-createAndJoinPuzzleRace.json: value: id: KgOHb url: https://lichess.org/racer/KgOHb securitySchemes: OAuth2: type: oauth2 description: 'Read [the introduction for how to make authenticated requests](#description/authentication). ' flows: authorizationCode: authorizationUrl: https://lichess.org/oauth tokenUrl: https://lichess.org/api/token scopes: preference:read: Read your preferences preference:write: Write your preferences email:read: Read your email address engine:read: Read your external engines engine:write: Create, update, delete your external engines challenge:read: Read incoming challenges challenge:write: Create, accept, decline challenges challenge:bulk: Create, delete, query bulk pairings study:read: Read private studies and broadcasts study:write: Create, update, delete studies and broadcasts tournament:write: Create tournaments racer:write: Create and join puzzle races puzzle:read: Read puzzle activity puzzle:write: Write puzzle activity team:read: Read private team information team:write: Join, leave teams team:lead: Manage teams (kick members, send PMs) follow:read: Read followed players follow:write: Follow and unfollow other players msg:write: Send private messages to other players board:play: Play with the Board API bot:play: Play with the Bot API. Only for [Bot accounts](#tag/bot/POST/api/bot/account/upgrade) web:mod: Use moderator tools (within the bounds of your permissions)