API Guide

Pokemon Champions Battle Data API

Use Showdown internal names to fetch current battle data, dated daily snapshots, metadata, and direct CSV assets for your app.

/api /api/pokemon/:name /api/battle/:format/:name
Start Here

Quick start

Use Showdown internal names in API routes. Without a season or days query, battle rows come from the current root folders.

const index = await fetch("https://championsbattledata.com/api")
  .then((response) => response.json());

const garchomp = await fetch(
  "https://championsbattledata.com/api/pokemon/garchomp?format=Doubles"
).then((response) => response.json());

const dailyRows = await fetch(
  "https://championsbattledata.com/api/battle/Doubles/garchomp?season=M4&days=7"
).then((response) => response.json());
Static Assets

Folder structure

The root Doubles and Singles folders contain the current/latest data. Dated folders contain daily snapshots grouped by season and date.

API route names accept Pokemon Showdown internal IDs such as garchomp, raichualola, and taurospaldeaaqua.

pokemon_champions_assets/
  battle_data/
    Doubles/
      Garchomp.csv                    <- current Doubles data
      Alolan Raichu.csv
    Singles/
      Garchomp.csv                    <- current Singles data
    M4/
      16_07_2026/
        Doubles/
          Garchomp.csv                <- daily Doubles snapshot
        Singles/
          Garchomp.csv                <- daily Singles snapshot
  metadata/
    Tauros.csv                        <- one file with all Tauros forms
  pokemon/
    Tauros.png
    Paldean Tauros Aqua Breed.png
  types/
    Dragon.png
Name Matching

Pokemon Showdown internal names

Use standard Pokemon Showdown IDs in JSON API routes. Human-readable names and site slugs still work.

GET /api/battle/Doubles/garchomp
GET /api/battle/Doubles/rotomwash
GET /api/battle/Doubles/taurospaldeaaqua
GET /api/battle/Singles/raichualola
GET /api/battle/Singles/taurospaldeaaqua
GET /api/battle/Singles/basculegionf
showdownId
The matched Pokemon Showdown internal ID, for example raichualola.
showdownName
The standardized Showdown species name, for example Raichu-Alola.
saved_name
The form-specific site/file name still used by raw CSV and sprite assets.
Endpoint 01

Index

Use the index first. It lists Pokemon, Showdown IDs, available current and daily data folders, formats, file paths, sprites, typing, stats, and summaries.

GET/api
GET/api/index
GET/data/pokemon-index.json
defaultSeason
Current, backed by battle_data/Doubles and battle_data/Singles.
dailyDataFolders
Dated snapshot folders such as M4/16_07_2026.
pokemon[].showdownId
The Pokemon Showdown internal ID accepted by API routes.
pokemon[].battleDataCsvs
Current and daily source CSV paths for that Pokemon.
Endpoint 02

Pokemon record

Returns one indexed Pokemon. Add format to include the matching summary and CSV path. Add days to include newest-first recent daily CSVs and summaries for that format.

GET/api/pokemon/garchomp?format=Doubles
GET/api/pokemon/taurospaldeaaqua?format=Doubles&season=M4&days=7
{
  "name": "Garchomp",
  "showdownId": "garchomp",
  "requestedFormat": "Doubles",
  "requestedSeason": "Current",
  "battleDataCsv": {
    "season": "Current",
    "format": "Doubles",
    "path": "pokemon_champions_assets/battle_data/Doubles/Garchomp.csv"
  },
  "dailyBattleDataCsvs": [
    {
      "season": "M4",
      "date": "23_07_2026",
      "format": "Doubles",
      "path": "pokemon_champions_assets/battle_data/M4/23_07_2026/Doubles/Garchomp.csv"
    }
  ],
  "dailyBattleSummary": [
    {
      "season": "M4",
      "date": "23_07_2026",
      "format": "Doubles",
      "source": "pokemon_champions_assets/battle_data/M4/23_07_2026/Doubles/Garchomp.csv",
      "summary": { "top": { "move": { "name": "Dragon Claw" } } }
    }
  ]
}
Endpoint 03

Battle rows

Returns parsed rows from the current battle-data CSV by default. Use this for moves, items, teammates, natures, spreads, and abilities.

GET/api/battle/Doubles/garchomp
GET/api/battle/Singles/raichualola
{
  "pokemon": "Garchomp",
  "showdownId": "garchomp",
  "format": "Doubles",
  "season": "Current",
  "source": "pokemon_champions_assets/battle_data/Doubles/Garchomp.csv",
  "rows": [
    {
      "position": 1,
      "category": "move",
      "rank": 1,
      "name": "Earthquake",
      "percentage": "90.3%",
      "percentage_value": 90.3
    }
  ]
}
Daily Snapshots

Last x days of daily data

Add days= to the battle endpoint to fetch the most recent dated snapshots for one Pokemon and format, returned newest first. Add season=M4 to limit the daily search to a season folder.

GET/api/battle/Doubles/garchomp?days=7
GET/api/battle/Doubles/garchomp?season=M4&days=7
{
  "pokemon": "Garchomp",
  "showdownId": "garchomp",
  "format": "Doubles",
  "requestedDays": 7,
  "season": "M4",
  "daily": [
    {
      "season": "M4",
      "date": "23_07_2026",
      "source": "pokemon_champions_assets/battle_data/M4/23_07_2026/Doubles/Garchomp.csv",
      "columns": ["pokemon", "column_position", "category", "rank", "name", "percentage"],
      "rows": []
    }
  ]
}
days
Integer from 1 to 31.
season
Optional season folder such as M4. If omitted, the newest daily snapshots across seasons are used.
daily[].date
Date folder in DD_MM_YYYY format.
Endpoint 04

Metadata rows

Returns all forms for a Pokémon from a single metadata file. Request by base name (e.g. tauros) — the response contains one row per form, each identified by its form-specific saved_name.

Use saved_name to build paths to sprites and battle data. Use base_name to group forms together.

GET/api/metadata/tauros
{
  "pokemon": "Tauros",
  "source": "pokemon_champions_assets/metadata/Tauros.csv",
  "rows": [
    {
      "title": "Tauros [Paldean Form (Aqua Breed)]",
      "base_name": "Tauros",
      "saved_name": "Paldean Tauros Aqua Breed",
      "types": "Fighting/Water",
      "abilities": "Intimidate|Anger Point|Cud Chew",
      "image_path": "pokemon_champions_assets/pokemon/Paldean Tauros Aqua Breed.png",
      "form": "Paldean Aqua Breed",
      "hp": 150, "atk": 130, "def": 125,
      "spa": 50, "spd": 90, "spe": 120, "total": 610
    },
    {
      "title": "Tauros [Paldean Form (Blaze Breed)]",
      "base_name": "Tauros",
      "saved_name": "Paldean Tauros Blaze Breed",
      "types": "Fighting/Fire",
      "abilities": "Intimidate|Anger Point|Cud Chew",
      "image_path": "pokemon_champions_assets/pokemon/Paldean Tauros Blaze Breed.png",
      "form": "Paldean Blaze Breed",
      "hp": 150, "atk": 130, "def": 125,
      "spa": 50, "spd": 90, "spe": 120, "total": 610
    },
    {
      "title": "Tauros",
      "base_name": "Tauros",
      "saved_name": "Tauros",
      "types": "Normal",
      "abilities": "Intimidate|Anger Point|Sheer Force",
      "image_path": "pokemon_champions_assets/pokemon/Tauros.png",
      "form": "",
      "hp": 150, "atk": 120, "def": 115,
      "spa": 60, "spd": 90, "spe": 130, "total": 610
    }
  ]
}
base_name
The shared Pokémon name. Matches the metadata filename and the /api/metadata/:name route parameter.
saved_name
The form-specific name used for battle data CSVs, sprites, and the /api/battle/:format/:name route.
form
Human-readable form label. Empty string for the base form.
abilities
Pipe-separated list of all abilities for this form.
Direct Files

Raw CSV and images

Use static paths for downloads, spreadsheet imports, notebooks, sprites, and type icons. Raw CSV and sprite paths still use the site/file name, while JSON API routes accept Showdown IDs.


GET /pokemon_champions_assets/battle_data/Doubles/Garchomp.csv
GET /pokemon_champions_assets/battle_data/Singles/Garchomp.csv


GET /pokemon_champions_assets/battle_data/M4/16_07_2026/Doubles/Garchomp.csv
GET /pokemon_champions_assets/battle_data/M4/16_07_2026/Singles/Garchomp.csv


GET /pokemon_champions_assets/metadata/Tauros.csv


GET /pokemon_champions_assets/pokemon/Tauros.png
GET /pokemon_champions_assets/pokemon/Paldean%20Tauros%20Aqua%20Breed.png


GET /pokemon_champions_assets/types/Dragon.png
Client Example

Filtering with the index

For client-side tools, load the index once and filter summary data before requesting full rows.

const index = await fetch("/api")
  .then((response) => response.json());

const fastGroundTypes = index.pokemon.filter((entry) => {
  const stats = entry.summary?.baseStats ?? {};
  const types = entry.summary?.types ?? [];

  return types.includes("Ground")
    && Number(stats.speed ?? 0) >= 100;
});
Behavior

Response behavior

  • API endpoints return JSON.
  • CSV files and images remain available as static assets.
  • Pokemon route names are matched case-insensitively and accept Pokemon Showdown internal IDs.
  • Without days, battle endpoints use the current root Doubles or Singles folder.
  • With days, battle endpoints return recent dated daily snapshots from folders like M4/16_07_2026.
  • CORS is enabled for browser apps on other domains.