D&D 2024 SRD API
A standalone, public JSON API serving three D&D 5e datasets — the official 2024 SRD 5.2 corpus, a legacy archive of original 5e + third-party material, and 2024 Expanded, which unions SRD 5.2 with community-submitted homebrew content. CORS-open, no auth required for reads. Stat blocks, level progressions, and lookup tables are parsed into structured JSON so they're queryable.
description string and a structured description_md markdown body so consumer apps can render formatted output natively. The same validated SRD baseline is what the 2024 Expanded namespace UNIONs with approved homebrew content.
The Legacy library (5e + 3pp) was imported from external sources and has not been fully verified — it may contain inaccuracies, edition mismatches, or third-party material that hasn't been reviewed for SRD alignment.
If you spot anything that looks wrong in any library — a missing entry, a typo, a wrong source attribution, or a parser glitch — please let us know so we can review and correct it.
Endpoints SRD 5.2
HitGET /api for namespaces, GET /api/2024 for the SRD 5.2 resource list.
| Resource | List | Detail |
|---|---|---|
| Monsters 345 records | GET /api/2024/monsters |
GET /api/2024/monsters/{slug} |
| Spells 342 records | GET /api/2024/spells |
GET /api/2024/spells/{slug} |
| Backgrounds 4 records | GET /api/2024/backgrounds |
GET /api/2024/backgrounds/{slug} |
| Feats 17 records | GET /api/2024/feats |
GET /api/2024/feats/{slug} |
| Magic Items 257 records | GET /api/2024/items |
GET /api/2024/items/{slug} |
| Species 9 records | GET /api/2024/species |
GET /api/2024/species/{slug} |
| Classes 12 records | GET /api/2024/classes |
GET /api/2024/classes/{slug} |
Filtering
List endpoints accept query-string filters onpublisher, book, source.
?source=*SRD*Contains match (case-insensitive). * is the wildcard.?publisher=Wizards*Starts-with.?source=a,bOR within a single field.?source=*SRD*&publisher=Wizards*AND across fields.?fields=name,slug,sourceChoose which columns the list endpoint returns.Response shape
Two envelopes — list (name+slug) and detail (full record).GET /api/2024/monsters
{
"data": [ { "name": "Aboleth", "slug": "aboleth" }, ... ],
"count": 345
}
GET /api/2024/monsters/aboleth
{
"data": {
"slug": "aboleth", "name": "Aboleth",
"description": "Aboleth Large Aberration, Lawful Evil AC 17 HP 150 ...",
"description_md": "## Aboleth\n\n*Large Aberration, Lawful Evil*\n\n- **AC** 17\n- **HP** 150 ...",
"properties": { "size": "Large", "creatureType": "Aberration", "stats": { ... }, "actions": { ... } },
"source": "SRD 5.2"
}
}
Quick links
Browser · SRD 5.2
Live, filterable table view of the 2024 SRD 5.2 corpus. Click a row for the full detail panel: properties, rendered markdown, raw JSON, and image (where present).
Open SRD 5.2 browserAPI root · /api/2024
Self-discovery endpoint for the SRD 5.2 namespace — returns the seven resource names. Use it from clients that enumerate before crawling.
Open /api/2024Discovery · /api
Lists every namespace this API serves (SRD 5.2 · Legacy · 2024 Expanded). Good entry point for any client that wants to walk the whole surface.
Open /apiReport an issue
Found a missing entry, a typo, or a row sourced from the wrong edition? Send a quick note and we'll fix it. Goes to both maintainers.
Endpoints Legacy
Original 5e + third-party corpus.GET /api/legacy lists the resources in this namespace.
| Resource | List | Detail |
|---|---|---|
| Monsters 11,463 records | GET /api/legacy/monsters |
GET /api/legacy/monsters/{slug} |
| Spells 5,849 records | GET /api/legacy/spells |
GET /api/legacy/spells/{slug} |
| Backgrounds 405 records | GET /api/legacy/backgrounds |
GET /api/legacy/backgrounds/{slug} |
| Magic Items 15,749 records | GET /api/legacy/items |
GET /api/legacy/items/{slug} |
| Species 383 records | GET /api/legacy/species |
GET /api/legacy/species/{slug} |
| Classes 134 records | GET /api/legacy/classes |
GET /api/legacy/classes/{slug} |
Filtering
Same filter syntax as SRD 5.2 —publisher, book, and source. Legacy data has richer publisher/book values since it includes third-party material.
?publisher=*Kobold Press*Filter by third-party publisher (contains match).?source=*SRD*Find legacy entries that carry an SRD Source tag.?publisher=Kobold Press,Goodman GamesOR within a single field.?source=*5e*&book=*Tome*AND across fields.?fields=name,slug,publisher,book,sourceChoose which columns the list endpoint returns.Response shape
Identical envelope to SRD 5.2. Legacy records typically carry populatedpublisher and book fields.
GET /api/legacy/monsters
{
"data": [ { "name": "Aboleth", "slug": "aboleth" }, ... ],
"count": 11,463
}
GET /api/legacy/monsters/aboleth
{
"data": {
"slug": "aboleth", "name": "Aboleth",
"description": "...",
"properties": { "Category": "Monsters", "Size": "Large", "Type": "aberration", "Source": "5th Edition SRD", ... },
"publisher": "Wizards of the Coast",
"book": "Systems Reference Document 5.1",
"source": "5th Edition SRD"
}
}
// Note: legacy responses omit `description_md` — that field is only present
// on the curated 2024 SRD tables (and inherited by the expanded namespace).
Sources Legacy
Curated from official products and community-supported references.The data in this library has been curated from a variety of official and community-supported resources. Notable contributors include:
OGL 1.0a Includes content from the System Reference Document 5.1 and 5.2, released under the Open Gaming License Version 1.0a.
MIT Additional data is licensed under the MIT License — see LICENSE.txt.
Quick links
Browser · Legacy
Live, filterable table view of the legacy 5e + 3pp corpus. Same filter/detail UI as the SRD 5.2 browser, scoped to the legacy namespace.
API root · /api/legacy
Self-discovery endpoint for the legacy namespace — returns the six resource names. Note: feats isn't part of the legacy corpus.
Discovery · /api
Lists every namespace this API serves (SRD 5.2 · Legacy · 2024 Expanded). Good entry point for any client that wants to walk the whole surface.
Open /apiReport an issue
Legacy data was imported from external sources and hasn't been fully verified. If you spot inaccuracies or edition mismatches, please flag them so they can be reviewed.
Endpoints
Reads union the SRD 5.2 baseline with approved homebrew.GET /api/expanded lists the resources.
| Resource | List | Detail |
|---|---|---|
| Monsters 345 SRD + 345 approved | GET /api/expanded/monsters |
GET /api/expanded/monsters/{slug} |
| Spells 342 SRD + 402 approved | GET /api/expanded/spells |
GET /api/expanded/spells/{slug} |
| Backgrounds 4 SRD + 4 approved | GET /api/expanded/backgrounds |
GET /api/expanded/backgrounds/{slug} |
| Feats 17 SRD + 17 approved | GET /api/expanded/feats |
GET /api/expanded/feats/{slug} |
| Magic Items 257 SRD + 307 approved | GET /api/expanded/items |
GET /api/expanded/items/{slug} |
| Species 9 SRD + 9 approved | GET /api/expanded/species |
GET /api/expanded/species/{slug} |
| Classes 12 SRD + 12 approved | GET /api/expanded/classes |
GET /api/expanded/classes/{slug} |
Submit content
Use the Submit content button above for a guided form, or POST directly to the API.POST /api/expanded/{resource}Public — no auth required. Rate-limited per IP.Required: name, publisherSlug is auto-generated as <publisher-slug>-<name-slug>.Optional: description_md, properties, book, sourcePlain description is derived from description_md via Parsedown on save.Response: { submission_id, slug, status: "pending" }Submissions appear in the public reads only after admin approval.409 on slug collision · 400 on missing fieldPick a different name or contact the maintainer for already-existing slugs.POST /api/expanded/monsters
Content-Type: application/json
{
"name": "Iron Dragon",
"publisher": "Kobold Press",
"book": "Tome of Beasts",
"source": "kobold-press",
"description_md": "## Iron Dragon\n\n*Large Construct...*\n\n- **AC** 19\n- **HP** 200",
"properties": { "size": "Large", "creatureType": "Construct" }
}
→ 201 Created
{
"data": {
"submission_id": 42,
"slug": "kobold-press-iron-dragon",
"status": "pending",
"message": "Submission received. It will be reviewed before appearing in the public API."
}
}
Filtering & response shape
Same syntax as SRD 5.2 / Legacy. Detail responses includedescription_md for both baseline and homebrew rows.
?source=homebrewFilter to just approved homebrew (excludes the SRD baseline).?publisher=*Kobold*Find all approved entries from a particular publisher.?fields=name,slug,publisher,sourceNarrow the list columns. Filters apply to both UNION branches.GET /api/expanded/monsters
{
"data": [ { "name": "Aboleth", "slug": "aboleth" }, ... ],
"count": 345
}
GET /api/expanded/monsters/kobold-press-iron-dragon
{
"data": {
"slug": "kobold-press-iron-dragon", "name": "Iron Dragon",
"description": "Iron Dragon Large Construct ...",
"description_md": "## Iron Dragon\n\n*Large Construct, Lawful Neutral*\n\n- **AC** 19 ...",
"properties": { "size": "Large", "creatureType": "Construct" },
"publisher": "Kobold Press",
"book": "Tome of Beasts",
"source": "kobold-press"
}
}
Quick links
Browser · 2024 Expanded
Live, filterable table view of the unioned namespace — SRD baseline + approved homebrew side by side. Same detail panel, different accent color.
Open Expanded browserAPI root · /api/expanded
Self-discovery endpoint for the Expanded namespace — returns the seven resource names. Reads union with SRD 5.2 automatically.
Open /api/expandedSubmit content
Got homebrew to share? The submission form handles single entries or bulk JSON arrays — both feed the same admin review queue.
Discovery · /api
Lists every namespace this API serves. expanded sits alongside 2024 and legacy as a first-class read namespace.
Rate limits & caching
Per client IP. Burst-friendly — short spikes pass; sustained scraping doesn't.60 req / minutePlenty of headroom for any real UI or paginated crawl.1,000 req / hourCatches loop-style scraping that slips under the per-minute cap.10,000 req / daySlow-drip ceiling. Need more? Open an issue and tell us what you're building.X-RateLimit-Limit / Remaining / ResetReturned on every response so honest clients can self-pace.429 Too Many RequestsSent with Retry-After (seconds) when a window is exhausted.Cache-Control: max-age=3600 & ETagSend If-None-Match to get a 304 with no body — doesn't count toward limits in practice since most clients/CDNs serve from cache.Want to help out?
This API is 100% free — no rate-tier paywall, no ads, no tracking. Server bills and the hours behind keeping it audited / current come out of my pocket and my evenings. If it's saved you time on a tool you're building, or you just want to see it stay alive, any of the below makes a real difference.
Every contribution goes back into hosting, audit time, and new features. Thank you — seriously.
This work includes material taken from the System Reference Document 5.2 ("SRD 5.2") by Wizards of the Coast LLC. The SRD 5.2 is licensed under the Creative Commons Attribution 4.0 International License.
"Dungeons & Dragons" and "D&D" are trademarks of Wizards of the Coast LLC. This site is unofficial fan content permitted under the CC-BY-4.0 license and is not approved or endorsed by Wizards of the Coast.