Skip to content
Public API · v1

Pokékipe Public API

Free competitive Pokémon analytics, derived from Smogon's monthly usage stats and refreshed every month. No account needed for casual use; mint a personal key from Account Settings to lift the rate-limit ceiling for bulk pulls.

  • Endpoints

    100+

  • Formats covered

    30+

  • Refresh

    Monthly

  • Auth

    Optional

  • License

    CC BY 4.0

Why this exists

What this API is, and what it isn't

Four things to know before you write a single line of code against /api/v1/.

What this API is

A read-only JSON surface over the world's competitive Pokémon data. Ask "what's the meta in Gen 9 OU at 1500+ ELO this month?" or "who countered this Pokémon in this tournament's top cut?" and get a single-call answer with stable, documented shapes.

Where the data comes from

Smogon's monthly battle logs (the public chaos JSON), official tournament feeds (Pokémon Company, VGC, Smogon Tour), and community sources like Limitless TCG for community-run events. Pokékipe runs its own ingestion, normalization, and enrichment pipeline on top, then re-exposes the cleaned result.

What this API is not

Not a live Pokémon Showdown bridge, not a battle simulator, not a damage calculator endpoint, not a teambuilding engine. Those tools live on the website. The API is the data layer they sit on.

Credit upstream

Credit where credit is due. Smogon, the chaos-format JSON exporters, and the community of players who play the games each month are why this dataset exists. Pokékipe makes it interrogable; it does not own the underlying data.

Get started

Your first call, in 30 seconds

Three copy-paste examples that fetch the format catalog. No API key, no setup, no signup. Pick your language tab, paste, run.

curl -s https://pokekipe.com/api/v1/formats \
  | jq '.[0:3]'

Replace the path with any endpoint listed in the reference below. The first call should return in under a second on a warm cache.

Authentication

Authentication and rate limits

Anonymous calls work for casual usage. A personal key (free, generated from your account settings) lifts the rate-limit ceiling for analysts and tool-builders who pull data in bulk. Keys never unlock new endpoints; they only raise the ceiling.

Anonymous, no key

Default

Make calls without any header. The bucket is keyed on your IP, so a small script or an LLM agent making a handful of requests per session will never trip the limit.

  • No account, no signup, no header to set.
  • Per-IP bucket, suitable for ad-hoc scripts and LLM agent tool-use.
  • Hits a 429 if you sustain bulk pulls; switch to a personal key.

per minute

60

per day

5,000

Authenticated, with a personal key

Recommended for bulk

Pass your key as X-API-Key (or Authorization: Bearer pk_live_…). Anonymous calls keep working alongside; the key only lifts the ceiling, it doesn't unlock new endpoints.

  • Per-user bucket: your IP changes won't reset the count.
  • Higher ceilings on every per-route limit.
  • Up to 5 active keys per account, revocable any time.

per minute

600

per day

100,000

Headers on every response

Every successful response carries the rate-limit headers below so your client can self-pace without retries. Read them once per response and back off the moment Remaining hits a few requests, not zero.

HeaderMeaning
X-RateLimit-TierWhich tier you fall under: anonymous (no key) or authenticated (JWT or API key resolved).
X-RateLimit-Limit-MinPer-minute ceiling for your tier (60 anonymous, 600 authenticated).
X-RateLimit-Limit-DayPer-day ceiling for your tier (5 000 anonymous, 100 000 authenticated).
X-RateLimit-Remaining-MinCalls left in the current minute window. Slow down when this gets close to zero.
X-RateLimit-Remaining-DayCalls left in the current day window. Resets at the same wall-clock minute every day.
Retry-AfterSent on 429 only. Wait this many seconds before retrying — usually under 60 for the per-minute window.

Errors

Errors you might see

Standard HTTP status codes. The body is always JSON with a "detail" field describing what went wrong. Treat 4xx as a contract problem (your request) and 5xx as our problem (retry with backoff).

200

OK

OK. The body is the JSON payload documented in the reference. Empty arrays mean "no rows", not "missing" — handle them as data, not as a failure.

304

Not Modified

Not Modified. Cache headers were validated. Use the cached body, no re-parse needed. Returned automatically when you send If-None-Match or If-Modified-Since.

400

Bad Request

Bad Request. A query parameter or body shape is wrong. The detail message names the exact field. Don't retry without fixing the input.

401

Unauthorized

Unauthorized. The request needed an API key or session and got neither, or the credentials were invalid/revoked. Don't keep firing — re-issue the credential.

404

Not Found

Not Found. The path or resource doesn't exist. For per-Pokémon routes, this often means the format has no usage data yet for that Pokémon, not a typo on your side.

429

Too Many Requests

Too Many Requests. You hit the rate-limit ceiling. Read Retry-After and wait — exponential backoff is good etiquette but rarely needed since the window is short.

500

Server Error

Internal Server Error. Something blew up on our side. Retry once after a few seconds; if it persists, ping us on Discord with the request URL.

503

Service Unavailable

Service Unavailable. We're either deploying or temporarily overloaded. Retry with backoff. Status updates are posted to the community Discord.

Ground rules

Terms of use

Four ground rules. Read once, save your future self a Discord ping.

Credit upstream

Attribution required when redistributing or republishing. Credit Pokékipe (link to https://pokekipe.com), and credit Smogon for the underlying chaos JSON they publish each month.

Best-effort, no SLA

Best-effort, no SLA. The data is served "as is" with no uptime guarantee. Cache aggressively and degrade gracefully when an endpoint is slow or returns a 429.

Versioning

Schemas under /api/v1/ stay backwards-compatible within the v1 lifecycle. Breaking changes go to /api/v2/ with prior notice on Discord and a sunset header on the deprecated path.

Commercial use

Commercial use is allowed under CC BY 4.0. If you build something on top of this API, we'd love to hear about it on the community Discord.

Reference · OpenAPI 3Live, three-pane

Browse every endpoint, all in one place

Browse every endpoint with descriptions, parameter tables, request and response schemas, and code samples in curl, JavaScript, and Python. Search the whole API in one box, deep-link to any operation, share the URL.

  • 100+ endpoints
  • ·
  • 3-pane navigation, content, samples
  • ·
  • full-text search
  • ·
  • live request samples
Pokékipe All-in-One hub for Pokémon strategy