Quickstart

PokéAPI requires zero configuration. There are no API keys to generate, no accounts to create, and no SDKs to install. The fastest path from zero to Pokémon data is a single HTTP request.

Make your first request

  1. Pick a Pokémon

    PokéAPI accepts both numeric IDs and lowercase hyphenated names. Let's start with Pikachu (ID 25):

    curl https://pokeapi.co/api/v2/pokemon/pikachu
  2. Read the response

    The response is a large JSON object. Here are the most useful top-level fields:

    {
      "id": 25,
      "name": "pikachu",
      "base_experience": 112,
      "height": 4,
      "weight": 60,
      "types": [
        {
          "slot": 1,
          "type": { "name": "electric", "url": "https://pokeapi.co/api/v2/type/13/" }
        }
      ],
      "stats": [
        { "base_stat": 35, "effort": 0, "stat": { "name": "hp", "url": "..." } },
        { "base_stat": 55, "effort": 0, "stat": { "name": "attack", "url": "..." } },
        { "base_stat": 90, "effort": 2, "stat": { "name": "speed", "url": "..." } }
      ],
      "sprites": {
        "front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/25.png"
      }
    }
  3. Follow a link

    Most fields that reference other resources include a url. You can fetch that URL to get the full resource:

    curl https://pokeapi.co/api/v2/type/13/

    This returns the full Electric type resource, including damage relations to other types.

Using JavaScript (fetch)

PokéAPI uses standard HTTPS — no special client needed. Here is a minimal browser/Node.js example:

async function getPokemon(nameOrId) {
  const res = await fetch(`https://pokeapi.co/api/v2/pokemon/${nameOrId}`);
  if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
  return res.json();
}
 
const pikachu = await getPokemon('pikachu');
console.log(pikachu.name, pikachu.types.map(t => t.type.name));
// → "pikachu" ["electric"]

All responses include Cache-Control: public, max-age=86400, s-maxage=86400 headers. Respect the cache — it's what keeps the API free.

Using a community wrapper

If you prefer a typed client, community wrappers exist for most languages:

npm install pokeapi-js-wrapper
import Pokedex from 'pokeapi-js-wrapper';
 
const P = new Pokedex();
const pikachu = await P.getPokemonByName('pikachu');

What's next?