BYTETOOLS

Open5e API

Free tabletop RPG API with no key: monsters, spells, magic items and rules from the 5e SRD plus Tome of Beasts, Level Up A5e and other open sources. Live example.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Open5e API?

Open5e is a free, key-free API for fifth-edition tabletop content. It serves monsters, spells, magic items, classes, races and rules from the 5e SRD and from other openly licensed publishers such as Kobold Press and EN Publishing, each record tagged with the document it came from.

Publisher provenance is the feature that justifies a second 5e API existing at all. Every record carries a `document` object naming the source, its publisher and its game system, so the aboleth in our capture is explicitly from EN Publishing's Monstrous Menagerie under the Advanced 5th Edition system — not the SRD version. That matters enormously in play: two monsters with the same name and very different stat blocks will both come back from an unfiltered query, and shipping the wrong one into a combat tracker is a bad afternoon for somebody.

The other thing to settle before writing a line of client code is which API version you are on. v1 and v2 coexist with different shapes and even different resource names — v1 has `monsters` keyed by `slug`, v2 has `creatures` keyed by `key`, and the nested objects differ throughout. Both are live and neither is going away soon, so pick one, pin it in your base URL, and do not mix. Pagination is Django REST framework's standard `count` / `next` / `previous` / `results`, with absolute URLs in the links.

Quick facts

Base URL
https://api.open5e.com
Authentication
No key or account. The API is open source and self-hostable if you would rather not depend on the public instance.
Rate limit
No rate-limit headers are returned. The content is static between publisher releases, so fetch and cache rather than querying live.
Pricing
Free and open source. The underlying content is published under open licences.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Open5e 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. Fetch a monster stat block from the v2 API

GET https://api.open5e.com/v2/creatures/?limit=1

curl
curl 'https://api.open5e.com/v2/creatures/?limit=1'
JavaScript (fetch)
const res = await fetch("https://api.open5e.com/v2/creatures/?limit=1");
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://api.open5e.com/v2/creatures/?limit=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200 (truncated)
{
  "count": 3541,
  "next": "https://api.open5e.com/v2/creatures/?limit=1&page=2",
  "previous": null,
  "results": [
    {
      "key": "a5e-mm_aboleth",
      "name": "Aboleth",
      "document": {
        "name": "Monstrous Menagerie",
        "key": "a5e-mm",
        "type": "SOURCE",
        "display_name": "Monstrous Menagerie",
        "publisher": {
          "name": "EN Publishing",
          "key": "en-publishing"
        },
        "gamesystem": {
          "name": "Advanced 5th Edition",
          "key": "a5e"
        },
        "permalink": "https://enpublishingrpg.com/collections/level-up-advanced-5th-edition-a5e/products/level-up-monstrous-menagerie-a5e"
      },
      "type": {
        "name": "Aberration",
        "key": "aberration"
      },
      "size": {
        "name": "Large",
        "key": "large"
      },
      "challenge_rating": 11.0,
      "proficiency_bonus": null,
      "speed": {
        "walk": 10,
        "unit": "feet",
        "swim": 40
      },
      "speed_all": {
        "unit": "feet",
        "walk": 10,
        "crawl": 5,
        "hover": false,
        "fly": 0,
        "burrow": 0,
        "climb": 5,
        "swim": 40
      },
      "category": "Monsters",
      "subcategory": null,
      "alignment": "chaotic evil",
      "languages": {
        "as_string": "Deep Speech, telepathy 120 ft.",
        "data": [
          {
            "name": "Deep Speech",
            "key": "deep-speech",
            "desc": "Typical speakers include aboleths and cloakers. It is only spoken."
          }
        ]
      },
      "armor_class"

Parameters

ParameterTypeRequiredDescription
limitqueryOptionalPage size. Stat blocks are large, so keep this modest when browsing. 1
pagequeryOptionalPage number. Prefer following the absolute `next` URL rather than constructing it. 2
document__keyqueryOptionalRestrict results to one source document — the parameter to reach for when you need SRD-only content. srd
challenge_ratingqueryOptionalFilter creatures by CR. Fractional values are decimals, so a quarter-CR monster is 0.25. 11
searchqueryOptionalFull-text search across the collection. aboleth

Response fields

countinteger
Total records matching the query across all pages, not the number in `results`.
next / previousstring | null
Absolute URLs for pagination, null at the ends. Follow them rather than building page numbers by hand.
results[].keystring
Stable slug in v2, prefixed by its source — `a5e-mm_aboleth`. The v1 equivalent field is called `slug` and has no prefix.
results[].documentobject
Source provenance: `name`, `key`, `display_name`, a `publisher` object and a `gamesystem` object. Read this before assuming a record is SRD content.
results[].challenge_ratingfloat
A float, so CR 11 arrives as `11.0` and low-CR monsters as `0.25`. Format for display rather than printing raw.
results[].speed / speed_allobject
`speed` holds only the movement modes that apply plus a `unit`; `speed_all` includes every mode with zeros and a boolean `hover`. Use `speed_all` when you need a uniform shape.
results[].languagesobject
Both an `as_string` rendering for display and a `data` array of language objects for structured use.
results[].proficiency_bonusinteger | null
Null on records from systems that do not use it — a good reminder that fields vary by source document.

What you can build with the Open5e API

  • Build a monster search for a virtual tabletop or DM screen
  • Look up spell descriptions in a campaign companion app
  • Filter encounters by challenge rating for a party of a given level
  • Compare SRD and third-party versions of the same creature
  • Seed a homebrew tool with openly licensed base content

Common errors and how to fix them

Unexpected fields or missing ones

You are mixing v1 and v2 responses.

Fix: Pin one version in your base URL. v1 uses `slug` and `monsters`; v2 uses `key` and `creatures`, with different nested shapes.

Third-party monsters where you expected SRD

The default result set spans every source document.

Fix: Add `document__key=srd` — or whichever source you want — to any query whose results you intend to treat as canonical.

404 on a slug that exists

v2 keys are prefixed with their document, so the bare name will not resolve.

Fix: Use the exact `key` from a list response, prefix included, rather than deriving it from the monster's name.

Very slow responses on large pages

Stat blocks are verbose and a big `limit` multiplies that.

Fix: Page with a small limit and follow `next`, or filter server-side before paging.

Open5e API — frequently asked questions

Is Open5e free to use?

Yes — no key, no account, and the content is openly licensed. The project is also open source, so you can self-host the API if you would rather not depend on the public instance for a production app.

How is Open5e different from the D&D 5e SRD API?

Coverage and provenance. Open5e includes third-party open content such as Kobold Press's Tome of Beasts and EN Publishing's Level Up A5e alongside the SRD, and tags every record with the document it came from so you can tell them apart.

How do I get only SRD content?

Add `document__key=srd` to your query. Without it, results span every source document the project indexes, which means two differently statted monsters can share a name in the same response.

Should I use the v1 or v2 API?

Whichever you pick, do not mix them. v2 is the newer shape with `creatures` and prefixed `key` values and richer nested objects; v1 remains available with `monsters` and plain `slug` values. Both are live, and their response shapes are not interchangeable.

Tools that pair with this API

Open5e 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.