PokéAPI is a free, read-only REST API at https://pokeapi.co/api/v2 covering every Pokémon, move, type, and game. Responses are big, deeply nested JSON — a good API to practice on. Every example below runs as-is.
None — no key, no signup. Resources are fetched by name or by id (/pokemon/pikachu and /pokemon/25 are the same). Be polite: the maintainers ask you to cache responses rather than hammer the API.
Full reference: https://pokeapi.co/docs/v2
Types, abilities, base stats, sprites, and moves for one Pokémon. The full response is ~290 KB, mostly the move list.
curl https://pokeapi.co/api/v2/pokemon/pikachu
{
"id": 25,
"name": "pikachu",
"height": 4,
"weight": 60,
"base_experience": 112,
"types": [
{
"slot": 1,
"type": {
"name": "electric"
}
}
],
"abilities": [
{
"ability": {
"name": "static"
},
"is_hidden": false
},
{
"ability": {
"name": "lightning-rod"
},
"is_hidden": true
}
],
"stats": [
{
"base_stat": 35,
"stat": {
"name": "hp"
}
},
{
"base_stat": 55,
"stat": {
"name": "attack"
}
},
{
"base_stat": 40,
"stat": {
"name": "defense"
}
}
],
"sprites": {
"front_default": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/25.png"
}
}
Every list endpoint pages with limit and offset, and hands you the next URL.
curl "https://pokeapi.co/api/v2/pokemon?limit=5&offset=0"
{
"count": 1351,
"next": "https://pokeapi.co/api/v2/pokemon?offset=5&limit=5",
"previous": null,
"results": [
{
"name": "bulbasaur",
"url": "https://pokeapi.co/api/v2/pokemon/1/"
},
{
"name": "ivysaur",
"url": "https://pokeapi.co/api/v2/pokemon/2/"
},
{
"name": "venusaur",
"url": "https://pokeapi.co/api/v2/pokemon/3/"
},
{
"name": "charmander",
"url": "https://pokeapi.co/api/v2/pokemon/4/"
},
{
"name": "charmeleon",
"url": "https://pokeapi.co/api/v2/pokemon/5/"
}
]
}
What a type is strong and weak against, plus every Pokémon of that type.
curl https://pokeapi.co/api/v2/type/electric
{
"name": "electric",
"damage_relations": {
"no_damage_to": [
{
"name": "ground"
}
],
"half_damage_to": [
{
"name": "grass"
},
{
"name": "electric"
},
{
"name": "dragon"
}
],
"double_damage_to": [
{
"name": "flying"
},
{
"name": "water"
}
],
"no_damage_from": [],
"half_damage_from": [
{
"name": "flying"
},
{
"name": "steel"
},
{
"name": "electric"
}
],
"double_damage_from": [
{
"name": "ground"
}
]
},
"pokemon": [
{
"slot": 1,
"pokemon": {
"name": "pikachu",
"url": "https://pokeapi.co/api/v2/pokemon/25/"
}
},
{
"slot": 1,
"pokemon": {
"name": "raichu",
"url": "https://pokeapi.co/api/v2/pokemon/26/"
}
}
]
}
Evolution line, generation, capture rate, and Pokédex text in every language.
curl https://pokeapi.co/api/v2/pokemon-species/pikachu
{
"name": "pikachu",
"generation": {
"name": "generation-i"
},
"evolves_from_species": {
"name": "pichu"
},
"capture_rate": 190,
"is_legendary": false,
"flavor_text_entries": [
{
"flavor_text": "Possesses cheek sacs in which it stores electricity. This clever\nforest-dweller roasts tough berries with an electric shock before\nconsuming them.",
"language": {
"name": "en"
},
"version": {
"name": "legends-arceus"
}
}
]
}
What an ability does and which Pokémon can have it.
curl https://pokeapi.co/api/v2/ability/static
{
"name": "static",
"effect_entries": [
{
"short_effect": "Has a 30% chance of paralyzing attacking Pokémon on contact.",
"language": {
"name": "en"
}
}
],
"pokemon": [
{
"is_hidden": false,
"slot": 1,
"pokemon": {
"name": "pikachu",
"url": "https://pokeapi.co/api/v2/pokemon/25/"
}
},
{
"is_hidden": false,
"slot": 1,
"pokemon": {
"name": "raichu",
"url": "https://pokeapi.co/api/v2/pokemon/26/"
}
}
]
}