Creatures, trainers and a battle simulator. Practice CRUD, Bearer auth, nested resources, pagination and optimistic concurrency.
The Pokémon API holds creatures, trainers and a battle endpoint that resolves a fight from the two teams you send it. The battle result is computed, not stored, which makes it the catalog's clearest example of a POST that is neither a create nor idempotent — and a good target for contract tests over a non-trivial response shape.
Base URL: https://funapi.dev/api/pokemon/v1 · 10 endpoints · OpenAPI 3.1 spec and Postman collection available. New here? Read the getting started guide.
eight starters and friends
GET /pokemon/v1/pokemon — List Pokémon (paginated, filter by type)GET /pokemon/v1/pokemon/{id} — Get one PokémonGET /pokemon/v1/pokemon/random — A random Pokémon (wild encounter)POST /pokemon/v1/pokemon — Catch a new Pokémon (create) (requires Bearer auth)PUT /pokemon/v1/pokemon/{id} — Update a Pokémon (level up, heal, etc.) (requires Bearer auth)DELETE /pokemon/v1/pokemon/{id} — Release a Pokémon (requires Bearer auth)three trainers, their rosters
GET /pokemon/v1/trainers — List all trainersGET /pokemon/v1/trainers/{id}/pokemon — Get a trainer's roster (nested resource)simulate a fight, get a random winner
POST /pokemon/v1/battles — Simulate a battle between two Pokémon (requires Bearer auth)GET /pokemon/v1/battles — List battle history (empty until you POST one)