Chess.com Published Data API
Free Chess.com published-data API with no key: player profiles, ratings, monthly game archives, clubs, tournaments and daily puzzles. Tested example.
Endpoint tested and returned HTTP 200 on 2026-08-20
What is the Chess.com Published Data API?
The Chess.com Published-Data API is a free, key-free API providing public player profiles, rating statistics, monthly game archives in PGN, club and tournament data, and the daily puzzle.
Chess.com is the largest chess platform, and its published-data API exposes everything public about a player: profile, current ratings across time controls, and complete game archives organised by month.
The monthly archive structure is deliberate and worth planning for. You first fetch a list of archive URLs — one per month the player was active — then fetch each. A player active for years means dozens of requests, so cache aggressively.
Quick facts
- Base URL
https://api.chess.com/pub- Authentication
- No API key required. Chess.com asks for a descriptive User-Agent with contact details.
- Rate limit
- No published hard limit, but parallel requests to the same endpoint are throttled — serialise them.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Chess.com Published Data API
Every request below was executed against the live API on 2026-08-20, and the response shown is the real body it returned — not an illustration.
1. Fetch a player profile
GET https://api.chess.com/pub/player/hikaru
curl 'https://api.chess.com/pub/player/hikaru'const res = await fetch("https://api.chess.com/pub/player/hikaru");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.chess.com/pub/player/hikaru", timeout=20)
res.raise_for_status()
print(res.json()){
"avatar": "https://images.chesscomfiles.com/uploads/v1/user/15448422.88c010c1.200x200o.3c5619f5441e.png",
"player_id": 15448422,
"@id": "https://api.chess.com/pub/player/hikaru",
"url": "https://www.chess.com/member/Hikaru",
"name": "Hikaru Nakamura",
"username": "hikaru",
"title": "GM",
"followers": 1406493,
"country": "https://api.chess.com/pub/country/US",
"location": "Florida",
"last_online": 1787160848,
"joined": 1389043258,
"status": "premium",
"is_streamer": true,
"twitch_url": "https://twitch.tv/gmhikaru",
"verified": false,
"league": "Legend",
"streaming_platforms": [
{
"type": "twitch",
"channel_url": "https://twitch.tv/gmhikaru"
}
]
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
player/<username> | path | Optional | Player profile. player/hikaru |
player/<username>/stats | path | Optional | Ratings and records per time control. stats |
player/<username>/games/archives | path | Optional | List of monthly archive URLs. games/archives |
puzzle | path | Optional | The daily puzzle. puzzle |
Response fields
player_id / usernameinteger|string- Player identifiers.
titlestring- Chess title such as GM or IM, when held.
followersinteger- Follower count.
countrystring- URL of the country resource — follow it for the name.
statusstring- Account status such as premium or basic.
last_online / joinedinteger- Unix timestamps.
What you can build with the Chess.com Published Data API
- Track a player's rating progression over time
- Download and analyse game archives
- Build a club or tournament leaderboard
- Embed the daily puzzle in a chess site
Common errors and how to fix them
Parallel requests throttled
Chess.com serialises concurrent requests to the same endpoint.
Fix: Make requests sequentially rather than in parallel, or you will be rate limited.
Country is a URL, not a name
Several fields are resource links.
Fix: Follow the URL to get the country name and code.
Enormous archive lists
One archive per active month.
Fix: Cache aggressively; historical months never change once complete.
Chess.com Published Data API — frequently asked questions
Is the Chess.com API free?
Yes, the published-data API is free with no key. Chess.com asks that you send a descriptive User-Agent with contact details.
How do I download someone's games?
Fetch /games/archives for a list of monthly archive URLs, then request each. A long-active player has many months, so cache — completed months never change.
Why do my parallel requests fail?
Chess.com serialises concurrent requests to the same endpoint and throttles the rest. Make requests sequentially.
How does it compare with the Lichess API?
Chess.com has far more players; Lichess is open source with a more generous API including an opening explorer. Both are free for public data.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Timestamp Converter
Convert timestamps to human-readable dates and dates back to timestamps. Auto-detects seconds vs milliseconds, shows local, UTC and ISO 8601 formats.
Chess.com Published Data is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-20; always check the official documentation before relying on this API in production, as terms and limits can change.