Public statistics exports
Download aggregate character (hero) statistics across all recorded 1v1 games as CSV. Two endpoints:
| Endpoint | Returns |
| ---------------------------------------- | --------------------------------------------- |
| GET /api/v1/public/hero-stats | Per-character win/loss counts and win rate |
| GET /api/v1/public/hero-stats/matchups | Head-to-head matchup rates (Hero A vs Hero B) |
The data is aggregate and non-personal — platform-wide totals only, with no per-player or per-competition breakdown and no PII. "Public" describes the data; the endpoints themselves still require authentication (see below).
Authentication
Both endpoints require a signed-in identity. Either auth mode works, and there is no entitlement gate — any signed-in user, not just Personal API early-access accounts:
# Personal API key
curl -H "Authorization: Bearer ttl_user_xxxxx" \
"https://tabletopleague.com/api/v1/public/hero-stats?gameSystem=unmatched" \
-o hero-win-rates.csv
# Logged-in session cookie
curl --cookie cookies.txt \
"https://tabletopleague.com/api/v1/public/hero-stats/matchups?gameSystem=unmatched" \
-o hero-matchups.csv
An unauthenticated request gets 401. See Authentication for
minting a key.
Query parameters
| Param | Type | Description |
| ------------ | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| gameSystem | string (optional) | Game-system slug (e.g. unmatched). Omit to export every active system — each row carries a Game System column. Unknown slug ⇒ 404. |
Response
Each endpoint streams a UTF-8 CSV file (Content-Type: text/csv,
Content-Disposition: attachment). Responses are private, no-store and are
never edge-cached.
/api/v1/public/hero-stats columns:
Game System, Hero, Hero Slug, Games Played, Wins, Losses, Win Rate %
/api/v1/public/hero-stats/matchups columns:
Game System, Hero A, Hero A Slug, Hero B, Hero B Slug, Games, Hero A Wins, Hero A Win Rate %
Rate limit
30 requests per minute per IP, per endpoint. Exceeding the limit returns
429 with X-RateLimit-* headers.
Attribution (required for public posting)
Personal, community, and other non-commercial use is free. If you publicly post these exports or derivatives of them, you must credit:
Data: Tabletop League (tabletopleague.com)
Link the credit to tabletopleague.com wherever the medium supports links. Commercial resale of these datasets or their derivatives is prohibited. Full terms: API Terms.
Downloading from the site
Signed-in users can grab the same two CSVs straight from the character stats
page — the Win rates CSV and Matchups CSV buttons at
/games/[slug]/stats/characters. The API is for scripted or repeated pulls.