BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
curl 'https://wizard-world-api.herokuapp.com/Elixirs'
JavaScript (fetch)
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);
Python (requests)
import requests

res = requests.get("https://wizard-world-api.herokuapp.com/Elixirs", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
[
  {
    "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-417

Parameters

ParameterTypeRequiredDescription
NamequeryOptionalFilter elixirs by name. Manegro
DifficultyqueryOptionalFilter by brewing difficulty. Advanced
IngredientqueryOptionalReturn elixirs containing a given ingredient. Jewelweed
/SpellspathOptionalSpells with incantation, effect, light colour and type.
/HousespathOptionalHogwarts houses with heads, ghosts and traits.
/WizardspathOptionalWizards 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

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.