Games & Comics — entry 008 of 77

Chess.com

Verified Jul 2026

Chess.com's PubAPI is a keyless, read-only REST API covering public player profiles, game archives, clubs, tournaments, and leaderboards, returned as JSON-LD with ETag/Last-Modified caching for conditional requests. Serial polling is effectively unlimited if each response is awaited before the next call, but concurrent/parallel requests can trigger a 429, and the docs ask for an identifying User-Agent to avoid being blocked.

Chess.com's Published-Data API exposes read-only public data — player profiles, stats, game archives, and more — as keyless JSON-LD endpoints under api.chess.com/pub.

chessplayer-statstournamentskeyless
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score74out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 74 on greatapis.com
<a href="https://greatapis.com/api/chess-com/"><img src="https://greatapis.com/badge/chess-com.svg" alt="Scored 74 on greatapis.com"></a>

Auth quickstart

  1. No API key required — requests are public and keyless.
Stored keyNo key stored

Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.

Get a player's public profile

GEThttps://api.chess.com/pub/player/hikaru

200 application/json

{
  "@id": "https://api.chess.com/pub/player/hikaru",
  "url": "https://www.chess.com/member/hikaru",
  "username": "hikaru",
  "player_id": 15448422,
  "title": "GM",
  "status": "premium",
  "followers": 1500000,
  "country": "https://api.chess.com/pub/country/US",
  "joined": 1389043258,
  "last_online": 1751500000
}

Developer reference

Gotchas & limits

  • Send a descriptive User-Agent identifying your app and a contact method — generic or missing User-Agents are more likely to get blocked
  • Firing requests in parallel (instead of waiting for each response) can trigger HTTP 429 Too Many Requests
  • Responses are JSON-LD — a `Link` header points to the context, but they parse fine as plain JSON