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
DefaultMake 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 bulkPass 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.
| Header | Meaning |
|---|---|
| X-RateLimit-Tier | Which tier you fall under: anonymous (no key) or authenticated (JWT or API key resolved). |
| X-RateLimit-Limit-Min | Per-minute ceiling for your tier (60 anonymous, 600 authenticated). |
| X-RateLimit-Limit-Day | Per-day ceiling for your tier (5 000 anonymous, 100 000 authenticated). |
| X-RateLimit-Remaining-Min | Calls left in the current minute window. Slow down when this gets close to zero. |
| X-RateLimit-Remaining-Day | Calls left in the current day window. Resets at the same wall-clock minute every day. |
| Retry-After | Sent 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).
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.
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.
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.
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.
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.
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.
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.
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.
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