Discover/5e API
live

5e API5e.tools

Access D&D 5e races, classes, subclasses, and spells from 5e.tools. Filter by name, source book, or class. Ideal for character builders and campaign tools.

Endpoint health
verified 3d ago
get_spell_sources
get_spells
get_races
get_classes
4/4 passing latest checkself-healing
Endpoints
4
Updated
26d ago

What is the 5e API?

The 5e.tools API exposes four endpoints covering the core pillars of D&D 5th Edition character data: races, classes, and spells. The get_spells endpoint alone can return spells across all available source books — each spell object carrying level, school, components, duration, range, and full entries. The get_classes endpoint delivers complete class details including subclasses and class features when a specific class name is provided.

Try it
Case-insensitive search keyword to filter races by name (e.g. 'elf', 'dwarf', 'halfling').
api.parse.bot/scraper/8452e5a0-87b8-461e-9cfd-d9ac9fa336b4/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/8452e5a0-87b8-461e-9cfd-d9ac9fa336b4/get_races?query=elf' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace 5e-tools-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: D&D 5e Tools SDK — search races, list classes, search spells."""
from parse_apis.d_d_5e_tools_api import DndTools, ClassName, ClassNotFound

client = DndTools()

# Search for elf races — limit caps total items returned
for race in client.races.search(query="elf", limit=3):
    print(race.name, race.source, race.speed)

# List class data for a specific class using the ClassName enum
wizard = client.characterclasses.list(class_name=ClassName.WIZARD, limit=1).first()
if wizard:
    print(wizard.name, wizard.source, wizard.edition)

# Search spells by name and source book
for spell in client.spells.search(query="fireball", source="PHB", limit=3):
    print(spell.name, spell.level, spell.school)

# Discover available spell source codes
source_index = client.spells.sources()
print(source_index.sources)

# Typed error handling: catch ClassNotFound for an invalid class name
try:
    result = client.characterclasses.list(class_name=ClassName.BARD, limit=1).first()
    print(result.name if result else "no classes")
except ClassNotFound as exc:
    print(f"Class not found: {exc.class_name}")

print("exercised: races.search / characterclasses.list / spells.search / spells.sources")
All endpoints · 4 totalmissing one? ·

Retrieve D&D 5e species and races from the 5e.tools data. Filterable by a case-insensitive keyword matching race name. Returns all races when no query is provided. Each race includes name, source book, size, speed, darkvision range, trait tags, and detailed entry text.

Input
ParamTypeDescription
querystringCase-insensitive search keyword to filter races by name (e.g. 'elf', 'dwarf', 'halfling').
Response
{
  "type": "object",
  "fields": {
    "races": "array of race objects each containing name, source, size, speed, darkvision, traitTags, and entries"
  },
  "sample": {
    "data": {
      "races": [
        {
          "name": "Elf",
          "size": [
            "M"
          ],
          "speed": 30,
          "source": "PHB",
          "entries": [
            {
              "name": "Age",
              "type": "entries",
              "entries": [
                "..."
              ]
            }
          ],
          "traitTags": [
            "Improved Resting"
          ],
          "darkvision": 60
        }
      ]
    },
    "status": "success"
  }
}

About the 5e API

Races and Species

The get_races endpoint returns all D&D 5e races and species available in 5e.tools data. Each race object includes name, source, size, speed, traits, and additional attributes. You can pass an optional query parameter — for example 'elf' or 'dwarf' — to filter by name in a case-insensitive match. No authentication or session is needed.

Classes and Subclasses

get_classes operates in two modes. Without class_name, it returns a summary list of all classes alongside an available_classes array of name strings — useful for populating a picker UI. When class_name is provided (e.g. 'wizard' or 'rogue'), the response expands to include the full class object: subclasses, class features at each level, and subclass features. This makes the endpoint suitable for building full class-progression displays.

Spells and Source Books

get_spells defaults to PHB spells when no parameters are given. You can narrow results with the query parameter (e.g. 'fireball') or switch source books using the source parameter. Use get_spell_sources first — it returns a sources object mapping source codes like 'PHB' or 'XGE' to their backing JSON filenames, so you know exactly which codes are valid. Set fetch_all to true to pull spells across every available source in a single call; note this can return a large result set. Each spell response includes a count field alongside the spells array and an available_sources list.

Reliability & maintenanceVerified

The 5e API is a managed, monitored endpoint for 5e.tools — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when 5e.tools changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official 5e.tools API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
3d ago
Latest check
4/4 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Character builder that populates race selection dropdowns with size, speed, and trait data from get_races
  • Class progression viewer that renders level-by-level features and subclass options using get_classes with a specific class_name
  • Spell reference tool filtered by source book code via the source parameter on get_spells
  • Campaign preparation app that searches spells by keyword using the query param and displays school, components, and range
  • Sourcebook coverage tracker that enumerates all available spell sources with get_spell_sources
  • Homebrew tool that cross-references official race traits from get_races to scaffold custom species
  • Encounter planner that pulls full class feature sets to model NPC or player character abilities
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does 5e.tools have an official developer API?+
5e.tools does not publish an official developer API. It is a community-maintained reference site that serves static JSON data files. The Parse 5e.tools API structures access to that data through consistent endpoints.
What does `get_classes` return differently when `class_name` is provided versus omitted?+
Without class_name, the response contains a classes summary array and an available_classes list of name strings — enough to populate a selector. When class_name is provided (e.g. 'fighter'), the response expands to include the full class object: subclasses, class features per level, and subclass features. The two modes serve different UI needs, so it is worth calling the summary form first to retrieve exact class name strings before requesting full detail.
Can I retrieve spells from multiple specific source books in one call without fetching all sources?+
The get_spells endpoint accepts a single source code per call. To combine spells from, say, PHB and XGE, you would make two separate requests and merge the results client-side. Setting fetch_all to true pulls every available source at once if you need broad coverage. You can fork this API on Parse and revise it to add a multi-source parameter if targeted batch fetching is important for your use case.
Does the API cover monsters, magic items, or other 5e content beyond races, classes, and spells?+
Not currently. The API covers races (via get_races), classes and subclasses (via get_classes), and spells (via get_spells and get_spell_sources). Monsters, magic items, backgrounds, feats, and equipment are not exposed by the current endpoints. You can fork this API on Parse and revise it to add endpoints for those data categories.
How fresh is the data returned by these endpoints?+
The data reflects the 5e.tools JSON data sources at the time of each request. 5e.tools is community-maintained and updated as new official sourcebooks are incorporated, so newly released content may appear with a short lag. The available_sources field in the get_spells response and the sources object from get_spell_sources are the reliable way to confirm which sourcebooks are currently indexed.
Page content last updated . Spec covers 4 endpoints from 5e.tools.
Related APIs in EntertainmentSee all →
bg3.wiki API
Search and retrieve detailed information about Baldur's Gate 3 classes, subclasses, spells, items, quests, and other game content from the official wiki. Build character guides, plan builds, and look up game mechanics without leaving your app.
howbazaar.gg API
Query items, skills, merchants, and monsters from the How Bazaar game database. Look up detailed information about in-game equipment, abilities, NPCs, and enemy encounters, with optional filters by hero, tier, size, and tag.
dofus.com API
Access comprehensive Dofus 3.0 game data including detailed class information, current bug reports, daily Almanax rewards, and player rankings. Explore the full encyclopedia and community statistics to optimize your gameplay and stay updated on game status.
dumpspace.spuckwaffel.com API
Access detailed technical data for Unreal Engine and Unity games, including class structures, functions, enums, memory offsets, and inheritance hierarchies to support reverse engineering and modding projects. Search across thousands of game dumps to find specific classes, structs, and functions along with their documentation and offset information.
wowhead.com API
Access comprehensive World of Warcraft game data including items, NPCs, spells, and quests, plus stay updated with the latest WoW news and in-game events. Search the complete Wowhead database and read individual news articles to keep informed about current happenings in the game.
poedb.tw API
Search and retrieve comprehensive Path of Exile game data including items, gems, leagues, and game mechanics like bleeding effects across both PoE 1 and PoE 2. Get detailed information about specific items and categories, or browse current league information to stay updated on the latest game content.
eldenring.wiki.fextralife.com API
Search and retrieve structured Elden Ring game information from the Fextralife Wiki, including weapons, enemies, locations, and lore. Access full article content with hierarchical sections, tables, and images, or search the complete article catalog by keyword.
wynncraft.com API
Access detailed Wynncraft game information to look up item metadata and search across the complete item database, retrieve player statistics and character inventories, and browse guild information and global search results. Use this data to compare gear, track player progress, analyze guild rosters, or build tools for the Wynncraft community.