Wizard World API
Free wizarding world API with no key: elixirs, spells, houses, ingredients and wizards, with effects, side effects, difficulty and inventor links. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Wizard World API?
Wizard World is a free, key-free API covering the Harry Potter universe. The elixirs endpoint returns each potion with its effect, side effects, brewing difficulty, ingredient list and the wizards credited with inventing it.
Fan-data APIs usually stop at a flat list of characters. This one is modelled properly: elixirs link to ingredient objects and to inventor objects, each with their own id, so you can walk from a potion to its ingredients to every other potion using them without any string matching. That relational structure is what makes it useful for a quiz generator or a browsable reference rather than just a list.
The nulls are honest rather than sloppy. `characteristics`, `time` and `manufacturer` are null on many entries, and `difficulty` frequently reads `Unknown` — because the source material simply does not say. An API that invented values for those would be worse. Alongside elixirs there are endpoints for spells, houses, ingredients and wizards, each supporting query filters, and the whole thing sends permissive CORS headers so it works directly from browser JavaScript.
Quick facts
- Base URL
https://wizard-world-api.herokuapp.com- Authentication
- No API key and no account.
- Rate limit
- No published limit. Data is static — cache it.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Wizard World API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List elixirs with their ingredients
GET https://wizard-world-api.herokuapp.com/Elixirs
curl 'https://wizard-world-api.herokuapp.com/Elixirs'const res = await fetch("https://wizard-world-api.herokuapp.com/Elixirs");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://wizard-world-api.herokuapp.com/Elixirs", timeout=20)
res.raise_for_status()
print(res.json())[
{
"id": "0106fb32-b00d-4d70-9841-4b7c2d2cca71",
"name": "Fergus Fungal Budge",
"effect": "Treats ringworm, fungicide",
"sideEffects": "Potential negative side effects if used by elves",
"characteristics": null,
"time": null,
"difficulty": "Unknown",
"ingredients": [
{
"id": "4ff5aaf2-776f-43c6-9896-c79c67dc90c5",
"name": "Neem oil"
},
{
"id": "846be123-c40f-4156-91f4-800305df7485",
"name": "Jewelweed"
},
{
"id": "a08e7390-a362-4013-b413-11b151fae20e",
"name": "Onion juice"
}
],
"inventors": [],
"manufacturer": null
},
{
"id": "021b40b3-68ba-4fde-a595-dbb07500674d",
"name": "Manegro Potion",
"effect": "Rapid hair growth",
"sideEffects": null,
"characteristics": null,
"time": null,
"difficulty": "Unknown",
"ingredients": [],
"inventors": [],
"manufacturer": null
},
{
"id": "024f56cc-ccd2-4d71-adbd-3cb383c2fe87",
"name": "Potion N. 220",
"effect": null,
"sideEffects": null,
"characteristics": null,
"time": null,
"difficulty": "Unknown",
"ingredients": [],
"inventors": [],
"manufacturer": null
},
{
"id": "06beea01-1e2a-4344-9da3-c27abc4a4580",
"name": "Rudimentary body potion",
"effect": "Helps restore non-corporeal wizards to a rudimentary bodies/sustains rudimentary bodies",
"sideEffects": null,
"characteristics": null,
"time": null,
"difficulty": "Unknown",
"ingredients": [
{
"id": "97128d90-bf57-49e5-b314-417Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
Name | query | Optional | Filter elixirs by name. Manegro |
Difficulty | query | Optional | Filter by brewing difficulty. Advanced |
Ingredient | query | Optional | Return elixirs containing a given ingredient. Jewelweed |
/Spells | path | Optional | Spells with incantation, effect, light colour and type. |
/Houses | path | Optional | Hogwarts houses with heads, ghosts and traits. |
/Wizards | path | Optional | Wizards with the elixirs they invented. |
Response fields
(root)array- Elixirs. No envelope object.
idstring- UUID for the elixir.
namestring- Elixir name, such as `Fergus Fungal Budge`.
effectstring- What the potion does.
sideEffectsstring- Adverse effects. Null where the source material records none.
characteristicsstring- Appearance and properties. Null on many entries.
timestring- Brewing time. Frequently null.
difficultystring- Brewing difficulty, or `Unknown` where the books do not say.
ingredientsarray- Ingredient objects with their own `id` and `name`, so you can pivot to other elixirs using the same ingredient.
inventorsarray- Wizard objects credited with inventing the elixir. Often empty.
manufacturerstring- Producer where one is named. Usually null.
What you can build with the Wizard World API
- Build a wizarding world reference or quiz application
- Practise working with relational JSON and linked entities
- Generate trivia questions from effects and side effects
- Demonstrate filtering and joining in a teaching example
Common errors and how to fix them
Null fields everywhere
The source material does not record every attribute.
Fix: Render conditionally. Null here means unknown, and inventing a value would be worse.
Empty inventors array
Most potions have no recorded inventor.
Fix: Treat an empty array as normal rather than as a failed lookup.
Filter returns nothing
Query parameter names are capitalised.
Fix: It is `Name` and `Difficulty`, not lowercase. The Swagger document lists the exact spellings.
Slow first response
The host sleeps between requests on a free tier.
Fix: Expect a cold start of a few seconds after idle. Cache aggressively; the data never changes.
Wizard World API — frequently asked questions
Is the Wizard World API free?
Yes, free with no key or account, and it sends permissive CORS headers so it works from browser JavaScript.
What does it cover besides potions?
Spells with incantations and effects, Hogwarts houses with their heads and ghosts, ingredients, and wizards linked to the elixirs they invented.
Why are so many fields null?
Because the books do not record brewing times, appearances or manufacturers for most potions. The API returns null rather than inventing plausible values, which is the right choice.
How do the relationships work?
Ingredients and inventors come back as full objects with their own ids, so you can walk from an elixir to an ingredient and then find every other elixir using it, with no string matching.
Tools that pair with this API
Random List Picker
Paste a list and pick random winners without repeats, or shuffle the whole list. A fair random name and item picker for giveaways, draws and raffles.
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Compare Two Lists
Paste two lists and instantly see items in both, only in list A, only in list B, and the combined set — with case-insensitive and trim options.
Wizard World API is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.