Chess.com Published Data API

Public, unauthenticated REST API exposing player profiles, monthly game archives (with PGN download), club rosters, daily and live team matches, Swiss/round-robin tournaments, titled players, country rosters, the daily puzzle, the streamer list, and live leaderboards across daily, blitz, bullet, rapid, tactics, lessons, and chess variants. JSON-LD response shape with ETag, Last-Modified, gzip, and JSONP support; data refreshes at most every 12-24 hours.

Chess.com Published Data API is published by Chess.com on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 9 machine-runnable capabilities that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 3 JSON Schema definitions.

Tagged areas include Chess, Gaming, Players, and Public Data. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, a JSON-LD context, 9 Naftiko capability specs, and 3 JSON Schemas.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

chess-com-published-data-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Chess.com Published Data API
  description: |
    Public, read-only REST API exposing Chess.com data: player profiles and stats, monthly game
    archives (JSON and PGN), clubs and members, daily and live team matches, Swiss and round-robin
    tournaments, titled-player lists, country rosters, the daily puzzle, the streamer list, and
    live leaderboards.

    The API is unauthenticated; rate limiting applies to parallel requests (429 Too Many Requests).
    Responses use JSON-LD with ETag, Last-Modified, gzip, and JSONP support. Most endpoints refresh
    at most every 12-24 hours. Clients are encouraged to send a recognizable User-Agent including a
    contact email or URL.
  version: '2026-05-25'
  contact:
    name: Chess.com Support
    url: https://support.chess.com
  x-logo:
    url: https://www.chess.com/favicon.ico

servers:
  - url: https://api.chess.com/pub
    description: Chess.com Published Data API

tags:
  - name: Players
    description: Profiles, stats, online state, archives, clubs, matches, tournaments
  - name: Games
    description: Daily, live, and archived games (JSON and PGN)
  - name: Clubs
    description: Club profiles, members, and team matches
  - name: Tournaments
    description: Tournament details, rounds, and groups
  - name: Matches
    description: Daily and live team match details
  - name: Countries
    description: Country profiles, players, and clubs
  - name: Puzzles
    description: Daily and random puzzles
  - name: Streamers
    description: Chess.com streamers
  - name: Leaderboards
    description: Live leaderboards across time controls and variants
  - name: Titled Players
    description: Lists of titled players by FIDE title

paths:
  /player/{username}:
    get:
      summary: Get Player Profile
      operationId: getPlayerProfile
      tags: [Players]
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Player profile
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Player'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'

  /player/{username}/stats:
    get:
      summary: Get Player Stats
      operationId: getPlayerStats
      tags: [Players]
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Ratings and statistics across time controls and modes
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlayerStats'
        '404':
          $ref: '#/components/responses/NotFound'

  /player/{username}/is-online:
    get:
      summary: Get Player Online Status
      operationId: getPlayerOnline
      tags: [Players]
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Online state
          content:
            application/json:
              schema:
                type: object
                properties:
                  online:
                    type: boolean

  /player/{username}/games:
    get:
      summary: Get Player Current Daily Games
      operationId: getPlayerCurrentGames
      tags: [Players, Games]
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: In-progress daily chess games
          content:
            application/json:
              schema:
                type: object
                properties:
                  games:
                    type: array
                    items:
                      $ref: '#/components/schemas/Game'

  /player/{username}/games/to-move:
    get:
      summary: Get Player Games To Move
      operationId: getPlayerGamesToMove
      tags: [Players, Games]
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Daily games waiting on the player to move
          content:
            application/json:
              schema:
                type: object

  /player/{username}/games/archives:
    get:
      summary: List Player Game Archives
      operationId: listPlayerArchives
      tags: [Players, Games]
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: URLs of available monthly archives
          content:
            application/json:
              schema:
                type: object
                properties:
                  archives:
                    type: array
                    items:
                      type: string
                      format: uri

  /player/{username}/games/{year}/{month}:
    get:
      summary: Get Player Monthly Archive
      operationId: getPlayerMonthlyArchive
      tags: [Players, Games]
      parameters:
        - $ref: '#/components/parameters/Username'
        - $ref: '#/components/parameters/Year'
        - $ref: '#/components/parameters/Month'
      responses:
        '200':
          description: All games completed in the given month
          content:
            application/json:
              schema:
                type: object
                properties:
                  games:
                    type: array
                    items:
                      $ref: '#/components/schemas/Game'

  /player/{username}/games/{year}/{month}/pgn:
    get:
      summary: Get Player Monthly Archive PGN
      operationId: getPlayerMonthlyArchivePgn
      tags: [Players, Games]
      parameters:
        - $ref: '#/components/parameters/Username'
        - $ref: '#/components/parameters/Year'
        - $ref: '#/components/parameters/Month'
      responses:
        '200':
          description: All games in the given month as a multi-game PGN stream
          content:
            application/x-chess-pgn:
              schema:
                type: string

  /player/{username}/clubs:
    get:
      summary: Get Player Club Memberships
      operationId: getPlayerClubs
      tags: [Players, Clubs]
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Clubs the player belongs to
          content:
            application/json:
              schema:
                type: object

  /player/{username}/matches:
    get:
      summary: Get Player Team Matches
      operationId: getPlayerMatches
      tags: [Players, Matches]
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Team match participation
          content:
            application/json:
              schema:
                type: object

  /player/{username}/tournaments:
    get:
      summary: Get Player Tournaments
      operationId: getPlayerTournaments
      tags: [Players, Tournaments]
      parameters:
        - $ref: '#/components/parameters/Username'
      responses:
        '200':
          description: Tournaments the player has registered for
          content:
            application/json:
              schema:
                type: object

  /titled/{title-abbrev}:
    get:
      summary: List Titled Players
      operationId: listTitledPlayers
      tags: [Titled Players]
      parameters:
        - name: title-abbrev
          in: path
          required: true
          schema:
            type: string
            enum: [GM, WGM, IM, WIM, FM, WFM, NM, WNM, CM, WCM]
      responses:
        '200':
          description: List of titled players
          content:
            application/json:
              schema:
                type: object
                properties:
                  players:
                    type: array
                    items:
                      type: string

  /club/{url-ID}:
    get:
      summary: Get Club Profile
      operationId: getClub
      tags: [Clubs]
      parameters:
        - $ref: '#/components/parameters/ClubUrlId'
      responses:
        '200':
          description: Club profile
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Club'

  /club/{url-ID}/members:
    get:
      summary: Get Club Members
      operationId: getClubMembers
      tags: [Clubs]
      parameters:
        - $ref: '#/components/parameters/ClubUrlId'
      responses:
        '200':
          description: Club members grouped by activity level
          content:
            application/json:
              schema:
                type: object
                properties:
                  weekly:
                    type: array
                    items:
                      $ref: '#/components/schemas/ClubMember'
                  monthly:
                    type: array
                    items:
                      $ref: '#/components/schemas/ClubMember'
                  all_time:
                    type: array
                    items:
                      $ref: '#/components/schemas/ClubMember'

  /club/{url-ID}/matches:
    get:
      summary: Get Club Matches
      operationId: getClubMatches
      tags: [Clubs, Matches]
      parameters:
        - $ref: '#/components/parameters/ClubUrlId'
      responses:
        '200':
          description: Team matches for the club
          content:
            application/json:
              schema:
                type: object

  /tournament/{url-ID}:
    get:
      summary: Get Tournament
      operationId: getTournament
      tags: [Tournaments]
      parameters:
        - $ref: '#/components/parameters/TournamentUrlId'
      responses:
        '200':
          description: Tournament summary
          content:
            application/json:
              schema:
                type: object

  /tournament/{url-ID}/{round}:
    get:
      summary: Get Tournament Round
      operationId: getTournamentRound
      tags: [Tournaments]
      parameters:
        - $ref: '#/components/parameters/TournamentUrlId'
        - name: round
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Round details
          content:
            application/json:
              schema:
                type: object

  /tournament/{url-ID}/{round}/{group}:
    get:
      summary: Get Tournament Round Group
      operationId: getTournamentRoundGroup
      tags: [Tournaments]
      parameters:
        - $ref: '#/components/parameters/TournamentUrlId'
        - name: round
          in: path
          required: true
          schema:
            type: integer
        - name: group
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Group standings within a round
          content:
            application/json:
              schema:
                type: object

  /match/{ID}:
    get:
      summary: Get Daily Team Match
      operationId: getDailyMatch
      tags: [Matches]
      parameters:
        - $ref: '#/components/parameters/MatchId'
      responses:
        '200':
          description: Daily team match details
          content:
            application/json:
              schema:
                type: object

  /match/{ID}/{board}:
    get:
      summary: Get Daily Team Match Board
      operationId: getDailyMatchBoard
      tags: [Matches]
      parameters:
        - $ref: '#/components/parameters/MatchId'
        - $ref: '#/components/parameters/Board'
      responses:
        '200':
          description: Daily team match board
          content:
            application/json:
              schema:
                type: object

  /match/live/{ID}:
    get:
      summary: Get Live Team Match
      operationId: getLiveMatch
      tags: [Matches]
      parameters:
        - $ref: '#/components/parameters/MatchId'
      responses:
        '200':
          description: Live team match details
          content:
            application/json:
              schema:
                type: object

  /match/live/{ID}/{board}:
    get:
      summary: Get Live Team Match Board
      operationId: getLiveMatchBoard
      tags: [Matches]
      parameters:
        - $ref: '#/components/parameters/MatchId'
        - $ref: '#/components/parameters/Board'
      responses:
        '200':
          description: Live team match board
          content:
            application/json:
              schema:
                type: object

  /country/{iso}:
    get:
      summary: Get Country Profile
      operationId: getCountry
      tags: [Countries]
      parameters:
        - $ref: '#/components/parameters/Iso'
      responses:
        '200':
          description: Country profile
          content:
            application/json:
              schema:
                type: object
                properties:
                  '@id':
                    type: string
                  name:
                    type: string
                  code:
                    type: string

  /country/{iso}/players:
    get:
      summary: List Players By Country
      operationId: listCountryPlayers
      tags: [Countries, Players]
      parameters:
        - $ref: '#/components/parameters/Iso'
      responses:
        '200':
          description: Players for the given country
          content:
            application/json:
              schema:
                type: object
                properties:
                  players:
                    type: array
                    items:
                      type: string

  /country/{iso}/clubs:
    get:
      summary: List Clubs By Country
      operationId: listCountryClubs
      tags: [Countries, Clubs]
      parameters:
        - $ref: '#/components/parameters/Iso'
      responses:
        '200':
          description: Clubs for the given country
          content:
            application/json:
              schema:
                type: object
                properties:
                  clubs:
                    type: array
                    items:
                      type: string

  /puzzle:
    get:
      summary: Get Daily Puzzle
      operationId: getDailyPuzzle
      tags: [Puzzles]
      responses:
        '200':
          description: The daily puzzle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Puzzle'

  /puzzle/random:
    get:
      summary: Get Random Daily Puzzle
      operationId: getRandomPuzzle
      tags: [Puzzles]
      responses:
        '200':
          description: A randomly selected past daily puzzle
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Puzzle'

  /streamers:
    get:
      summary: List Chess.com Streamers
      operationId: listStreamers
      tags: [Streamers]
      responses:
        '200':
          description: Chess.com streamers and their channel URLs
          content:
            application/json:
              schema:
                type: object
                properties:
                  streamers:
                    type: array
                    items:
                      $ref: '#/components/schemas/Streamer'

  /leaderboards:
    get:
      summary: Get Leaderboards
      operationId: getLeaderboards
      tags: [Leaderboards]
      responses:
        '200':
          description: Top 50 players across all formats
          content:
            application/json:
              schema:
                type: object

components:
  parameters:
    Username:
      name: username
      in: path
      required: true
      description: All-lowercase Chess.com username
      schema:
        type: string
    Year:
      name: year
      in: path
      required: true
      description: Four-digit year
      schema:
        type: string
        pattern: '^[0-9]{4}$'
    Month:
      name: month
      in: path
      required: true
      description: Two-digit month
      schema:
        type: string
        pattern: '^(0[1-9]|1[0-2])$'
    ClubUrlId:
      name: url-ID
      in: path
      required: true
      description: Club URL-ID slug from chess.com/club/{url-ID}
      schema:
        type: string
    TournamentUrlId:
      name: url-ID
      in: path
      required: true
      description: Tournament URL-ID slug from chess.com/tournament/{url-ID}
      schema:
        type: string
    MatchId:
      name: ID
      in: path
      required: true
      description: Numeric team-match ID
      schema:
        type: integer
    Board:
      name: board
      in: path
      required: true
      description: Board number within the team match
      schema:
        type: integer
    Iso:
      name: iso
      in: path
      required: true
      description: ISO 3166-1 alpha-2 country code (e.g. US, RU, IN)
      schema:
        type: string
        minLength: 2
        maxLength: 2

  responses:
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Too Many Requests — parallel-request throttling
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'

  schemas:
    Player:
      type: object
      properties:
        '@id':
          type: string
          format: uri
        url:
          type: string
          format: uri
        username:
          type: string
        player_id:
          type: integer
        title:
          type: string
        status:
          type: string
        name:
          type: string
        avatar:
          type: string
          format: uri
        location:
          type: string
        country:
          type: string
          format: uri
        joined:
          type: integer
          description: Unix timestamp
        last_online:
          type: integer
        followers:
          type: integer
        is_streamer:
          type: boolean
        twitch_url:
          type: string
          format: uri
        fide:
          type: integer

    PlayerStats:
      type: object
      properties:
        chess_daily:
          $ref: '#/components/schemas/RatingProfile'
        chess_rapid:
          $ref: '#/components/schemas/RatingProfile'
        chess_blitz:
          $ref: '#/components/schemas/RatingProfile'
        chess_bullet:
          $ref: '#/components/schemas/RatingProfile'
        tactics:
          type: object
        puzzle_rush:
          type: object
        fide:
          type: integer

    RatingProfile:
      type: object
      properties:
        last:
          type: object
          properties:
            rating:
              type: integer
            date:
              type: integer
            rd:
              type: integer
        best:
          type: object
        record:
          type: object
          properties:
            win:
              type: integer
            loss:
              type: integer
            draw:
              type: integer

    Game:
      type: object
      properties:
        url:
          type: string
          format: uri
        pgn:
          type: string
        time_control:
          type: string
        end_time:
          type: integer
        rated:
          type: boolean
        fen:
          type: string
        time_class:
          type: string
          enum: [daily, rapid, blitz, bullet]
        rules:
          type: string
          enum: [chess, chess960, bughouse, kingofthehill, threecheck, crazyhouse]
        white:
          $ref: '#/components/schemas/GamePlayer'
        black:
          $ref: '#/components/schemas/GamePlayer'

    GamePlayer:
      type: object
      properties:
        rating:
          type: integer
        result:
          type: string
          enum: [win, checkmated, agreed, repetition, timeout, resigned, stalemate, lose, insufficient,
            '50move', abandoned, kingofthehill, threecheck, bughousepartnerlose]
        '@id':
          type: string
          format: uri
        username:
          type: string

    Club:
      type: object
      properties:
        '@id':
          type: string
        name:
          type: string
        club_id:
          type: integer
        country:
          type: string
        average_daily_rating:
          type: integer
        members_count:
          type: integer
        created:
          type: integer
        last_activity:
          type: integer
        admin:
          type: array
          items:
            type: string
        visibility:
          type: string
        join_request:
          type: string
        description:
          type: string

    ClubMember:
      type: object
      properties:
        username:
          type: string
        joined:
          type: integer

    Puzzle:
      type: object
      properties:
        title:
          type: string
        url:
          type: string
          format: uri
        publish_time:
          type: integer
        fen:
          type: string
        pgn:
          type: string
        image:
          type: string
          format: uri

    Streamer:
      type: object
      properties:
        username:
          type: string
        avatar:
          type: string
          format: uri
        twitch_url:
          type: string
          format: uri
        url:
          type: string
          format: uri
        is_live:
          type: boolean

    Error:
      type: object
      properties:
        code:
          type: integer
        message:
          type: string