diff --git a/package.json b/package.json index 89f65c73..3623bccd 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "dev": "nodemon npm run start", "lint": "eslint . --config eslint.config.js", "validate-swagger": "swagger-cli validate src/swagger/swagger.yml", - "bundle-swagger": "npm run validate-swagger && swagger-cli bundle --outfile src/swagger/dist/openapi.yml --type yaml src/swagger/swagger.yml && swagger-cli bundle --outfile src/swagger/dist/openapi.json --type json src/swagger/swagger.yml", + "bundle-swagger": "npm run validate-swagger && swagger-cli bundle --outfile src/swagger/api-spec/openapi.yml --type yaml src/swagger/swagger.yml && swagger-cli bundle --outfile src/swagger/api-spec/openapi.json --type json src/swagger/swagger.yml", "gen-postman": "npm run bundle-swagger && portman --cliOptionsFile portman-cli.json", "test": "npm run test:unit && npm run test:integration:local", "test:unit": "node --experimental-vm-modules node_modules/jest/bin/jest.js -c jest.config.unit.ts", diff --git a/src/swagger/api-spec/openapi.json b/src/swagger/api-spec/openapi.json new file mode 100644 index 00000000..6dc940f8 --- /dev/null +++ b/src/swagger/api-spec/openapi.json @@ -0,0 +1,6200 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "D&D 5e API", + "description": "# Introduction\n\nWelcome to the dnd5eapi, the Dungeons & Dragons 5th Edition API!\nThis documentation should help you familiarize yourself with the resources\navailable and how to consume them with HTTP requests. Read through the getting\nstarted section before you dive in. Most of your problems should be solved\njust by reading through it.\n\n## Getting Started\n\nLet's make our first API request to the D&D 5th Edition API!\n\nOpen up a terminal and use [curl](http://curl.haxx.se/) or [httpie](http://httpie.org/)\nto make an API request for a resource. You can also scroll through the\ndefinitions below and send requests directly from the endpoint documentation!\n\nFor example, if you paste and run this `curl` command:\n```bash\ncurl -X GET \"https://www.dnd5eapi.co/api/ability-scores/cha\" -H \"Accept: application/json\"\n```\n\nWe should see a result containing details about the Charisma ability score:\n```bash\n{\n \"index\": \"cha\",\n \"name\": \"CHA\",\n \"full_name\": \"Charisma\",\n \"desc\": [\n \"Charisma measures your ability to interact effectively with others. It\n includes such factors as confidence and eloquence, and it can represent\n a charming or commanding personality.\",\n \"A Charisma check might arise when you try to influence or entertain\n others, when you try to make an impression or tell a convincing lie,\n or when you are navigating a tricky social situation. The Deception,\n Intimidation, Performance, and Persuasion skills reflect aptitude in\n certain kinds of Charisma checks.\"\n ],\n \"skills\": [\n {\n \"name\": \"Deception\",\n \"index\": \"deception\",\n \"url\": \"/api/skills/deception\"\n },\n {\n \"name\": \"Intimidation\",\n \"index\": \"intimidation\",\n \"url\": \"/api/skills/intimidation\"\n },\n {\n \"name\": \"Performance\",\n \"index\": \"performance\",\n \"url\": \"/api/skills/performance\"\n },\n {\n \"name\": \"Persuasion\",\n \"index\": \"persuasion\",\n \"url\": \"/api/skills/persuasion\"\n }\n ],\n \"url\": \"/api/ability-scores/cha\"\n}\n```\n\n## Authentication\n\nThe dnd5eapi is a completely open API. No authentication is required to query\nand get data. This also means that we've limited what you can do to just\n`GET`-ing the data. If you find a mistake in the data, feel free to\n[message us](https://discord.gg/TQuYTv7).\n\n## GraphQL\n\nThis API supports [GraphQL](https://graphql.org/). The GraphQL URL for this API\nis `https://www.dnd5eapi.co/graphql`. Most of your questions regarding the GraphQL schema can be answered\nby querying the endpoint with the Apollo sandbox explorer.\n\n## Schemas\n\nDefinitions of all schemas will be accessible in a future update. Two of the most common schemas are described here.\n\n### `APIReference`\nRepresents a minimal representation of a resource. The detailed representation of the referenced resource can be retrieved by making a request to the referenced `URL`.\n```\nAPIReference {\n index string\n name string\n url string\n}\n```\n
\n\n### `DC`\nRepresents a difficulty check.\n```\nDC {\n dc_type APIReference\n dc_value number\n success_type \"none\" | \"half\" | \"other\"\n}\n```\n
\n\n### `Damage`\nRepresents damage.\n```\nDamage {\n damage_type APIReference\n damage_dice string\n}\n```\n
\n\n### `Choice`\nRepresents a choice made by a player. Commonly seen related to decisions made during character creation or combat (e.g.: the description of the cleric class, under **Proficiencies**, states \"Skills: Choose two from\tHistory, Insight, Medicine, Persuasion, and\tReligion\" [[SRD p15]](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=15))\n```\nChoice {\n desc string\n choose number\n type string\n from OptionSet\n}\n```\n
\n\n### `OptionSet`\nThe OptionSet structure provides the options to be chosen from, or sufficient data to fetch and interpret the options. All OptionSets have an `option_set_type` attribute that indicates the structure of the object that contains the options. The possible values are `options_array`, `equipment_category`, and `reference_list`. Other attributes on the OptionSet depend on the value of this attribute.\n- `options_array`\n - `options` (array): An array of Option objects. Each item in the array represents an option that can be chosen.\n- `equipment_category`\n - `equipment_category` (APIReference): A reference to an EquipmentCategory. Each item in the EquipmentCategory's `equipment` array represents one option that can be chosen.\n- `resource_list`\n - `resource_list_url` (string): A reference (by URL) to a collection in the database. The URL may include query parameters. Each item in the resulting ResourceList's `results` array represents one option that can be chosen.\n
\n\n### `Option`\nWhen the options are given in an `options_array`, each item in the array inherits from the Option structure. All Options have an `option_type` attribute that indicates the structure of the option. The value of this attribute indicates how the option should be handled, and each type has different attributes. The possible values and their corresponding attributes are listed below.\n- `reference` - A terminal option. Contains a reference to a Document that can be added to the list of options chosen.\n - `item` (APIReference): A reference to the chosen item.\n- `action` - A terminal option. Contains information describing an action, for use within Multiattack actions.\n - `action_name` (string): The name of the action, according to its `name` attribute.\n - `count` (number | string): The number of times this action can be repeated if this option is chosen.\n - `type` (string = `\"melee\" | \"ranged\" | \"ability\" | \"magic\"`, optional): For attack actions that can be either melee, ranged, abilities, or magic.\n- `multiple` - When this option is chosen, all of its child options are chosen, and must be resolved the same way as a normal option.\n - `items` (array): An array of Option objects. All of them must be taken if the option is chosen.\n- `choice` - A nested choice. If this option is chosen, the Choice structure contained within must be resolved like a normal Choice structure, and the results are the chosen options.\n - `choice` (Choice): The Choice to resolve.\n- `string` - A terminal option. Contains a reference to a string.\n - `string` (string): The string.\n- `ideal` - A terminal option. Contains information about an ideal.\n - `desc` (string): A description of the ideal.\n - `alignments` (ApiReference[]): A list of alignments of those who might follow the ideal.\n- `counted_reference` - A terminal option. Contains a reference to something else in the API along with a count.\n - `count` (number): Count.\n - `of` (ApiReference): Thing being referenced.\n- `score_prerequisite` - A terminal option. Contains a reference to an ability score and a minimum score.\n - `ability_score` (ApiReference): Ability score being referenced.\n - `minimum_score` (number): The minimum score required to satisfy the prerequisite.\n- `ability_bonus` - A terminal option. Contains a reference to an ability score and a bonus\n - `ability_score` (ApiReference): Ability score being referenced\n - `bonus` (number): The bonus being applied to the ability score\n- `breath` - A terminal option: Contains a reference to information about a breath attack.\n - `name` (string): Name of the breath.\n - `dc` (DC): Difficulty check of the breath attack.\n - `damage` ([Damage]): Damage dealt by the breath attack, if any.\n- `damage` - A terminal option. Contains information about damage.\n - `damage_type` (ApiReference): Reference to type of damage.\n - `damage_dice` (string): Damage expressed in dice (e.g. \"13d6\").\n - `notes` (string): Information regarding the damage.\n\n## FAQ\n\n### What is the SRD?\nThe SRD, or Systems Reference Document, contains guidelines for publishing content under the OGL. This allows for some of the data for D&D 5e to be open source. The API only covers data that can be found in the SRD. [Here's a link to the full text of the SRD.](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf)\n\n### What is the OGL?\nThe Open Game License (OGL) is a public copyright license by Wizards of the Coast that may be used by tabletop role-playing game developers to grant permission to modify, copy, and redistribute some of the content designed for their games, notably game mechanics. However, they must share-alike copies and derivative works. [More information about the OGL can be found here.](https://en.wikipedia.org/wiki/Open_Game_License)\n\n### A monster, spell, subclass, etc. is missing from the API / Database. Can I add it?\nPlease check if the data is within the SRD. If it is, feel free to open an issue or PR to add it yourself. Otherwise, due to legal reasons, we cannot add it.\n\n### Can this API be self hosted?\nYes it can! You can also host the data yourself if you don't want to use the API at all. You can also make changes and add extra data if you like. However, it is up to you to merge in new changes to the data and API.\n\n#### Can I publish is on ? Is this free use?\nYes, you can. The API itself is under the [MIT license](https://opensource.org/licenses/MIT), and the underlying data accessible via the API is supported under the SRD and OGL.\n\n# Status Page\n\nThe status page for the API can be found here: https://5e-bits.github.io/dnd-uptime/\n\n# Chat\n\nCome hang out with us [on Discord](https://discord.gg/TQuYTv7)!\n\n# Contribute\n\nThis API is built from two repositories.\n - The repo containing the data lives here: https://github.com/bagelbits/5e-database\n - The repo with the API implementation lives here: https://github.com/bagelbits/5e-srd-api\n\nThis is a evolving API and having fresh ideas are always welcome! You can\nopen an issue in either repo, open a PR for changes, or just discuss with\nother users in this discord.\n", + "version": "0.1", + "license": { + "name": "MIT License", + "url": "https://github.com/5e-bits/5e-srd-api/blob/main/LICENSE.md" + }, + "contact": { + "name": "5eBits", + "url": "https://github.com/5e-bits" + } + }, + "servers": [ + { + "url": "https://www.dnd5eapi.co", + "description": "Production" + }, + { + "url": "http://localhost:3000", + "description": "Local Development" + } + ], + "tags": [ + { + "name": "Common" + }, + { + "name": "Character Data" + } + ], + "paths": { + "/api": { + "get": { + "summary": "Get all resource URLs.", + "description": "Making a request to the API's base URL returns an object containing available endpoints.", + "tags": [ + "Common" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "example": { + "ability-scores": "/api/ability-scores", + "alignments": "/api/alignments", + "backgrounds": "/api/backgrounds", + "classes": "/api/classes", + "conditions": "/api/conditions", + "damage-types": "/api/damage-types", + "equipment-categories": "/api/equipment-categories", + "equipment": "/api/equipment", + "feats": "/api/feats", + "features": "/api/features", + "languages": "/api/languages", + "magic-items": "/api/magic-items", + "magic-schools": "/api/magic-schools", + "monsters": "/api/monsters", + "proficiencies": "/api/proficiencies", + "races": "/api/races", + "rules": "/api/rules", + "rule-sections": "/api/rule-sections", + "skills": "/api/skills", + "spells": "/api/spells", + "subclasses": "/api/subclasses", + "subraces": "/api/subraces", + "traits": "/api/traits", + "weapon-properties": "/api/weapon-properties" + } + } + } + } + } + } + }, + "/api/{endpoint}": { + "get": { + "summary": "Get list of all available resources for an endpoint.", + "description": "Currently only the [`/spells`](#get-/api/spells) and [`/monsters`](#get-/api/monsters) endpoints support filtering with query parameters. Use of these query parameters is documented under the respective [Spells](#tag--Spells) and [Monsters](#tag--Monsters) sections.\n", + "tags": [ + "Common" + ], + "parameters": [ + { + "$ref": "#/components/parameters/base-endpoint-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/ability-scores/{index}": { + "get": { + "summary": "Get an ability score by index.", + "description": "# Ability Score\n\nRepresents one of the six abilities that describes a creature's physical and mental characteristics. The three main rolls of the game - the ability check, the saving throw, and the attack roll - rely on the ability scores. [[SRD p76](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=76)]\n", + "tags": [ + "Character Data" + ], + "parameters": [ + { + "$ref": "#/components/parameters/ability-score-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AbilityScore" + }, + "example": { + "index": "cha", + "name": "CHA", + "url": "/api/ability-scores/cha", + "desc": [ + "Charisma measures your ability to interact effectively with others. It includes such factors as confidence and eloquence, and it can represent a charming or commanding personality.", + "A Charisma check might arise when you try to influence or entertain others, when you try to make an impression or tell a convincing lie, or when you are navigating a tricky social situation. The Deception, Intimidation, Performance, and Persuasion skills reflect aptitude in certain kinds of Charisma checks." + ], + "full_name": "Charisma", + "skills": [ + { + "index": "deception", + "name": "Deception", + "url": "/api/skills/deception" + }, + { + "index": "intimidation", + "name": "Intimidation", + "url": "/api/skills/intimidation" + }, + { + "index": "performance", + "name": "Performance", + "url": "/api/skills/performance" + }, + { + "index": "persuasion", + "name": "Persuasion", + "url": "/api/skills/persuasion" + } + ] + } + } + } + } + } + } + }, + "/api/alignments/{index}": { + "get": { + "summary": "Get an alignment by index.", + "description": "# Alignment\n\nA typical creature in the game world has an alignment, which broadly describes its moral and personal attitudes. Alignment is a combination of two factors: one identifies morality (good, evil, or neutral), and the other describes attitudes toward society and order (lawful, chaotic, or neutral). Thus, nine distinct alignments define the possible combinations.[[SRD p58](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=58)]\n", + "tags": [ + "Character Data" + ], + "parameters": [ + { + "$ref": "#/components/parameters/alignment-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Alignment" + }, + "example": { + "index": "chaotic-neutral", + "name": "Chaotic Neutral", + "url": "/api/alignments/chaotic-neutral", + "desc": "Chaotic neutral (CN) creatures follow their whims, holding their personal freedom above all else. Many barbarians and rogues, and some bards, are chaotic neutral.", + "abbreviation": "CN" + } + } + } + } + } + } + }, + "/api/backgrounds/{index}": { + "get": { + "summary": "Get a background by index.", + "description": "# Background\n\nEvery story has a beginning. Your character's background reveals where you came from, how you became an adventurer, and your place in the world. Choosing a background provides you with important story cues about your character's identity. [[SRD p60](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=60)]\n\n_Note:_ acolyte is the only background included in the SRD.\n", + "tags": [ + "Character Data" + ], + "parameters": [ + { + "$ref": "#/components/parameters/background-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Background" + }, + "example": { + "index": "acolyte", + "name": "Acolyte", + "starting_proficiencies": [ + { + "index": "skill-insight", + "name": "Skill: Insight", + "url": "/api/proficiencies/skill-insight" + }, + { + "index": "skill-religion", + "name": "Skill: Religion", + "url": "/api/proficiencies/skill-religion" + } + ], + "language_options": { + "choose": 2, + "type": "languages", + "from": { + "option_set_type": "resource_list", + "resource_list_url": "/api/languages" + } + }, + "starting_equipment": [ + { + "equipment": { + "index": "clothes-common", + "name": "Clothes, common", + "url": "/api/equipment/clothes-common" + }, + "quantity": 1 + }, + { + "equipment": { + "index": "pouch", + "name": "Pouch", + "url": "/api/equipment/pouch" + }, + "quantity": 1 + } + ], + "starting_equipment_options": [ + { + "choose": 1, + "type": "equipment", + "from": { + "option_set_type": "equipment_category", + "equipment_category": { + "index": "holy-symbols", + "name": "Holy Symbols", + "url": "/api/equipment-categories/holy-symbols" + } + } + } + ], + "feature": { + "name": "Shelter of the Faithful", + "desc": [ + "As an acolyte, you command the respect of those who share your faith, and you can perform the religious ceremonies of your deity. You and your adventuring companions can expect to receive free healing and care at a temple, shrine, or other established presence of your faith, though you must provide any material components needed for spells. Those who share your religion will support you (but only you) at a modest lifestyle.", + "You might also have ties to a specific temple dedicated to your chosen deity or pantheon, and you have a residence there. This could be the temple where you used to serve, if you remain on good terms with it, or a temple where you have found a new home. While near your temple, you can call upon the priests for assistance, provided the assistance you ask for is not hazardous and you remain in good standing with your temple." + ] + }, + "personality_traits": { + "choose": 2, + "type": "personality_traits", + "from": { + "option_set_type": "options_array", + "options": [ + { + "option_type": "string", + "string": "I idolize a particular hero of my faith, and constantly refer to that person's deeds and example." + }, + { + "option_type": "string", + "string": "I can find common ground between the fiercest enemies, empathizing with them and always working toward peace." + }, + { + "option_type": "string", + "string": "I see omens in every event and action. The gods try to speak to us, we just need to listen." + }, + { + "option_type": "string", + "string": "Nothing can shake my optimistic attitude." + }, + { + "option_type": "string", + "string": "I quote (or misquote) sacred texts and proverbs in almost every situation." + }, + { + "option_type": "string", + "string": "I am tolerant (or intolerant) of other faiths and respect (or condemn) the worship of other gods." + }, + { + "option_type": "string", + "string": "I've enjoyed fine food, drink, and high society among my temple's elite. Rough living grates on me." + }, + { + "option_type": "string", + "string": "I've spent so long in the temple that I have little practical experience dealing with people in the outside world." + } + ] + } + }, + "ideals": { + "choose": 1, + "type": "ideals", + "from": { + "option_set_type": "options_array", + "options": [ + { + "option_type": "ideal", + "desc": "Tradition. The ancient traditions of worship and sacrifice must be preserved and upheld.", + "alignments": [ + { + "index": "lawful-good", + "name": "Lawful Good", + "url": "/api/alignments/lawful-good" + }, + { + "index": "lawful-neutral", + "name": "Lawful Neutral", + "url": "/api/alignments/lawful-neutral" + }, + { + "index": "lawful-evil", + "name": "Lawful Evil", + "url": "/api/alignments/lawful-evil" + } + ] + }, + { + "option_type": "ideal", + "desc": "Charity. I always try to help those in need, no matter what the personal cost.", + "alignments": [ + { + "index": "lawful-good", + "name": "Lawful Good", + "url": "/api/alignments/lawful-good" + }, + { + "index": "neutral-good", + "name": "Neutral Good", + "url": "/api/alignments/neutral-good" + }, + { + "index": "chaotic-good", + "name": "Chaotic Good", + "url": "/api/alignments/chaotic-good" + } + ] + }, + { + "option_type": "ideal", + "desc": "Change. We must help bring about the changes the gods are constantly working in the world.", + "alignments": [ + { + "index": "chaotic-good", + "name": "Chaotic Good", + "url": "/api/alignments/chaotic-good" + }, + { + "index": "chaotic-neutral", + "name": "Chaotic Neutral", + "url": "/api/alignments/chaotic-neutral" + }, + { + "index": "chaotic-evil", + "name": "Chaotic Evil", + "url": "/api/alignments/chaotic-evil" + } + ] + }, + { + "option_type": "ideal", + "desc": "Power. I hope to one day rise to the top of my faith's religious hierarchy.", + "alignments": [ + { + "index": "lawful-good", + "name": "Lawful Good", + "url": "/api/alignments/lawful-good" + }, + { + "index": "lawful-neutral", + "name": "Lawful Neutral", + "url": "/api/alignments/lawful-neutral" + }, + { + "index": "lawful-evil", + "name": "Lawful Evil", + "url": "/api/alignments/lawful-evil" + } + ] + }, + { + "option_type": "ideal", + "desc": "Faith. I trust that my deity will guide my actions. I have faith that if I work hard, things will go well.", + "alignments": [ + { + "index": "lawful-good", + "name": "Lawful Good", + "url": "/api/alignments/lawful-good" + }, + { + "index": "lawful-neutral", + "name": "Lawful Neutral", + "url": "/api/alignments/lawful-neutral" + }, + { + "index": "lawful-evil", + "name": "Lawful Evil", + "url": "/api/alignments/lawful-evil" + } + ] + }, + { + "option_type": "ideal", + "desc": "Aspiration. I seek to prove myself worthy of my god's favor by matching my actions against his or her teachings.", + "alignments": [ + { + "index": "lawful-good", + "name": "Lawful Good", + "url": "/api/alignments/lawful-good" + }, + { + "index": "neutral-good", + "name": "Neutral Good", + "url": "/api/alignments/neutral-good" + }, + { + "index": "chaotic-good", + "name": "Chaotic Good", + "url": "/api/alignments/chaotic-good" + }, + { + "index": "lawful-neutral", + "name": "Lawful Neutral", + "url": "/api/alignments/lawful-neutral" + }, + { + "index": "neutral", + "name": "Neutral", + "url": "/api/alignments/neutral" + }, + { + "index": "chaotic-neutral", + "name": "Chaotic Neutral", + "url": "/api/alignments/chaotic-neutral" + }, + { + "index": "lawful-evil", + "name": "Lawful Evil", + "url": "/api/alignments/lawful-evil" + }, + { + "index": "neutral-evil", + "name": "Neutral Evil", + "url": "/api/alignments/neutral-evil" + }, + { + "index": "chaotic-evil", + "name": "Chaotic Evil", + "url": "/api/alignments/chaotic-evil" + } + ] + } + ] + } + }, + "bonds": { + "choose": 1, + "type": "bonds", + "from": { + "option_set_type": "options_array", + "options": [ + { + "option_type": "string", + "string": "I would die to recover an ancient relic of my faith that was lost long ago." + }, + { + "option_type": "string", + "string": "I will someday get revenge on the corrupt temple hierarchy who branded me a heretic." + }, + { + "option_type": "string", + "string": "I owe my life to the priest who took me in when my parents died." + }, + { + "option_type": "string", + "string": "Everything I do is for the common people." + }, + { + "option_type": "string", + "string": "I will do anything to protect the temple where I served." + }, + { + "option_type": "string", + "string": "I seek to preserve a sacred text that my enemies consider heretical and seek to destroy." + } + ] + } + }, + "flaws": { + "choose": 1, + "type": "flaws", + "from": { + "option_set_type": "options_array", + "options": [ + { + "option_type": "string", + "string": "I judge others harshly, and myself even more severely." + }, + { + "option_type": "string", + "string": "I put too much trust in those who wield power within my temple's hierarchy." + }, + { + "option_type": "string", + "string": "My piety sometimes leads me to blindly trust those that profess faith in my god." + }, + { + "option_type": "string", + "string": "I am inflexible in my thinking." + }, + { + "option_type": "string", + "string": "I am suspicious of strangers and expect the worst of them." + }, + { + "option_type": "string", + "string": "Once I pick a goal, I become obsessed with it to the detriment of everything else in my life." + } + ] + } + }, + "url": "/api/backgrounds/acolyte" + } + } + } + } + } + } + }, + "/api/classes/{index}": { + "get": { + "summary": "Get a class by index.", + "description": "# Class\n\nA character class is a fundamental part of the identity and nature of\ncharacters in the Dungeons & Dragons role-playing game. A character's\ncapabilities, strengths, and weaknesses are largely defined by its class.\nA character's class affects a character's available skills and abilities. [[SRD p8-55](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=8)]\n", + "tags": [ + "Class" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Class" + }, + "example": { + "class_levels": "/api/classes/barbarian/levels", + "hit_die": 12, + "index": "barbarian", + "multi_classing": { + "prerequisites": [ + { + "ability_score": { + "index": "str", + "name": "STR", + "url": "/api/ability-scores/str" + }, + "minimum_score": 13 + } + ], + "proficiencies": [ + { + "index": "shields", + "name": "Shields", + "url": "/api/proficiencies/shields" + }, + { + "index": "simple-weapons", + "name": "Simple Weapons", + "url": "/api/proficiencies/simple-weapons" + }, + { + "index": "martial-weapons", + "name": "Martial Weapons", + "url": "/api/proficiencies/martial-weapons" + } + ], + "proficiency_choices": [] + }, + "name": "Barbarian", + "proficiencies": [ + { + "index": "light-armor", + "name": "Light Armor", + "url": "/api/proficiencies/light-armor" + }, + { + "index": "medium-armor", + "name": "Medium Armor", + "url": "/api/proficiencies/medium-armor" + }, + { + "index": "shields", + "name": "Shields", + "url": "/api/proficiencies/shields" + }, + { + "index": "simple-weapons", + "name": "Simple Weapons", + "url": "/api/proficiencies/simple-weapons" + }, + { + "index": "martial-weapons", + "name": "Martial Weapons", + "url": "/api/proficiencies/martial-weapons" + } + ], + "proficiency_choices": [ + { + "desc": "Choose two from Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival", + "choose": 2, + "type": "proficiencies", + "from": { + "option_set_type": "options_array", + "options": [ + { + "option_type": "reference", + "item": { + "index": "skill-animal-handling", + "name": "Skill: Animal Handling", + "url": "/api/proficiencies/skill-animal-handling" + } + }, + { + "option_type": "reference", + "item": { + "index": "skill-athletics", + "name": "Skill: Athletics", + "url": "/api/proficiencies/skill-athletics" + } + }, + { + "option_type": "reference", + "item": { + "index": "skill-intimidation", + "name": "Skill: Intimidation", + "url": "/api/proficiencies/skill-intimidation" + } + }, + { + "option_type": "reference", + "item": { + "index": "skill-nature", + "name": "Skill: Nature", + "url": "/api/proficiencies/skill-nature" + } + }, + { + "option_type": "reference", + "item": { + "index": "skill-perception", + "name": "Skill: Perception", + "url": "/api/proficiencies/skill-perception" + } + }, + { + "option_type": "reference", + "item": { + "index": "skill-survival", + "name": "Skill: Survival", + "url": "/api/proficiencies/skill-survival" + } + } + ] + } + } + ], + "saving_throws": [ + { + "index": "str", + "name": "STR", + "url": "/api/ability-scores/str" + }, + { + "index": "con", + "name": "CON", + "url": "/api/ability-scores/con" + } + ], + "starting_equipment": [ + { + "equipment": { + "index": "explorers-pack", + "name": "Explorer's Pack", + "url": "/api/equipment/explorers-pack" + }, + "quantity": 1 + }, + { + "equipment": { + "index": "javelin", + "name": "Javelin", + "url": "/api/equipment/javelin" + }, + "quantity": 4 + } + ], + "starting_equipment_options": [ + { + "desc": "(a) a greataxe or (b) any martial melee weapon", + "choose": 1, + "type": "equipment", + "from": { + "option_set_type": "options_array", + "options": [ + { + "option_type": "counted_reference", + "count": 1, + "of": { + "index": "greataxe", + "name": "Greataxe", + "url": "/api/equipment/greataxe" + } + }, + { + "option_type": "choice", + "choice": { + "desc": "any martial melee weapon", + "choose": 1, + "type": "equipment", + "from": { + "option_set_type": "equipment_category", + "equipment_category": { + "index": "martial-melee-weapons", + "name": "Martial Melee Weapons", + "url": "/api/equipment-categories/martial-melee-weapons" + } + } + } + } + ] + } + }, + { + "desc": "(a) two handaxes or (b) any simple weapon", + "choose": 1, + "type": "equipment", + "from": { + "option_set_type": "options_array", + "options": [ + { + "option_type": "counted_reference", + "count": 2, + "of": { + "index": "handaxe", + "name": "Handaxe", + "url": "/api/equipment/handaxe" + } + }, + { + "option_type": "choice", + "choice": { + "desc": "any simple weapon", + "choose": 1, + "type": "equipment", + "from": { + "option_set_type": "equipment_category", + "equipment_category": { + "index": "simple-weapons", + "name": "Simple Weapons", + "url": "/api/equipment-categories/simple-weapons" + } + } + } + } + ] + } + } + ], + "subclasses": [ + { + "index": "berserker", + "name": "Berserker", + "url": "/api/subclasses/berserker" + } + ], + "url": "/api/classes/barbarian" + } + } + } + } + } + } + }, + "/api/classes/{index}/subclasses": { + "get": { + "summary": "Get subclasses available for a class.", + "tags": [ + "Class Resource Lists" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + }, + "example": { + "count": 1, + "results": [ + { + "index": "berserker", + "name": "Berserker", + "url": "/api/subclasses/berserker" + } + ] + } + } + } + } + } + } + }, + "/api/classes/{index}/spells": { + "get": { + "summary": "Get spells available for a class.", + "tags": [ + "Class Resource Lists" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClassSpellList" + }, + "example": { + "count": 2, + "results": [ + { + "index": "power-word-kill", + "name": "Power Word Kill", + "url": "/api/spells/power-word-kill" + }, + { + "index": "true-polymorph", + "name": "True Polymorph", + "url": "/api/spells/true-polymorph" + } + ] + } + } + } + } + } + } + }, + "/api/classes/{index}/spellcasting": { + "get": { + "summary": "Get spellcasting info for a class.", + "tags": [ + "Class" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Spellcasting" + }, + "example": { + "level": 1, + "spellcasting_ability": { + "index": "cha", + "name": "CHA", + "url": "/api/ability-scores/cha" + }, + "info": [ + { + "name": "Cantrips", + "desc": [ + "You know two cantrips of your choice from the bard spell list. You learn additional bard cantrips of your choice at higher levels, as shown in the Cantrips Known column of the Bard table." + ] + }, + { + "name": "Spell Slots", + "desc": [ + "The Bard table shows how many spell slots you have to cast your spells of 1st level and higher. To cast one of these spells, you must expend a slot of the spell's level or higher. You regain all expended spell slots when you finish a long rest.", + "For example, if you know the 1st-level spell cure wounds and have a 1st-level and a 2nd-level spell slot available, you can cast cure wounds using either slot." + ] + }, + { + "name": "Spells Known of 1st Level and Higher", + "desc": [ + "You know four 1st-level spells of your choice from the bard spell list.", + "The Spells Known column of the Bard table shows when you learn more bard spells of your choice.", + "Each of these spells must be of a level for which you have spell slots, as shown on the table. For instance, when you reach 3rd level in this class, you can learn one new spell of 1st or 2nd level.", + "Additionally, when you gain a level in this class, you can choose one of the bard spells you know and replace it with another spell from the bard spell list, which also must be of a level for which you have spell slots." + ] + }, + { + "name": "Spellcasting Ability", + "desc": [ + "Charisma is your spellcasting ability for your bard spells. Your magic comes from the heart and soul you pour into the performance of your music or oration. You use your Charisma whenever a spell refers to your spellcasting ability. In addition, you use your Charisma modifier when setting the saving throw DC for a bard spell you cast and when making an attack roll with one.", + "Spell save DC = 8 + your proficiency bonus + your Charisma modifier.", + "Spell attack modifier = your proficiency bonus + your Charisma modifier." + ] + }, + { + "name": "Ritual Casting", + "desc": [ + "You can cast any bard spell you know as a ritual if that spell has the ritual tag." + ] + }, + { + "name": "Spellcasting Focus", + "desc": [ + "You can use a musical instrument (see Equipment) as a spellcasting focus for your bard spells." + ] + } + ] + } + } + } + }, + "404": { + "description": "Not found.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/error-response" + }, + "example": { + "error": "Not found" + } + } + } + } + } + } + }, + "/api/classes/{index}/features": { + "get": { + "summary": "Get features available for a class.", + "tags": [ + "Class Resource Lists" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + } + ], + "responses": { + "200": { + "description": "List of features for the class.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/classes/{index}/proficiencies": { + "get": { + "summary": "Get proficiencies available for a class.", + "tags": [ + "Class Resource Lists" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + } + ], + "responses": { + "200": { + "description": "List of proficiencies for the class.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/classes/{index}/multi-classing": { + "get": { + "summary": "Get multiclassing resource for a class.", + "tags": [ + "Class" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Multiclassing" + }, + "example": { + "prerequisites": [ + { + "ability_score": { + "index": "str", + "name": "STR", + "url": "/api/ability-scores/str" + }, + "minimum_score": 13 + } + ], + "proficiencies": [ + { + "index": "shields", + "name": "Shields", + "url": "/api/proficiencies/shields" + }, + { + "index": "simple-weapons", + "name": "Simple Weapons", + "url": "/api/proficiencies/simple-weapons" + }, + { + "index": "martial-weapons", + "name": "Martial Weapons", + "url": "/api/proficiencies/martial-weapons" + } + ], + "proficiency_choices": [] + } + } + } + } + } + } + }, + "/api/classes/{index}/levels": { + "get": { + "summary": "Get all level resources for a class.", + "tags": [ + "Class Levels" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + }, + { + "$ref": "#/components/parameters/levels-subclass-filter" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ClassLevel" + } + } + } + } + } + } + } + }, + "/api/classes/{index}/levels/{class_level}": { + "get": { + "summary": "Get level resource for a class and level.", + "tags": [ + "Class Levels" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + }, + { + "$ref": "#/components/parameters/class-level" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClassLevel" + }, + "example": { + "level": 1, + "ability_score_bonuses": 0, + "prof_bonus": 2, + "features": [ + { + "index": "rage", + "name": "Rage", + "url": "/api/features/rage" + }, + { + "index": "barbarian-unarmored-defense", + "name": "Unarmored Defense", + "url": "/api/features/barbarian-unarmored-defense" + } + ], + "class_specific": { + "rage_count": 2, + "rage_damage_bonus": 2, + "brutal_critical_dice": 0 + }, + "index": "barbarian-1", + "class": { + "index": "barbarian", + "name": "Barbarian", + "url": "/api/classes/barbarian" + }, + "url": "/api/classes/barbarian/levels/1" + } + } + } + } + } + } + }, + "/api/classes/{index}/levels/{class_level}/features": { + "get": { + "summary": "Get features available to a class at the requested level.", + "tags": [ + "Class Levels" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + }, + { + "$ref": "#/components/parameters/class-level" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + }, + "example": { + "count": 2, + "results": [ + { + "index": "barbarian-unarmored-defense", + "name": "Unarmored Defense", + "url": "/api/features/barbarian-unarmored-defense" + }, + { + "index": "rage", + "name": "Rage", + "url": "/api/features/rage" + } + ] + } + } + } + } + } + } + }, + "/api/classes/{index}/levels/{spell_level}/spells": { + "get": { + "summary": "Get spells of the requested level available to the class.", + "tags": [ + "Class Levels" + ], + "parameters": [ + { + "$ref": "#/components/parameters/class-index" + }, + { + "$ref": "#/components/parameters/spell-level" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + }, + "example": { + "count": 5, + "results": [ + { + "index": "dominate-monster", + "name": "Dominate Monster", + "url": "/api/spells/dominate-monster" + }, + { + "index": "earthquake", + "name": "Earthquake", + "url": "/api/spells/earthquake" + }, + { + "index": "incendiary-cloud", + "name": "Incendiary Cloud", + "url": "/api/spells/incendiary-cloud" + }, + { + "index": "power-word-stun", + "name": "Power Word Stun", + "url": "/api/spells/power-word-stun" + }, + { + "index": "sunburst", + "name": "Sunburst", + "url": "/api/spells/sunburst" + } + ] + } + } + } + } + } + } + }, + "/api/conditions/{index}": { + "get": { + "summary": "Get a condition by index.", + "description": "# Condition\n\nA condition alters a creature’s capabilities in a variety of ways and can \narise as a result of a spell, a class feature, a monster’s attack, or other \neffect. Most conditions, such as blinded, are impairments, but a few, such \nas invisible, can be advantageous.\n", + "tags": [ + "Game Mechanics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/condition-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Condition" + }, + "example": { + "index": "blinded", + "name": "Blinded", + "url": "/api/conditions/blinded", + "desc": [ + "- A blinded creature can't see and automatically fails any ability check that requires sight.", + "- Attack rolls against the creature have advantage, and the creature's attack rolls have disadvantage." + ] + } + } + } + } + } + } + }, + "/api/damage-types/{index}": { + "get": { + "summary": "Get a damage type by index.", + "description": "# Damage type\n\nDifferent attacks, damaging spells, and other harmful effects deal different \ntypes of damage. Damage types have no rules of their own, but other rules, \nsuch as damage resistance, rely on the types.\n", + "tags": [ + "Game Mechanics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/damage-type-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DamageType" + }, + "example": { + "index": "acid", + "name": "Acid", + "url": "/api/damage-types/acid", + "desc": [ + "The corrosive spray of a black dragon's breath and the dissolving enzymes secreted by a black pudding deal acid damage." + ] + } + } + } + } + } + } + }, + "/api/equipment/{index}": { + "get": { + "summary": "Get an equipment item by index.", + "description": "# Equipment\n\nOpportunities abound to find treasure, equipment, weapons, armor, and more \nin the dungeons you explore. Normally, you can sell your treasures and \ntrinkets when you return to a town or other settlement, provided that you \ncan find buyers and merchants interested in your loot.\n", + "tags": [ + "Equipment" + ], + "parameters": [ + { + "$ref": "#/components/parameters/equipment-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Equipment" + }, + "example": { + "category_range": "Simple Melee", + "contents": [], + "cost": { + "quantity": 1, + "unit": "sp" + }, + "damage": { + "damage_dice": "1d4", + "damage_type": { + "index": "bludgeoning", + "name": "Bludgeoning", + "url": "/api/damage-types/bludgeoning" + } + }, + "desc": [], + "equipment_category": { + "index": "weapon", + "name": "Weapon", + "url": "/api/equipment-categories/weapon" + }, + "index": "club", + "name": "Club", + "properties": [ + { + "index": "light", + "name": "Light", + "url": "/api/weapon-properties/light" + }, + { + "index": "monk", + "name": "Monk", + "url": "/api/weapon-properties/monk" + } + ], + "range": { + "long": null, + "normal": 5 + }, + "special": [], + "url": "/api/equipment/club", + "weapon_category": "Simple", + "weapon_range": "Melee", + "weight": 2 + } + } + } + } + } + } + }, + "/api/equipment-categories/{index}": { + "get": { + "summary": "Get an equipment category by index.", + "description": "These are the categories that various equipment fall under.", + "tags": [ + "Equipment" + ], + "parameters": [ + { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the equipment category score to get.\n\nAvailable values can be found in the resource list for this endpoint.\n", + "schema": { + "type": "string" + }, + "example": "waterborne-vehicles" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EquipmentCategory" + }, + "example": { + "index": "waterborne-vehicles", + "name": "Waterborne Vehicles", + "url": "/api/equipment-categories/waterborne-vehicles", + "equipment": [ + { + "index": "galley", + "name": "Galley", + "url": "/api/equipment/galley" + }, + { + "index": "keelboat", + "name": "Keelboat", + "url": "/api/equipment/keelboat" + }, + { + "index": "longship", + "name": "Longship", + "url": "/api/equipment/longship" + }, + { + "index": "rowboat", + "name": "Rowboat", + "url": "/api/equipment/rowboat" + }, + { + "index": "sailing-ship", + "name": "Sailing ship", + "url": "/api/equipment/sailing-ship" + }, + { + "index": "warship", + "name": "Warship", + "url": "/api/equipment/warship" + } + ] + } + } + } + } + } + } + }, + "/api/feats/{index}": { + "get": { + "summary": "Get a feat by index.", + "description": "# Feat \n\nA feat is a boon a character can receive at level up instead of an ability score increase.\n", + "tags": [ + "Feats" + ], + "parameters": [ + { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the feat to get.\n", + "schema": { + "type": "string", + "enum": [ + "grappler" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feat" + }, + "example": { + "index": "grappler", + "name": "Grappler", + "url": "/api/feats/grappler", + "desc": [ + "You’ve developed the Skills necessary to hold your own in close--quarters Grappling. You gain the following benefits:", + "- You have advantage on Attack Rolls against a creature you are Grappling.", + "- You can use your action to try to pin a creature Grappled by you. To do so, make another grapple check. If you succeed, you and the creature are both Restrained until the grapple ends." + ], + "prerequisites": [ + { + "ability_score": { + "index": "str", + "name": "STR", + "url": "/api/ability-scores/str" + }, + "minimum_score": 13 + } + ] + } + } + } + } + } + } + }, + "/api/features/{index}": { + "get": { + "summary": "Get a feature by index.", + "description": "# Feature \n\nWhen you gain a new level in a class, you get its features for that level. \nYou don’t, however, receive the class’s starting Equipment, and a few \nfeatures have additional rules when you’re multiclassing: Channel Divinity, \nExtra Attack, Unarmored Defense, and Spellcasting.\n", + "tags": [ + "Features" + ], + "parameters": [ + { + "$ref": "#/components/parameters/feature-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feature" + }, + "example": { + "index": "action-surge-1-use", + "name": "Action Surge (1 use)", + "url": "/api/features/action-surge-1-use", + "class": { + "index": "fighter", + "name": "Fighter", + "url": "/api/classes/fighter" + }, + "desc": [ + "Starting at 2nd level, you can push yourself beyond your normal limits for a moment. On your turn, you can take one additional action on top of your regular action and a possible bonus action.", + "Once you use this feature, you must finish a short or long rest before you can use it again. Starting at 17th level, you can use it twice before a rest, but only once on the same turn." + ], + "level": 2, + "prerequisites": [] + } + } + } + } + } + } + }, + "/api/languages/{index}": { + "get": { + "summary": "Get a language by index.", + "description": "# Language\n\nYour race indicates the languages your character can speak by default, and your background might give you access to one or more additional languages of your choice. [[SRD p59](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=59)]\n", + "tags": [ + "Character Data" + ], + "parameters": [ + { + "$ref": "#/components/parameters/language-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Language" + }, + "example": { + "index": "elvish", + "name": "Elvish", + "url": "/api/languages/elvish", + "desc": "Elvish is fluid, with subtle intonations and intricate grammar. Elven literature is rich and varied, and their songs and poems are famous among other races. Many bards learn their language so they can add Elvish ballads to their repertoires.", + "type": "Standard", + "script": "Elvish", + "typical_speakers": [ + "Elves" + ] + } + } + } + } + } + } + }, + "/api/magic-items/{index}": { + "get": { + "summary": "Get a magic item by index.", + "description": "These are the various magic items you can find in the game.", + "tags": [ + "Equipment" + ], + "parameters": [ + { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the magic item to get.\n\nAvailable values can be found in the resource list for this endpoint.\n", + "schema": { + "type": "string" + }, + "example": "adamantine-armor" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MagicItem" + }, + "example": { + "index": "adamantine-armor", + "name": "Adamantine Armor", + "url": "/api/magic-items/adamantine-armor", + "desc": [ + "Armor (medium or heavy, but not hide), uncommon", + "This suit of armor is reinforced with adamantine, one of the hardest substances in existence. While you're wearing it, any critical hit against you becomes a normal hit." + ], + "equipment_category": { + "index": "armor", + "name": "Armor", + "url": "/api/equipment-categories/armor" + }, + "rarity": { + "name": "Uncommon" + }, + "variants": [], + "variant": false + } + } + } + } + } + } + }, + "/api/magic-schools/{index}": { + "get": { + "summary": "Get a magic school by index.", + "description": "# Magic School\n\nAcademies of magic group spells into eight categories called schools of \nmagic. Scholars, particularly wizards, apply these categories to all spells, \nbelieving that all magic functions in essentially the same way, whether it \nderives from rigorous study or is bestowed by a deity.\n", + "tags": [ + "Game Mechanics" + ], + "parameters": [ + { + "$ref": "#/components/parameters/magic-school-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MagicSchool" + }, + "example": { + "index": "conjuration", + "name": "Conjuration", + "url": "/api/magic-schools/conjuration", + "desc": "Conjuration spells involve the transportation of objects and creatures from one location to another. Some spells summon creatures or objects to the caster's side, whereas others allow the caster to teleport to another location. Some conjurations create objects or effects out of nothing." + } + } + } + } + } + } + }, + "/api/monsters": { + "get": { + "summary": "Get list of monsters with optional filtering", + "tags": [ + "Monsters" + ], + "parameters": [ + { + "$ref": "#/components/parameters/challenge-rating-filter" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/monsters/{index}": { + "get": { + "summary": "Get monster by index.", + "tags": [ + "Monsters" + ], + "parameters": [ + { + "$ref": "#/components/parameters/monster-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Monster" + }, + "example": { + "index": "aboleth", + "name": "Aboleth", + "url": "/api/monsters/aboleth", + "actions": [ + { + "attacks": [], + "damage": [], + "desc": "The aboleth makes three tentacle attacks.", + "name": "Multiattack", + "multiattack_type": "actions", + "actions": [ + { + "action_name": "Tentacle", + "count": 3, + "type": "melee" + } + ] + }, + { + "attack_bonus": 9, + "attacks": [], + "damage": [ + { + "damage_dice": "2d6+5", + "damage_type": { + "index": "bludgeoning", + "name": "Bludgeoning", + "url": "/api/damage-types/bludgeoning" + } + }, + { + "damage_dice": "1d12", + "damage_type": { + "index": "acid", + "name": "Acid", + "url": "/api/damage-types/acid" + } + } + ], + "dc": { + "dc_type": { + "index": "con", + "name": "CON", + "url": "/api/ability-scores/con" + }, + "dc_value": 14, + "success_type": "none" + }, + "desc": "Melee Weapon Attack: +9 to hit, reach 10 ft., one target. Hit: 12 (2d6 + 5) bludgeoning damage. If the target is a creature, it must succeed on a DC 14 Constitution saving throw or become diseased. The disease has no effect for 1 minute and can be removed by any magic that cures disease. After 1 minute, the diseased creature's skin becomes translucent and slimy, the creature can't regain hit points unless it is underwater, and the disease can be removed only by heal or another disease-curing spell of 6th level or higher. When the creature is outside a body of water, it takes 6 (1d12) acid damage every 10 minutes unless moisture is applied to the skin before 10 minutes have passed.", + "name": "Tentacle" + }, + { + "attack_bonus": 9, + "attacks": [], + "damage": [ + { + "damage_dice": "3d6+5", + "damage_type": { + "index": "bludgeoning", + "name": "Bludgeoning", + "url": "/api/damage-types/bludgeoning" + } + } + ], + "desc": "Melee Weapon Attack: +9 to hit, reach 10 ft. one target. Hit: 15 (3d6 + 5) bludgeoning damage.", + "name": "Tail" + }, + { + "attacks": [], + "damage": [], + "dc": { + "dc_type": { + "index": "wis", + "name": "WIS", + "url": "/api/ability-scores/wis" + }, + "dc_value": 14, + "success_type": "none" + }, + "desc": "The aboleth targets one creature it can see within 30 ft. of it. The target must succeed on a DC 14 Wisdom saving throw or be magically charmed by the aboleth until the aboleth dies or until it is on a different plane of existence from the target. The charmed target is under the aboleth's control and can't take reactions, and the aboleth and the target can communicate telepathically with each other over any distance.\nWhenever the charmed target takes damage, the target can repeat the saving throw. On a success, the effect ends. No more than once every 24 hours, the target can also repeat the saving throw when it is at least 1 mile away from the aboleth.", + "name": "Enslave", + "usage": { + "times": 3, + "type": "per day" + } + } + ], + "alignment": "lawful evil", + "armor_class": [ + { + "type": "natural", + "value": 17 + } + ], + "challenge_rating": 10, + "proficiency_bonus": 4, + "charisma": 18, + "condition_immunities": [], + "constitution": 15, + "damage_immunities": [], + "damage_resistances": [], + "damage_vulnerabilities": [], + "dexterity": 9, + "forms": [], + "hit_dice": "18d10", + "hit_points": 135, + "hit_points_roll": "18d10+36", + "intelligence": 18, + "languages": "Deep Speech, telepathy 120 ft.", + "legendary_actions": [ + { + "damage": [], + "desc": "The aboleth makes a Wisdom (Perception) check.", + "name": "Detect" + }, + { + "damage": [], + "desc": "The aboleth makes one tail attack.", + "name": "Tail Swipe" + }, + { + "attack_bonus": 0, + "damage": [ + { + "damage_dice": "3d6", + "damage_type": { + "index": "psychic", + "name": "Psychic", + "url": "/api/damage-types/psychic" + } + } + ], + "desc": "One creature charmed by the aboleth takes 10 (3d6) psychic damage, and the aboleth regains hit points equal to the damage the creature takes.", + "name": "Psychic Drain (Costs 2 Actions)" + } + ], + "proficiencies": [ + { + "proficiency": { + "index": "saving-throw-con", + "name": "Saving Throw: CON", + "url": "/api/proficiencies/saving-throw-con" + }, + "value": 6 + }, + { + "proficiency": { + "index": "saving-throw-int", + "name": "Saving Throw: INT", + "url": "/api/proficiencies/saving-throw-int" + }, + "value": 8 + }, + { + "proficiency": { + "index": "saving-throw-wis", + "name": "Saving Throw: WIS", + "url": "/api/proficiencies/saving-throw-wis" + }, + "value": 6 + }, + { + "proficiency": { + "index": "skill-history", + "name": "Skill: History", + "url": "/api/proficiencies/skill-history" + }, + "value": 12 + }, + { + "proficiency": { + "index": "skill-perception", + "name": "Skill: Perception", + "url": "/api/proficiencies/skill-perception" + }, + "value": 10 + } + ], + "reactions": [], + "senses": { + "darkvision": "120 ft.", + "passive_perception": 20 + }, + "size": "Large", + "special_abilities": [ + { + "damage": [], + "desc": "The aboleth can breathe air and water.", + "name": "Amphibious" + }, + { + "damage": [], + "dc": { + "dc_type": { + "index": "con", + "name": "CON", + "url": "/api/ability-scores/con" + }, + "dc_value": 14, + "success_type": "none" + }, + "desc": "While underwater, the aboleth is surrounded by transformative mucus. A creature that touches the aboleth or that hits it with a melee attack while within 5 ft. of it must make a DC 14 Constitution saving throw. On a failure, the creature is diseased for 1d4 hours. The diseased creature can breathe only underwater.", + "name": "Mucous Cloud" + }, + { + "damage": [], + "desc": "If a creature communicates telepathically with the aboleth, the aboleth learns the creature's greatest desires if the aboleth can see the creature.", + "name": "Probing Telepathy" + } + ], + "speed": { + "swim": "40 ft.", + "walk": "10 ft." + }, + "strength": 21, + "subtype": null, + "type": "aberration", + "wisdom": 15, + "xp": 5900 + } + } + } + } + } + } + }, + "/api/proficiencies/{index}": { + "get": { + "summary": "Get a proficiency by index.", + "description": "# Proficiency \n\nBy virtue of race, class, and background a character is proficient at using certain skills, weapons, and equipment. Characters can also gain additional proficiencies at higher levels or by multiclassing. A characters starting proficiencies are determined during character creation.\n", + "tags": [ + "Character Data" + ], + "parameters": [ + { + "$ref": "#/components/parameters/proficiency-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Proficiency" + }, + "example": { + "index": "medium-armor", + "name": "Medium Armor", + "url": "/api/proficiencies/medium-armor", + "type": "Armor", + "classes": [ + { + "index": "barbarian", + "name": "Barbarian", + "url": "/api/classes/barbarian" + }, + { + "index": "cleric", + "name": "Cleric", + "url": "/api/classes/cleric" + }, + { + "index": "druid", + "name": "Druid", + "url": "/api/classes/druid" + }, + { + "index": "ranger", + "name": "Ranger", + "url": "/api/classes/ranger" + } + ], + "races": [], + "reference": { + "index": "medium-armor", + "name": "Medium Armor", + "url": "/api/equipment-categories/medium-armor" + } + } + } + } + } + } + } + }, + "/api/races/{index}": { + "get": { + "summary": "Get a race by index.", + "description": "Each race grants your character ability and skill bonuses as well as racial traits.", + "tags": [ + "Races" + ], + "parameters": [ + { + "$ref": "#/components/parameters/race-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Race" + }, + "example": { + "index": "elf", + "name": "Elf", + "url": "/api/races/elf", + "ability_bonuses": [ + { + "ability_score": { + "index": "dex", + "name": "DEX", + "url": "/api/ability-scores/dex" + }, + "bonus": 2 + } + ], + "age": "Although elves reach physical maturity at about the same age as humans, the elven understanding of adulthood goes beyond physical growth to encompass worldly experience. An elf typically claims adulthood and an adult name around the age of 100 and can live to be 750 years old.", + "alignment": "Elves love freedom, variety, and self-expression, so they lean strongly toward the gentler aspects of chaos. They value and protect others' freedom as well as their own, and they are more often good than not. The drow are an exception; their exile has made them vicious and dangerous. Drow are more often evil than not.", + "language_desc": "You can speak, read, and write Common and Elvish. Elvish is fluid, with subtle intonations and intricate grammar. Elven literature is rich and varied, and their songs and poems are famous among other races. Many bards learn their language so they can add Elvish ballads to their repertoires.", + "languages": [ + { + "index": "common", + "name": "Common", + "url": "/api/languages/common" + }, + { + "index": "elvish", + "name": "Elvish", + "url": "/api/languages/elvish" + } + ], + "size": "Medium", + "size_description": "Elves range from under 5 to over 6 feet tall and have slender builds. Your size is Medium.", + "speed": 30, + "starting_proficiencies": [ + { + "index": "skill-perception", + "name": "Skill: Perception", + "url": "/api/proficiencies/skill-perception" + } + ], + "subraces": [ + { + "index": "high-elf", + "name": "High Elf", + "url": "/api/subraces/high-elf" + } + ], + "traits": [ + { + "index": "darkvision", + "name": "Darkvision", + "url": "/api/traits/darkvision" + }, + { + "index": "fey-ancestry", + "name": "Fey Ancestry", + "url": "/api/traits/fey-ancestry" + }, + { + "index": "trance", + "name": "Trance", + "url": "/api/traits/trance" + } + ] + } + } + } + } + } + } + }, + "/api/races/{index}/subraces": { + "get": { + "summary": "Get subraces available for a race.", + "tags": [ + "Races" + ], + "parameters": [ + { + "$ref": "#/components/parameters/race-index" + } + ], + "responses": { + "200": { + "description": "List of subraces for the race.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/races/{index}/proficiencies": { + "get": { + "summary": "Get proficiencies available for a race.", + "tags": [ + "Races" + ], + "parameters": [ + { + "$ref": "#/components/parameters/race-index" + } + ], + "responses": { + "200": { + "description": "List of proficiencies for the race.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/races/{index}/traits": { + "get": { + "summary": "Get traits available for a race.", + "tags": [ + "Races" + ], + "parameters": [ + { + "$ref": "#/components/parameters/race-index" + } + ], + "responses": { + "200": { + "description": "List of traits for the race.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/rule-sections/{index}": { + "get": { + "summary": "Get a rule section by index.", + "description": "Rule sections represent a sub-heading and text that can be found underneath a rule heading in the SRD.", + "tags": [ + "Rules" + ], + "parameters": [ + { + "$ref": "#/components/parameters/rule-section-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RuleSection" + }, + "example": { + "index": "time", + "name": "Time", + "url": "/api/rule-sections/time", + "desc": "## Time\n\nIn situations where keeping track of the passage of time is important, the GM determines the time a task requires. The GM might use a different time scale depending on the context of the situation at hand. In a dungeon environment, the adventurers' movement happens on a scale of **minutes**. It takes them about a minute to creep down a long hallway, another minute to check for traps on the door at the end of the hall, and a good ten minutes to search the chamber beyond for anything interesting or valuable.\n\nIn a city or wilderness, a scale of **hours** is often more appropriate. Adventurers eager to reach the lonely tower at the heart of the forest hurry across those fifteen miles in just under four hours' time.\n\nFor long journeys, a scale of **days** works best.\n\nFollowing the road from Baldur's Gate to Waterdeep, the adventurers spend four uneventful days before a goblin ambush interrupts their journey.\n\nIn combat and other fast-paced situations, the game relies on **rounds**, a 6-second span of time.\n" + } + } + } + } + } + } + }, + "/api/rules/{index}": { + "get": { + "summary": "Get a rule by index.", + "description": "# Rule \n\nRules are pages in the SRD that document the mechanics of Dungeons and Dragons. \nRules have descriptions which is the text directly underneath the rule heading \nin the SRD. Rules also have subsections for each heading underneath the rule in the SRD.\n", + "tags": [ + "Rules" + ], + "parameters": [ + { + "$ref": "#/components/parameters/rule-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Rule" + }, + "example": { + "index": "using-ability-scores", + "name": "Using Ability Scores", + "url": "/api/rules/using-ability-scores", + "desc": "# Using Ability Scores\n\nSix abilities provide a quick description of every creature's physical and mental characteristics:\n- **Strength**, measuring physical power\n- **Dexterity**, measuring agility\n- **Constitution**, measuring endurance\n- **Intelligence**, measuring reasoning and memory\n- **Wisdom**, measuring perception and insight\n- **Charisma**, measuring force of personality\n\nIs a character muscle-bound and insightful? Brilliant and charming? Nimble and hardy? Ability scores define these qualities-a creature's assets as well as weaknesses.\n\nThe three main rolls of the game-the ability check, the saving throw, and the attack roll-rely on the six ability scores. The book's introduction describes the basic rule behind these rolls: roll a d20, add an ability modifier derived from one of the six ability scores, and compare the total to a target number.\n\n**Ability Scores and Modifiers** Each of a creature's abilities has a score, a number that defines the magnitude of that ability. An ability score is not just a measure of innate capabilities, but also encompasses a creature's training and competence in activities related to that ability.\n\nA score of 10 or 11 is the normal human average, but adventurers and many monsters are a cut above average in most abilities. A score of 18 is the highest that a person usually reaches. Adventurers can have scores as high as 20, and monsters and divine beings can have scores as high as 30.\n\nEach ability also has a modifier, derived from the score and ranging from -5 (for an ability score of 1) to +10 (for a score of 30). The Ability Scores and Modifiers table notes the ability modifiers for the range of possible ability scores, from 1 to 30.\n", + "subsections": [ + { + "index": "ability-scores-and-modifiers", + "name": "Ability Scores and Modifiers", + "url": "/api/rule-sections/ability-scores-and-modifiers" + }, + { + "index": "advantage-and-disadvantage", + "name": "Advantage and Disadvantage", + "url": "/api/rule-sections/advantage-and-disadvantage" + }, + { + "index": "proficiency-bonus", + "name": "Proficiency Bonus", + "url": "/api/rule-sections/proficiency-bonus" + }, + { + "index": "ability-checks", + "name": "Ability Checks", + "url": "/api/rule-sections/ability-checks" + }, + { + "index": "using-each-ability", + "name": "Using Each Ability", + "url": "/api/rule-sections/using-each-ability" + }, + { + "index": "saving-throws", + "name": "Saving Throws", + "url": "/api/rule-sections/saving-throws" + } + ] + } + } + } + } + } + } + }, + "/api/skills/{index}": { + "get": { + "summary": "Get a skill by index.", + "description": "# Skill\n\nEach ability covers a broad range of capabilities, including skills that a character or a monster can be proficient in. A skill represents a specific aspect of an ability score, and an individual's proficiency in a skill demonstrates a focus on that aspect. [[SRD p77](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=77)]\n", + "tags": [ + "Character Data" + ], + "parameters": [ + { + "$ref": "#/components/parameters/skill-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Skill" + }, + "example": { + "index": "acrobatics", + "name": "Acrobatics", + "url": "/api/skills/acrobatics", + "ability_score": { + "index": "dex", + "name": "DEX", + "url": "/api/ability-scores/dex" + }, + "desc": [ + "Your Dexterity (Acrobatics) check covers your attempt to stay on your feet in a tricky situation, such as when you're trying to run across a sheet of ice, balance on a tightrope, or stay upright on a rocking ship's deck. The GM might also call for a Dexterity (Acrobatics) check to see if you can perform acrobatic stunts, including dives, rolls, somersaults, and flips." + ] + } + } + } + } + } + } + }, + "/api/spells": { + "get": { + "summary": "Get list of spells with optional filtering.", + "tags": [ + "Spells" + ], + "parameters": [ + { + "$ref": "#/components/parameters/level-filter" + }, + { + "$ref": "#/components/parameters/school-filter" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/spells/{index}": { + "get": { + "summary": "Get a spell by index.", + "tags": [ + "Spells" + ], + "parameters": [ + { + "$ref": "#/components/parameters/spell-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Spell" + }, + "example": { + "index": "sacred-flame", + "name": "Sacred Flame", + "url": "/api/spells/sacred-flame", + "attack_type": "ranged", + "casting_time": "1 action", + "classes": [ + { + "index": "cleric", + "name": "Cleric", + "url": "/api/classes/cleric" + } + ], + "components": [ + "V", + "S" + ], + "concentration": false, + "damage": { + "damage_at_character_level": { + "1": "1d8", + "5": "2d8", + "11": "3d8", + "17": "4d8" + }, + "damage_type": { + "index": "radiant", + "name": "Radiant", + "url": "/api/damage-types/radiant" + } + }, + "dc": { + "dc_success": "none", + "dc_type": { + "index": "dex", + "name": "DEX", + "url": "/api/ability-scores/dex" + } + }, + "desc": [ + "Flame-like radiance descends on a creature that you can see within range. The target must succeed on a dexterity saving throw or take 1d8 radiant damage. The target gains no benefit from cover for this saving throw.", + "The spell's damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8)." + ], + "duration": "Instantaneous", + "higher_level": [], + "level": 0, + "range": "60 feet", + "ritual": false, + "school": { + "index": "evocation", + "name": "Evocation", + "url": "/api/magic-schools/evocation" + }, + "subclasses": [ + { + "index": "lore", + "name": "Lore", + "url": "/api/subclasses/lore" + } + ] + } + } + } + } + } + } + }, + "/api/subclasses/{index}": { + "get": { + "summary": "Get a subclass by index.", + "description": "Subclasses reflect the different paths a class may take as levels are gained.", + "tags": [ + "Subclasses" + ], + "parameters": [ + { + "$ref": "#/components/parameters/subclass-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Subclass" + }, + "example": { + "index": "fiend", + "name": "Fiend", + "url": "/api/subclasses/fiend", + "class": { + "index": "warlock", + "name": "Warlock", + "url": "/api/classes/warlock" + }, + "desc": [ + "You have made a pact with a fiend from the lower planes of existence, a being whose aims are evil, even if you strive against those aims. Such beings desire the corruption or destruction of all things, ultimately including you. Fiends powerful enough to forge a pact include demon lords such as Demogorgon, Orcus, Fraz'Urb-luu, and Baphomet; archdevils such as Asmodeus, Dispater, Mephistopheles, and Belial; pit fiends and balors that are especially mighty; and ultroloths and other lords of the yugoloths." + ], + "spells": [ + { + "prerequisites": [ + { + "index": "warlock-1", + "name": "Warlock 1", + "type": "level", + "url": "/api/classes/warlock/levels/1" + } + ], + "spell": { + "index": "burning-hands", + "name": "Burning Hands", + "url": "/api/spells/burning-hands" + } + }, + { + "prerequisites": [ + { + "index": "warlock-1", + "name": "Warlock 1", + "type": "level", + "url": "/api/classes/warlock/levels/1" + } + ], + "spell": { + "index": "command", + "name": "Command", + "url": "/api/spells/command" + } + }, + { + "prerequisites": [ + { + "index": "warlock-3", + "name": "Warlock 3", + "type": "level", + "url": "/api/classes/warlock/levels/3" + } + ], + "spell": { + "index": "blindness-deafness", + "name": "Blindness/Deafness", + "url": "/api/spells/blindness-deafness" + } + }, + { + "prerequisites": [ + { + "index": "warlock-3", + "name": "Warlock 3", + "type": "level", + "url": "/api/classes/warlock/levels/3" + } + ], + "spell": { + "index": "scorching-ray", + "name": "Scorching Ray", + "url": "/api/spells/scorching-ray" + } + }, + { + "prerequisites": [ + { + "index": "warlock-5", + "name": "Warlock 5", + "type": "level", + "url": "/api/classes/warlock/levels/5" + } + ], + "spell": { + "index": "fireball", + "name": "Fireball", + "url": "/api/spells/fireball" + } + }, + { + "prerequisites": [ + { + "index": "warlock-5", + "name": "Warlock 5", + "type": "level", + "url": "/api/classes/warlock/levels/5" + } + ], + "spell": { + "index": "stinking-cloud", + "name": "Stinking Cloud", + "url": "/api/spells/stinking-cloud" + } + }, + { + "prerequisites": [ + { + "index": "warlock-7", + "name": "Warlock 7", + "type": "level", + "url": "/api/classes/warlock/levels/7" + } + ], + "spell": { + "index": "fire-shield", + "name": "Fire Shield", + "url": "/api/spells/fire-shield" + } + }, + { + "prerequisites": [ + { + "index": "warlock-7", + "name": "Warlock 7", + "type": "level", + "url": "/api/classes/warlock/levels/7" + } + ], + "spell": { + "index": "wall-of-fire", + "name": "Wall of Fire", + "url": "/api/spells/wall-of-fire" + } + }, + { + "prerequisites": [ + { + "index": "warlock-9", + "name": "Warlock 9", + "type": "level", + "url": "/api/classes/warlock/levels/9" + } + ], + "spell": { + "index": "flame-strike", + "name": "Flame Strike", + "url": "/api/spells/flame-strike" + } + }, + { + "prerequisites": [ + { + "index": "warlock-9", + "name": "Warlock 9", + "type": "level", + "url": "/api/classes/warlock/levels/9" + } + ], + "spell": { + "index": "hallow", + "name": "Hallow", + "url": "/api/spells/hallow" + } + } + ], + "subclass_flavor": "Otherworldly Patron", + "subclass_levels": "/api/subclasses/fiend/levels" + } + } + } + } + } + } + }, + "/api/subclasses/{index}/features": { + "get": { + "summary": "Get features available for a subclass.", + "tags": [ + "Subclasses" + ], + "parameters": [ + { + "$ref": "#/components/parameters/subclass-index" + } + ], + "responses": { + "200": { + "description": "List of features for the subclass.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/subclasses/{index}/levels": { + "get": { + "summary": "Get all level resources for a subclass.", + "tags": [ + "Subclasses" + ], + "parameters": [ + { + "$ref": "#/components/parameters/subclass-index" + } + ], + "responses": { + "200": { + "description": "List of level resource for the subclass.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SubclassLevelResource" + } + } + } + } + } + } + } + }, + "/api/subclasses/{index}/levels/{subclass_level}": { + "get": { + "summary": "Get level resources for a subclass and level.", + "tags": [ + "Subclasses" + ], + "parameters": [ + { + "$ref": "#/components/parameters/subclass-index" + }, + { + "name": "subclass_level", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "minimum": 1, + "maximum": 20 + }, + "example": 6 + } + ], + "responses": { + "200": { + "description": "Level resource for the subclass and level.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubclassLevel" + }, + "example": { + "index": "devotion-3", + "url": "/api/subclasses/devotion/levels/3", + "class": { + "index": "paladin", + "name": "Paladin", + "url": "/api/classes/paladin" + }, + "features": [ + { + "index": "channel-divinity", + "name": "Channel Divinity", + "url": "/api/features/channel-divinity" + } + ], + "level": 3, + "subclass": { + "index": "devotion", + "name": "Devotion", + "url": "/api/subclasses/devotion" + } + } + } + } + } + } + } + }, + "/api/subclasses/{index}/levels/{subclass_level}/features": { + "get": { + "summary": "Get features of the requested spell level available to the class.", + "tags": [ + "Subclasses" + ], + "parameters": [ + { + "$ref": "#/components/parameters/subclass-index" + }, + { + "name": "subclass_level", + "in": "path", + "required": true, + "schema": { + "type": "integer", + "minimum": 0, + "maximum": 20 + }, + "example": 6 + } + ], + "responses": { + "200": { + "description": "List of features for the subclass and level.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/subraces/{index}": { + "get": { + "summary": "Get a subrace by index.", + "description": "Subraces reflect the different varieties of a certain parent race.", + "tags": [ + "Subraces" + ], + "parameters": [ + { + "$ref": "#/components/parameters/subrace-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Subrace" + }, + "example": { + "index": "hill-dwarf", + "name": "Hill Dwarf", + "url": "/api/subraces/hill-dwarf", + "ability_bonuses": [ + { + "ability_score": { + "index": "wis", + "name": "WIS", + "url": "/api/ability-scores/wis" + }, + "bonus": 1 + } + ], + "desc": "As a hill dwarf, you have keen senses, deep intuition, and remarkable resilience.", + "languages": [], + "race": { + "index": "dwarf", + "name": "Dwarf", + "url": "/api/races/dwarf" + }, + "racial_traits": [ + { + "index": "dwarven-toughness", + "name": "Dwarven Toughness", + "url": "/api/traits/dwarven-toughness" + } + ], + "starting_proficiencies": [] + } + } + } + } + } + } + }, + "/api/subraces/{index}/proficiencies": { + "get": { + "summary": "Get proficiences available for a subrace.", + "tags": [ + "Subraces" + ], + "parameters": [ + { + "$ref": "#/components/parameters/subrace-index" + } + ], + "responses": { + "200": { + "description": "List of proficiences for the subrace.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/subraces/{index}/traits": { + "get": { + "summary": "Get traits available for a subrace.", + "tags": [ + "Subraces" + ], + "parameters": [ + { + "$ref": "#/components/parameters/subrace-index" + } + ], + "responses": { + "200": { + "description": "List of traits for the subrace.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/APIReferenceList" + } + } + } + } + } + } + }, + "/api/traits/{index}": { + "get": { + "summary": "Get a trait by index.", + "tags": [ + "Traits" + ], + "parameters": [ + { + "$ref": "#/components/parameters/trait-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Trait" + }, + "example": { + "index": "trance", + "name": "Trance", + "url": "/api/traits/trance", + "desc": [ + "Elves do not need to sleep. Instead, they meditate deeply, remaining semiconscious, for 4 hours a day. (The Common word for such meditation is \"trance.\") While meditating, you can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting this way, you gain the same benefit that a human does from 8 hours of sleep." + ], + "proficiencies": [], + "races": [ + { + "index": "elf", + "name": "Elf", + "url": "/api/races/elf" + } + ], + "subraces": [] + } + } + } + } + } + } + }, + "/api/weapon-properties/{index}": { + "get": { + "summary": "Get a weapon property by index.", + "tags": [ + "Equipment" + ], + "parameters": [ + { + "$ref": "#/components/parameters/weapon-property-index" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WeaponProperty" + }, + "example": { + "index": "ammunition", + "name": "Ammunition", + "url": "/api/weapon-properties/ammunition", + "desc": [ + "You can use a weapon that has the ammunition property to make a ranged attack only if you have ammunition to fire from the weapon. Each time you attack with the weapon, you expend one piece of ammunition. Drawing the ammunition from a quiver, case, or other container is part of the attack (you need a free hand to load a one-handed weapon).", + "At the end of the battle, you can recover half your expended ammunition by taking a minute to search the battlefield. If you use a weapon that has the ammunition property to make a melee attack, you treat the weapon as an improvised weapon (see \"Improvised Weapons\" later in the section). A sling must be loaded to deal any damage when used in this way." + ] + } + } + } + } + } + } + } + }, + "components": { + "parameters": { + "ability-score-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the ability score to get.\n", + "schema": { + "type": "string", + "enum": [ + "cha", + "con", + "dex", + "int", + "str", + "wis" + ], + "example": "cha" + } + }, + "alignment-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the alignment to get.\n", + "schema": { + "type": "string", + "enum": [ + "chaotic-neutral", + "chaotic-evil", + "chaotic-good", + "lawful-neutral", + "lawful-evil", + "lawful-good", + "neutral", + "neutral-evil", + "neutral-good" + ], + "example": "chaotic-neutral" + } + }, + "language-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the language to get.\n", + "schema": { + "type": "string", + "enum": [ + "abyssal", + "celestial", + "common", + "deep-speech", + "draconic", + "dwarvish", + "elvish", + "giant", + "gnomish", + "goblin", + "halfling", + "infernal", + "orc", + "primordial", + "sylvan", + "undercommon" + ], + "example": "abyssal" + } + }, + "proficiency-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the proficiency to get.\n\nAvailable values can be found in the [`ResourceList`](#get-/api/-endpoint-) for `proficiencies`.\n", + "schema": { + "type": "string", + "example": "medium-armor" + } + }, + "skill-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the skill to get.\n", + "schema": { + "type": "string", + "enum": [ + "acrobatics", + "animal-handling", + "arcana", + "athletics", + "deception", + "history", + "insight", + "intimidation", + "investigation", + "medicine", + "nature", + "perception", + "performance", + "persuasion", + "religion", + "sleight-of-hand", + "stealth", + "survival" + ], + "example": "nature" + } + }, + "class-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the class to get.\n", + "schema": { + "type": "string", + "enum": [ + "barbarian", + "bard", + "cleric", + "druid", + "fighter", + "monk", + "paladin", + "ranger", + "rogue", + "sorcerer", + "warlock", + "wizard" + ], + "example": "paladin" + } + }, + "background-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the background to get.\n", + "schema": { + "type": "string", + "enum": [ + "acolyte" + ], + "example": "acolyte" + } + }, + "weapon-property-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the weapon property to get.\n", + "schema": { + "type": "string", + "enum": [ + "ammunition", + "finesse", + "heavy", + "light", + "loading", + "monk", + "reach", + "special", + "thrown", + "two-handed", + "versatile" + ], + "example": "ammunition" + } + }, + "class-level": { + "name": "class_level", + "in": "path", + "required": true, + "schema": { + "type": "number", + "minimum": 0, + "maximum": 20, + "example": 3 + } + }, + "spell-level": { + "name": "spell_level", + "in": "path", + "required": true, + "schema": { + "type": "number", + "minimum": 1, + "maximum": 9, + "example": 4 + } + }, + "condition-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the condition to get.\n", + "schema": { + "type": "string", + "enum": [ + "blinded", + "charmed", + "deafened", + "exhaustion", + "frightened", + "grappled", + "incapacitated", + "invisible", + "paralyzed", + "petrified", + "poisoned", + "prone", + "restrained", + "stunned", + "unconscious" + ], + "example": "blinded" + } + }, + "damage-type-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the damage type to get.\n", + "schema": { + "type": "string", + "enum": [ + "acid", + "bludgeoning", + "cold", + "fire", + "force", + "lightning", + "necrotic", + "piercing", + "poison", + "psychic", + "radiant", + "slashing", + "thunder" + ], + "example": "acid" + } + }, + "magic-school-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the magic school to get.\n", + "schema": { + "type": "string", + "enum": [ + "abjuration", + "conjuration", + "divination", + "enchantment", + "evocation", + "illusion", + "necromancy", + "transmutation" + ], + "example": "abjuration" + } + }, + "equipment-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the equipment to get.\n\nAvailable values can be found in the [`ResourceList`](#get-/api/-endpoint-) for `equipment`.\n", + "schema": { + "type": "string", + "example": "club" + } + }, + "feature-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the feature to get.\n\nAvailable values can be found in the [`ResourceList`](#get-/api/-endpoint-) for `features`.\n", + "schema": { + "type": "string" + }, + "example": "action-surge-1-use" + }, + "rule-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the rule to get.\n", + "schema": { + "type": "string", + "enum": [ + "adventuring", + "appendix", + "combat", + "equipment", + "spellcasting", + "using-ability-scores" + ], + "example": "adventuring" + } + }, + "rule-section-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the rule section to get.\n", + "schema": { + "type": "string", + "enum": [ + "ability-checks", + "ability-scores-and-modifiers", + "actions-in-combat", + "activating-an-item", + "advantage-and-disadvantage", + "attunement", + "between-adventures", + "casting-a-spell", + "cover", + "damage-and-healing", + "diseases", + "fantasy-historical-pantheons", + "madness", + "making-an-attack", + "mounted-combat", + "movement", + "movement-and-position", + "objects", + "poisons", + "proficiency-bonus", + "resting", + "saving-throws", + "sentient-magic-items", + "standard-exchange-rates", + "the-environment", + "the-order-of-combat", + "the-planes-of-existence", + "time", + "traps", + "underwater-combat", + "using-each-ability", + "wearing-and-wielding-items", + "what-is-a-spell" + ], + "example": "traps" + } + }, + "race-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the race to get.\n", + "schema": { + "type": "string", + "enum": [ + "dragonborn", + "dwarf", + "elf", + "gnome", + "half-elf", + "half-orc", + "halfling", + "human", + "tiefling" + ], + "example": "elf" + } + }, + "subclass-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the subclass to get.\n", + "schema": { + "type": "string", + "enum": [ + "berserker", + "champion", + "devotion", + "draconic", + "evocation", + "fiend", + "hunter", + "land", + "life", + "lore", + "open-hand", + "thief" + ], + "example": "fiend" + } + }, + "subrace-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the subrace to get.\n", + "schema": { + "type": "string", + "enum": [ + "high-elf", + "hill-dwarf", + "lightfoot-halfling", + "rock-gnome" + ], + "example": "hill-dwarf" + } + }, + "trait-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the `Trait` to get.", + "schema": { + "type": "string", + "enum": [ + "artificers-lore", + "brave", + "breath-weapon", + "damage-resistance", + "darkvision", + "draconic-ancestry", + "draconic-ancestry-black", + "draconic-ancestry-blue", + "draconic-ancestry-brass", + "draconic-ancestry-bronze", + "draconic-ancestry-copper", + "draconic-ancestry-gold", + "draconic-ancestry-green", + "draconic-ancestry-red", + "draconic-ancestry-silver", + "draconic-ancestry-white", + "dwarven-combat-training", + "dwarven-resilience", + "dwarven-toughness", + "elf-weapon-training", + "extra-language", + "fey-ancestry", + "gnome-cunning", + "halfling-nimbleness", + "hellish-resistance", + "high-elf-cantrip", + "infernal-legacy", + "keen-senses", + "lucky", + "menacing", + "naturally-stealthy", + "relentless-endurance", + "savage-attacks", + "skill-versatility", + "stonecunning", + "tinker", + "tool-proficiency", + "trance" + ], + "example": "trance" + } + }, + "monster-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the `Monster` to get.\n", + "schema": { + "type": "string", + "example": "aboleth" + } + }, + "spell-index": { + "name": "index", + "in": "path", + "required": true, + "description": "The `index` of the `Spell` to get.\n\nAvailable values can be found in the [`ResourceList`](#get-/api/-endpoint-) for `spells`.\n", + "schema": { + "type": "string", + "example": "sacred-flame" + } + }, + "level-filter": { + "name": "level", + "in": "query", + "required": false, + "description": "The level or levels to filter on.", + "schema": { + "type": "array", + "items": { + "type": "integer" + } + }, + "examples": { + "single-value": { + "value": [ + 1 + ] + }, + "multiple-value": { + "value": [ + 1, + 2 + ] + } + } + }, + "school-filter": { + "name": "school", + "in": "query", + "required": false, + "description": "The magic school or schools to filter on.", + "schema": { + "type": "array", + "items": { + "type": "string" + } + }, + "examples": { + "single-value": { + "value": [ + "illusion" + ] + }, + "multiple-value": { + "value": [ + "evocation", + "illusion" + ] + }, + "partial-value": { + "value": [ + "illu" + ] + } + } + }, + "challenge-rating-filter": { + "name": "challenge_rating", + "in": "query", + "required": false, + "description": "The challenge rating or ratings to filter on.", + "schema": { + "type": "array", + "items": { + "type": "number" + } + }, + "examples": { + "single-value": { + "value": [ + 1 + ] + }, + "multiple-value": { + "value": [ + 1, + 2 + ] + }, + "multiple-value-with-float": { + "value": [ + 2, + 0.25 + ] + } + } + }, + "levels-subclass-filter": { + "name": "subclass", + "in": "query", + "required": false, + "description": "Adds subclasses for class to the response", + "schema": { + "type": "string" + }, + "examples": { + "single-value": { + "value": "berserker" + }, + "partial-value": { + "value": "ber" + } + } + }, + "base-endpoint-index": { + "name": "endpoint", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "ability-scores", + "alignments", + "backgrounds", + "classes", + "conditions", + "damage-types", + "equipment", + "equipment-categories", + "feats", + "features", + "languages", + "magic-items", + "magic-schools", + "monsters", + "proficiencies", + "races", + "rule-sections", + "rules", + "skills", + "spells", + "subclasses", + "subraces", + "traits", + "weapon-properties" + ], + "example": "ability-scores" + } + } + }, + "schemas": { + "APIReference": { + "description": "`APIReference`\n", + "type": "object", + "properties": { + "index": { + "description": "Resource index for shorthand searching.", + "type": "string" + }, + "name": { + "description": "Name of the referenced resource.", + "type": "string" + }, + "url": { + "description": "URL of the referenced resource.", + "type": "string" + } + } + }, + "APIReferenceList": { + "description": "`APIReferenceList`\n", + "type": "object", + "properties": { + "count": { + "description": "Total number of resources available.", + "type": "number" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + }, + "Damage": { + "description": "`Damage`\n", + "type": "object", + "properties": { + "damage_dice": { + "type": "string" + }, + "damage_type": { + "$ref": "#/components/schemas/APIReference" + } + } + }, + "Choice": { + "description": "`Choice`\n", + "type": "object", + "properties": { + "desc": { + "description": "Description of the choice to be made.", + "type": "string" + }, + "choose": { + "description": "Number of items to pick from the list.", + "type": "number" + }, + "type": { + "description": "Type of the resources to choose from.", + "type": "string" + }, + "from": { + "$ref": "#/components/schemas/OptionSet" + } + } + }, + "AreaOfEffect": { + "type": "object", + "properties": { + "size": { + "type": "number" + }, + "type": { + "type": "string", + "enum": [ + "sphere", + "cone", + "cylinder", + "line", + "cube" + ] + } + } + }, + "Prerequisite": { + "description": "`Prerequisite`\n", + "type": "object", + "properties": { + "ability_score": { + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + } + ] + }, + "minimum_score": { + "description": "Minimum score to meet the prerequisite.", + "type": "number" + } + } + }, + "ResourceDescription": { + "type": "object", + "properties": { + "desc": { + "description": "Description of the resource.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "AbilityScore": { + "description": "`AbilityScore`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "full_name": { + "description": "Full name of the ability score.", + "type": "string" + }, + "skills": { + "description": "List of skills that use this ability score.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + } + ] + }, + "Alignment": { + "description": "`Alignment`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "desc": { + "description": "Brief description of the resource.", + "type": "string" + }, + "abbreviation": { + "description": "Abbreviation/initials/acronym for the alignment.", + "type": "string" + } + } + } + ] + }, + "Class": { + "description": "`Class`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "hit_die": { + "description": "Hit die of the class. (ex: 12 == 1d12).", + "type": "number" + }, + "class_levels": { + "description": "URL of the level resource for the class.", + "type": "string" + }, + "multi_classing": { + "$ref": "#/components/schemas/Multiclassing" + }, + "spellcasting": { + "$ref": "#/components/schemas/Spellcasting" + }, + "spells": { + "description": "URL of the spell resource list for the class.", + "type": "string" + }, + "starting_equipment": { + "description": "List of equipment and their quantities all players of the class start with.", + "type": "array", + "items": { + "type": "object", + "properties": { + "quantity": { + "type": "number" + }, + "equipment": { + "$ref": "#/components/schemas/APIReference" + } + } + } + }, + "starting_equipment_options": { + "description": "List of choices of starting equipment.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Choice" + } + }, + "proficiency_choices": { + "description": "List of choices of starting proficiencies.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Choice" + } + }, + "proficiencies": { + "description": "List of starting proficiencies for all new characters of this class.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "saving_throws": { + "description": "Saving throws the class is proficient in.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "subclasses": { + "description": "List of all possible subclasses this class can specialize in.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + } + ] + }, + "Multiclassing": { + "description": "`Multiclassing`\n", + "type": "object", + "properties": { + "prerequisites": { + "description": "List of prerequisites that must be met.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Prerequisite" + } + }, + "prerequisite_options": { + "description": "List of choices of prerequisites to meet for.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Choice" + } + }, + "proficiencies": { + "description": "List of proficiencies available when multiclassing.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "proficiency_choices": { + "description": "List of choices of proficiencies that are given when multiclassing.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Choice" + } + } + } + }, + "Spellcasting": { + "type": "object", + "description": "`Spellcasting`\n", + "properties": { + "level": { + "description": "Level at which the class can start using its spellcasting abilities.", + "type": "number" + }, + "info": { + "description": "Descriptions of the class' ability to cast spells.", + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "description": "Feature name.", + "type": "string" + }, + "desc": { + "description": "Feature description.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "spellcasting_ability": { + "description": "Reference to the `AbilityScore` used for spellcasting by the class.", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + } + ] + } + } + }, + "Gear": { + "description": "`Gear`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "equipment_category": { + "$ref": "#/components/schemas/APIReference" + }, + "gear_category": { + "$ref": "#/components/schemas/APIReference" + }, + "cost": { + "$ref": "#/components/schemas/Cost" + }, + "weight": { + "description": "How much the equipment weighs.", + "type": "number" + } + } + } + ] + }, + "EquipmentPack": { + "description": "`EquipmentPack`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "equipment_category": { + "$ref": "#/components/schemas/APIReference" + }, + "gear_category": { + "$ref": "#/components/schemas/APIReference" + }, + "cost": { + "$ref": "#/components/schemas/Cost" + }, + "contents": { + "description": "The list of adventuring gear in the pack.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + } + ] + }, + "EquipmentCategory": { + "description": "`EquipmentCategory`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "equipment": { + "description": "A list of the equipment that falls into this category.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + } + ] + }, + "Equipment": { + "description": "`Equipment`\n", + "anyOf": [ + { + "$ref": "#/components/schemas/Weapon" + }, + { + "$ref": "#/components/schemas/Armor" + }, + { + "$ref": "#/components/schemas/Gear" + }, + { + "$ref": "#/components/schemas/EquipmentPack" + } + ] + }, + "Cost": { + "description": "`Cost`\n", + "type": "object", + "properties": { + "quantity": { + "description": "Numerical amount of coins.", + "type": "number" + }, + "unit": { + "description": "Unit of coinage.", + "type": "string" + } + } + }, + "Weapon": { + "description": "`Weapon`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "equipment_category": { + "$ref": "#/components/schemas/APIReference" + }, + "weapon_category": { + "description": "The category of weapon this falls into.", + "type": "string" + }, + "weapon_range": { + "description": "Whether this is a Melee or Ranged weapon.", + "type": "string" + }, + "category_range": { + "description": "A combination of weapon_category and weapon_range.", + "type": "string" + }, + "range": { + "type": "object", + "properties": { + "normal": { + "description": "The weapon's normal range in feet.", + "type": "number" + }, + "long": { + "description": "The weapon's long range in feet.", + "type": "number" + } + } + }, + "damage": { + "$ref": "#/components/schemas/Damage" + }, + "two_handed_damage": { + "$ref": "#/components/schemas/Damage" + }, + "properties": { + "description": "A list of the properties this weapon has.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "cost": { + "$ref": "#/components/schemas/Cost" + }, + "weight": { + "description": "How much the equipment weighs.", + "type": "number" + } + } + } + ] + }, + "Armor": { + "description": "`Armor`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "equipment_category": { + "$ref": "#/components/schemas/APIReference" + }, + "armor_category": { + "description": "The category of armor this falls into.", + "type": "string" + }, + "armor_class": { + "description": "Details on how to calculate armor class.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "str_minimum": { + "description": "Minimum STR required to use this armor.", + "type": "number" + }, + "stealth_disadvantage": { + "description": "Whether the armor gives disadvantage for Stealth.", + "type": "boolean" + }, + "cost": { + "$ref": "#/components/schemas/Cost" + }, + "weight": { + "description": "How much the equipment weighs.", + "type": "number" + } + } + } + ] + }, + "MagicItem": { + "description": "`MagicItem`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "image": { + "description": "The image url of the magic item.", + "type": "string" + }, + "equipment_category": { + "$ref": "#/components/schemas/APIReference" + }, + "rarity": { + "type": "object", + "properties": { + "name": { + "description": "The rarity of the item.", + "type": "string", + "enum": [ + "Varies", + "Common", + "Uncommon", + "Rare", + "Very Rare", + "Legendary", + "Artifact" + ] + } + } + }, + "variants": { + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "variant": { + "description": "Whether this is a variant or not", + "type": "boolean" + } + } + } + ] + }, + "DamageType": { + "description": "`DamageType`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + } + ] + }, + "DamageAtCharacterLevel": { + "description": "'Spell Damage'\n", + "type": "object", + "properties": { + "damage_at_character_level": { + "type": "object", + "additionalProperties": true + }, + "damage_type": { + "$ref": "#/components/schemas/APIReference" + } + } + }, + "DamageAtSlotLevel": { + "description": "'Spell Damage'\n", + "type": "object", + "properties": { + "damage_at_slot_level": { + "type": "object", + "additionalProperties": true + }, + "damage_type": { + "$ref": "#/components/schemas/APIReference" + } + } + }, + "Condition": { + "description": "`Condition`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + } + ] + }, + "MagicSchool": { + "description": "`MagicSchool`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "desc": { + "description": "Brief description of the resource.", + "type": "string" + } + } + } + ] + }, + "Skill": { + "description": "`Skill`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "ability_score": { + "$ref": "#/components/schemas/APIReference" + } + } + } + ] + }, + "Proficiency": { + "description": "`Proficiency`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "type": { + "description": "The general category of the proficiency.", + "type": "string" + }, + "classes": { + "description": "Classes that start with this proficiency.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "races": { + "description": "Races that start with this proficiency.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "reference": { + "description": "`APIReference` to the full description of the related resource.\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + } + ] + } + } + } + ] + }, + "Language": { + "description": "`Language`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "desc": { + "description": "Brief description of the language.", + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "Standard", + "Exotic" + ] + }, + "script": { + "description": "Script used for writing in the language.", + "type": "string" + }, + "typical_speakers": { + "description": "List of races that tend to speak the language.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + }, + "Background": { + "description": "`Background`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "starting_proficiencies": { + "description": "Starting proficiencies for all new characters of this background.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "starting_equipment": { + "description": "Starting equipment for all new characters of this background.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "starting_equipment_options": { + "$ref": "#/components/schemas/Choice" + }, + "language_options": { + "$ref": "#/components/schemas/Choice" + }, + "feature": { + "description": "Special feature granted to new characters of this background.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "desc": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "personality_traits": { + "description": "Choice of personality traits for this background.", + "type": "object" + }, + "ideals": { + "$ref": "#/components/schemas/Choice" + }, + "bonds": { + "$ref": "#/components/schemas/Choice" + }, + "flaws": { + "$ref": "#/components/schemas/Choice" + } + } + } + ] + }, + "Feat": { + "description": "`Feat`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "prerequisites": { + "description": "An object of APIReferences to ability scores and minimum scores.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Prerequisite" + } + } + } + } + ] + }, + "Subclass": { + "description": "`Subclass`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "class": { + "$ref": "#/components/schemas/APIReference" + }, + "subclass_flavor": { + "description": "Lore-friendly flavor text for a classes respective subclass.", + "type": "string" + }, + "subclass_levels": { + "description": "Resource url that shows the subclass level progression.", + "type": "string" + }, + "spells": { + "type": "array", + "items": { + "type": "object", + "properties": { + "prerequisites": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SpellPrerequisite" + } + }, + "spell": { + "$ref": "#/components/schemas/APIReference" + } + } + } + } + } + } + ] + }, + "SubclassLevel": { + "description": "`SubclassLevel`\n", + "type": "object", + "properties": { + "index": { + "description": "Resource index for shorthand searching.", + "type": "string" + }, + "url": { + "description": "URL of the referenced resource.", + "type": "string" + }, + "level": { + "description": "Number value for the current level object.", + "type": "number" + }, + "ability_score_bonuses": { + "description": "Total number of ability score bonuses gained, added from previous levels.", + "type": "number" + }, + "prof_bonus": { + "description": "Proficiency bonus for this class at the specified level.", + "type": "number" + }, + "features": { + "description": "List of features gained at this level.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "spellcasting": { + "description": "Summary of spells known at this level.", + "type": "object", + "properties": { + "cantrips_known": { + "type": "number" + }, + "spells_known": { + "type": "number" + }, + "spell_slots_level_1": { + "type": "number" + }, + "spell_slots_level_2": { + "type": "number" + }, + "spell_slots_level_3": { + "type": "number" + }, + "spell_slots_level_4": { + "type": "number" + }, + "spell_slots_level_5": { + "type": "number" + }, + "spell_slots_level_6": { + "type": "number" + }, + "spell_slots_level_7": { + "type": "number" + }, + "spell_slots_level_8": { + "type": "number" + }, + "spell_slots_level_9": { + "type": "number" + } + } + }, + "classspecific": { + "description": "Class specific information such as dice values for bard songs and number of warlock invocations.", + "additionalProperties": {} + } + } + }, + "SubclassLevelResource": { + "type": "object", + "properties": { + "index": { + "type": "string" + }, + "url": { + "type": "string" + }, + "level": { + "type": "number" + }, + "features": { + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "class": { + "$ref": "#/components/schemas/APIReference" + }, + "subclass": { + "$ref": "#/components/schemas/APIReference" + } + } + }, + "ClassLevel": { + "description": "`ClassLevel`\n", + "type": "object", + "properties": { + "index": { + "description": "Resource index for shorthand searching.", + "type": "string" + }, + "url": { + "description": "URL of the referenced resource.", + "type": "string" + }, + "level": { + "description": "The number value for the current level object.", + "type": "number" + }, + "ability_score_bonuses": { + "description": "Total number of ability score bonuses gained, added from previous levels.", + "type": "number" + }, + "prof_bonus": { + "description": "Proficiency bonus for this class at the specified level.", + "type": "number" + }, + "features": { + "description": "Features automatically gained at this level.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "spellcasting": { + "description": "Summary of spells known at this level.", + "type": "object", + "properties": { + "cantrips_known": { + "type": "number" + }, + "spells_known": { + "type": "number" + }, + "spell_slots_level_1": { + "type": "number" + }, + "spell_slots_level_2": { + "type": "number" + }, + "spell_slots_level_3": { + "type": "number" + }, + "spell_slots_level_4": { + "type": "number" + }, + "spell_slots_level_5": { + "type": "number" + }, + "spell_slots_level_6": { + "type": "number" + }, + "spell_slots_level_7": { + "type": "number" + }, + "spell_slots_level_8": { + "type": "number" + }, + "spell_slots_level_9": { + "type": "number" + } + } + }, + "class_specific": { + "description": "Class specific information such as dice values for bard songs and number of warlock invocations.", + "anyOf": [ + { + "description": "Barbarian Class Specific Features", + "type": "object", + "properties": { + "rage_count": { + "type": "number" + }, + "rage_damage_bonus": { + "type": "number" + }, + "brutal_critical_dice": { + "type": "number" + } + } + }, + { + "description": "Bard Class Specific Features", + "type": "object", + "properties": { + "bardic_inspiration_dice": { + "type": "number" + }, + "song_of_rest_die": { + "type": "number" + }, + "magical_secrets_max_5": { + "type": "number" + }, + "magical_secrets_max_7": { + "type": "number" + }, + "magical_secrets_max_9": { + "type": "number" + } + } + }, + { + "description": "Cleric Class Specific Features", + "type": "object", + "properties": { + "channel_divinity_charges": { + "type": "number" + }, + "destroy_undead_cr": { + "type": "number" + } + } + }, + { + "description": "Druid Class Specific Features", + "type": "object", + "properties": { + "wild_shape_max_cr": { + "type": "number" + }, + "wild_shape_swim": { + "type": "boolean" + }, + "wild_shape_fly": { + "type": "boolean" + } + } + }, + { + "description": "Fighter Class Specific Features", + "type": "object", + "properties": { + "action_surges": { + "type": "number" + }, + "indomitable_uses": { + "type": "number" + }, + "extra_attacks": { + "type": "number" + } + } + }, + { + "description": "Monk Class Specific Features", + "type": "object", + "properties": { + "ki_points": { + "type": "number" + }, + "unarmored_movement": { + "type": "number" + }, + "martial_arts": { + "type": "object", + "properties": { + "dice_count": { + "type": "number" + }, + "dice_value": { + "type": "number" + } + } + } + } + }, + { + "description": "Paladin Class Specific Features", + "type": "object", + "properties": { + "aura_range": { + "type": "number" + } + } + }, + { + "description": "Bard Ranger Specific Features", + "type": "object", + "properties": { + "favored_enemies": { + "type": "number" + }, + "favored_terrain": { + "type": "number" + } + } + }, + { + "description": "Bard Rogue Specific Features", + "type": "object", + "properties": { + "sneak_attack": { + "type": "object", + "properties": { + "dice_count": { + "type": "number" + }, + "dice_value": { + "type": "number" + } + } + } + } + }, + { + "description": "Bard Sorcerer Specific Features", + "type": "object", + "properties": { + "sorcery_points": { + "type": "number" + }, + "metamagic_known": { + "type": "number" + }, + "creating_spell_slots": { + "type": "array", + "items": { + "type": "object", + "properties": { + "spell_slot_level": { + "type": "number" + }, + "sorcery_point_cost": { + "type": "number" + } + } + } + } + } + }, + { + "description": "Bard Warlock Specific Features", + "type": "object", + "properties": { + "invocations_known": { + "type": "number" + }, + "mystic_arcanum_level_6": { + "type": "number" + }, + "mystic_arcanum_level_7": { + "type": "number" + }, + "mystic_arcanum_level_8": { + "type": "number" + }, + "mystic_arcanum_level_9": { + "type": "number" + } + } + }, + { + "description": "Wizard Class Specific Features", + "type": "object", + "properties": { + "arcane_recover_levels": { + "type": "number" + } + } + } + ] + } + } + }, + "Feature": { + "description": "`Feature`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "level": { + "description": "The level this feature is gained.", + "type": "number" + }, + "class": { + "$ref": "#/components/schemas/APIReference" + }, + "subclass": { + "$ref": "#/components/schemas/APIReference" + }, + "parent": { + "$ref": "#/components/schemas/APIReference" + }, + "prerequisites": { + "description": "The prerequisites for this feature.", + "type": "array", + "items": { + "anyOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "level": { + "type": "number" + } + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "feature": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "spell": { + "type": "string" + } + } + } + ] + }, + "example": [ + { + "type": "level", + "level": 3 + }, + { + "type": "feature", + "feature": "martial-archetype" + }, + { + "type": "spell", + "spell": "shield" + } + ] + }, + "feature_specific": { + "description": "Information specific to this feature.", + "additionalProperties": true + } + } + } + ] + }, + "Race": { + "description": "`Race`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "speed": { + "description": "Base move speed for this race (in feet per round).", + "type": "number" + }, + "ability_bonuses": { + "description": "Racial bonuses to ability scores.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AbilityBonus" + } + }, + "alignment": { + "description": "Flavor description of likely alignments this race takes.", + "type": "string" + }, + "age": { + "description": "Flavor description of possible ages for this race.", + "type": "string" + }, + "size": { + "description": "Size class of this race.", + "type": "string" + }, + "size_description": { + "description": "Flavor description of height and weight for this race.", + "type": "string" + }, + "starting_proficiencies": { + "description": "Starting proficiencies for all new characters of this race.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "starting_proficiency_options": { + "description": "Starting proficiency options for all new characters of this race.", + "$ref": "#/components/schemas/Choice" + }, + "languages": { + "description": "Starting languages for all new characters of this race.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "language_desc": { + "description": "Flavor description of the languages this race knows.", + "type": "string" + }, + "traits": { + "description": "Racial traits that provide benefits to its members.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "subraces": { + "description": "All possible subraces that this race includes.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + } + ] + }, + "AbilityBonus": { + "type": "object", + "properties": { + "bonus": { + "description": "Bonus amount for this ability score.", + "type": "number" + }, + "ability_score": { + "$ref": "#/components/schemas/APIReference" + } + } + }, + "Spell": { + "description": "`Spell`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "higher_level": { + "description": "List of descriptions for casting the spell at higher levels.", + "type": "array", + "items": { + "type": "string" + } + }, + "range": { + "description": "Range of the spell, usually expressed in feet.", + "type": "string" + }, + "components": { + "description": "List of shorthand for required components of the spell.\nV: verbal\nS: somatic\nM: material\n", + "type": "array", + "items": { + "type": "string", + "enum": [ + "V", + "S", + "M" + ] + } + }, + "material": { + "description": "Material component for the spell to be cast.", + "type": "string" + }, + "area_of_effect": { + "$ref": "#/components/schemas/AreaOfEffect" + }, + "ritual": { + "description": "Determines if a spell can be cast in a 10-min(in-game) ritual.", + "type": "boolean" + }, + "duration": { + "description": "How long the spell effect lasts.", + "type": "string" + }, + "concentration": { + "description": "Determines if a spell needs concentration to persist.", + "type": "boolean" + }, + "casting_time": { + "description": "How long it takes for the spell to activate.", + "type": "string" + }, + "level": { + "description": "Level of the spell.", + "type": "number" + }, + "attack_type": { + "description": "Attack type of the spell.", + "type": "string" + }, + "damage": { + "oneOf": [ + { + "$ref": "#/components/schemas/DamageAtCharacterLevel" + }, + { + "$ref": "#/components/schemas/DamageAtSlotLevel" + } + ] + }, + "school": { + "description": "Magic school this spell belongs to.", + "$ref": "#/components/schemas/APIReference" + }, + "classes": { + "description": "List of classes that are able to learn the spell.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "subclasses": { + "description": "List of subclasses that have access to the spell.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + } + ] + }, + "Subrace": { + "description": "`Subrace`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "desc": { + "description": "Description of the subrace.", + "type": "string" + }, + "race": { + "description": "Parent race for the subrace.", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + } + ] + }, + "ability_bonuses": { + "description": "Additional ability bonuses for the subrace.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AbilityBonus" + } + }, + "starting_proficiencies": { + "description": "Starting proficiencies for all new characters of the subrace.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "languages": { + "description": "Starting languages for all new characters of the subrace.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "language_options": { + "description": "Starting languages to choose from for the subrace.", + "$ref": "#/components/schemas/Choice" + }, + "racial_traits": { + "description": "List of traits that for the subrace.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + } + ] + }, + "Trait": { + "description": "`Trait`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "type": "object", + "properties": { + "races": { + "description": "List of `Races` that have access to the trait.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "subraces": { + "description": "List of `Subraces` that have access to the trait.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "proficiencies": { + "description": "List of `Proficiencies` this trait grants.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "proficiency_choices": { + "$ref": "#/components/schemas/Choice" + }, + "language_options": { + "$ref": "#/components/schemas/Choice" + }, + "trait_specific": { + "description": "Information specific to this trait", + "oneOf": [ + { + "$ref": "#/components/schemas/Choice" + }, + { + "$ref": "#/components/schemas/Choice" + }, + { + "type": "object", + "properties": { + "damage-type": { + "description": "A damage type associated with this trait.", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + } + ] + }, + "breath-weapon": { + "description": "The breath weapon action associated with a draconic ancestry.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "desc": { + "type": "string" + }, + "area_of_effect": { + "$ref": "#/components/schemas/AreaOfEffect" + }, + "damage": { + "type": "object", + "properties": { + "damage_at_character_level": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "damage_type": { + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + } + ] + } + } + }, + "dc": { + "$ref": "#/components/schemas/DC" + }, + "usage": { + "description": "Description of the usage constraints of this action.", + "type": "object", + "properties": { + "times": { + "type": "number" + }, + "type": { + "type": "string" + } + } + } + } + } + } + } + ] + } + } + } + ] + }, + "WeaponProperty": { + "description": "WeaponProperty", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + } + ] + }, + "Rule": { + "description": "`Rule`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "desc": { + "description": "Description of the rule.", + "type": "string" + }, + "subsections": { + "description": "List of sections for each subheading underneath the rule in the SRD.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + } + ] + }, + "RuleSection": { + "description": "`RuleSection`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "desc": { + "description": "Description of the rule.", + "type": "string" + } + } + } + ] + }, + "Monster": { + "description": "`Monster`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "$ref": "#/components/schemas/ResourceDescription" + }, + { + "$ref": "#/components/schemas/MonsterAbility" + }, + { + "type": "object", + "properties": { + "image": { + "description": "The image url of the monster.", + "type": "string" + }, + "size": { + "description": "The size of the monster ranging from Tiny to Gargantuan.\"", + "type": "string", + "enum": [ + "Tiny", + "Small", + "Medium", + "Large", + "Huge", + "Gargantuan" + ] + }, + "type": { + "description": "The type of monster.", + "type": "string" + }, + "subtype": { + "description": "The sub-category of a monster used for classification of monsters.\"", + "type": "string" + }, + "alignment": { + "description": "A creature's general moral and personal attitudes.", + "type": "string" + }, + "armor_class": { + "description": "The difficulty for a player to successfully deal damage to a monster.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MonsterArmorClass" + } + }, + "hit_points": { + "description": "The hit points of a monster determine how much damage it is able to take before it can be defeated.", + "type": "number" + }, + "hit_dice": { + "description": "The hit die of a monster can be used to make a version of the same monster whose hit points are determined by the roll of the die. For example: A monster with 2d6 would have its hit points determine by rolling a 6 sided die twice.", + "type": "string" + }, + "hit_points_roll": { + "description": "The roll for determining a monster's hit points, which consists of the hit dice (e.g. 18d10) and the modifier determined by its Constitution (e.g. +36). For example, 18d10+36", + "type": "string" + }, + "actions": { + "description": "A list of actions that are available to the monster to take during combat.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MonsterAction" + } + }, + "legendary_actions": { + "description": "A list of legendary actions that are available to the monster to take during combat.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MonsterAction" + } + }, + "challenge_rating": { + "description": "A monster's challenge rating is a guideline number that says when a monster becomes an appropriate challenge against the party's average level. For example. A group of 4 players with an average level of 4 would have an appropriate combat challenge against a monster with a challenge rating of 4 but a monster with a challenge rating of 8 against the same group of players would pose a significant threat.", + "type": "number", + "minimum": 0, + "maximum": 21 + }, + "proficiency_bonus": { + "description": "A monster's proficiency bonus is the number added to ability checks, saving throws and attack rolls in which the monster is proficient, and is linked to the monster's challenge rating. This bonus has already been included in the monster's stats where applicable.", + "type": "number", + "minimum": 2, + "maximum": 9 + }, + "condition_immunities": { + "description": "A list of conditions that a monster is immune to.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "damage_immunities": { + "description": "A list of damage types that a monster will take double damage from.", + "type": "array", + "items": { + "type": "string" + } + }, + "damage_resistances": { + "description": "A list of damage types that a monster will take half damage from.", + "type": "array", + "items": { + "type": "string" + } + }, + "damage_vulnerabilities": { + "description": "A list of damage types that a monster will take double damage from.", + "type": "array", + "items": { + "type": "string" + } + }, + "forms": { + "description": "List of other related monster entries that are of the same form. Only applicable to Lycanthropes that have multiple forms.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "languages": { + "description": "The languages a monster is able to speak.", + "type": "string" + }, + "proficiencies": { + "description": "A list of proficiencies of a monster.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MonsterProficiency" + } + }, + "reactions": { + "description": "A list of reactions that is available to the monster to take during combat.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MonsterAction" + } + }, + "senses": { + "description": "Monsters typically have a passive perception but they might also have other senses to detect players.", + "allOf": [ + { + "$ref": "#/components/schemas/MonsterSense" + } + ] + }, + "special_abilities": { + "description": "A list of the monster's special abilities.", + "type": "array", + "items": { + "$ref": "#/components/schemas/MonsterSpecialAbility" + } + }, + "speed": { + "description": "Speed for a monster determines how fast it can move per turn.", + "type": "object", + "properties": { + "walk": { + "description": "All creatures have a walking speed, simply called the monster’s speed. Creatures that have no form of ground-based locomotion have a walking speed of 0 feet.", + "type": "string" + }, + "burrow": { + "description": "A monster that has a burrowing speed can use that speed to move through sand, earth, mud, or ice. A monster can’t burrow through solid rock unless it has a special trait that allows it to do so.", + "type": "string" + }, + "climb": { + "description": "A monster that has a climbing speed can use all or part of its movement to move on vertical surfaces. The monster doesn’t need to spend extra movement to climb.", + "type": "string" + }, + "fly": { + "description": "A monster that has a flying speed can use all or part of its movement to fly.", + "type": "string" + }, + "swim": { + "description": "A monster that has a swimming speed doesn’t need to spend extra movement to swim.", + "type": "string" + } + } + }, + "xp": { + "description": "The number of experience points (XP) a monster is worth is based on its challenge rating.", + "type": "number" + } + } + } + ] + }, + "MonsterAbility": { + "description": "`Monster Ability`\n", + "type": "object", + "properties": { + "charisma": { + "description": "A monster's ability to charm or intimidate a player.", + "type": "number" + }, + "constitution": { + "description": "How sturdy a monster is.\"", + "type": "number" + }, + "dexterity": { + "description": "The monster's ability for swift movement or stealth", + "type": "number" + }, + "intelligence": { + "description": "The monster's ability to outsmart a player.", + "type": "number" + }, + "strength": { + "description": "How hard a monster can hit a player.", + "type": "number" + }, + "wisdom": { + "description": "A monster's ability to ascertain the player's plan.", + "type": "number" + } + } + }, + "MonsterAction": { + "description": "Action available to a `Monster` in addition to the standard creature actions.", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "desc": { + "type": "string" + }, + "action_options": { + "$ref": "#/components/schemas/Choice" + }, + "actions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MonsterMultiAttackAction" + } + }, + "options": { + "$ref": "#/components/schemas/Choice" + }, + "multiattack_type": { + "type": "string" + }, + "attack_bonus": { + "type": "number" + }, + "dc": { + "$ref": "#/components/schemas/DC" + }, + "attacks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MonsterAttack" + } + }, + "damage": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Damage" + } + } + } + }, + "MonsterArmorClass": { + "description": "The armor class of a monster.", + "type": "object", + "oneOf": [ + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "dex" + ] + }, + "value": { + "type": "number" + }, + "desc": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "natural" + ] + }, + "value": { + "type": "number" + }, + "desc": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "armor" + ] + }, + "value": { + "type": "number" + }, + "armor": { + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + }, + "desc": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "spell" + ] + }, + "value": { + "type": "number" + }, + "spell": { + "$ref": "#/components/schemas/APIReference" + }, + "desc": { + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "condition" + ] + }, + "value": { + "type": "number" + }, + "condition": { + "$ref": "#/components/schemas/APIReference" + }, + "desc": { + "type": "string" + } + } + } + ] + }, + "MonsterAttack": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "dc": { + "$ref": "#/components/schemas/DC" + }, + "damage": { + "$ref": "#/components/schemas/Damage" + } + } + }, + "MonsterMultiAttackAction": { + "type": "object", + "properties": { + "action_name": { + "type": "string" + }, + "count": { + "type": "number" + }, + "type": { + "type": "string", + "enum": [ + "melee", + "ranged", + "ability", + "magic" + ] + } + } + }, + "MonsterProficiency": { + "type": "object", + "properties": { + "value": { + "type": "number" + }, + "proficiency": { + "$ref": "#/components/schemas/APIReference" + } + } + }, + "MonsterSense": { + "type": "object", + "properties": { + "passive_perception": { + "description": "The monster's passive perception (wisdom) score.", + "type": "number" + }, + "blindsight": { + "description": "A monster with blindsight can perceive its surroundings without relying on sight, within a specific radius.", + "type": "string" + }, + "darkvision": { + "description": "A monster with darkvision can see in the dark within a specific radius.", + "type": "string" + }, + "tremorsense": { + "description": "A monster with tremorsense can detect and pinpoint the origin of vibrations within a specific radius, provided that the monster and the source of the vibrations are in contact with the same ground or substance.", + "type": "string" + }, + "truesight": { + "description": "A monster with truesight can, out to a specific range, see in normal and magical darkness, see invisible creatures and objects, automatically detect visual illusions and succeed on saving throws against them, and perceive the original form of a shapechanger or a creature that is transformed by magic. Furthermore, the monster can see into the Ethereal Plane within the same range.", + "type": "string" + } + } + }, + "MonsterSpecialAbility": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "desc": { + "type": "string" + }, + "attack_bonus": { + "type": "number" + }, + "damage": { + "$ref": "#/components/schemas/Damage" + }, + "dc": { + "$ref": "#/components/schemas/DC" + }, + "spellcasting": { + "$ref": "#/components/schemas/MonsterSpellcasting" + }, + "usage": { + "$ref": "#/components/schemas/MonsterUsage" + } + } + }, + "MonsterSpell": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "level": { + "type": "number" + }, + "url": { + "type": "string" + }, + "usage": { + "$ref": "#/components/schemas/MonsterUsage" + } + } + }, + "MonsterSpellcasting": { + "type": "object", + "properties": { + "ability": { + "$ref": "#/components/schemas/APIReference" + }, + "dc": { + "type": "number" + }, + "modifier": { + "type": "number" + }, + "components_required": { + "type": "array", + "items": { + "type": "string" + } + }, + "school": { + "type": "string" + }, + "slots": { + "type": "object", + "additionalProperties": { + "type": "number" + } + }, + "spells": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MonsterSpell" + } + } + } + }, + "MonsterUsage": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "at will", + "per day", + "recharge after rest", + "recharge on roll" + ] + }, + "rest_types": { + "type": "array", + "items": { + "type": "string" + } + }, + "times": { + "type": "number" + } + } + }, + "SpellPrerequisite": { + "description": "`SpellPrerequisite`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "type": { + "description": "The type of prerequisite.", + "type": "string" + } + } + } + ] + }, + "error-response": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + }, + "required": [ + "error" + ] + }, + "DC": { + "description": "`DC`\n", + "type": "object", + "properties": { + "dc_type": { + "$ref": "#/components/schemas/APIReference" + }, + "dc_value": { + "description": "Value to beat", + "type": "number" + }, + "success_type": { + "description": "Result of a successful save. Can be \\\"none\\\", \\\"half\\\", or \\\"other\\\"", + "type": "string" + } + } + }, + "OptionSet": { + "description": "`Option Set`\n", + "oneOf": [ + { + "type": "object", + "properties": { + "option_set_type": { + "description": "Type of option set; determines other attributes.", + "type": "string" + }, + "options_array": { + "description": "Array of options to choose from.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Option" + } + } + } + }, + { + "type": "object", + "properties": { + "option_set_type": { + "description": "Type of option set; determines other attributes.", + "type": "string" + }, + "equipment_category": { + "$ref": "#/components/schemas/APIReference" + } + } + }, + { + "type": "object", + "properties": { + "option_set_type": { + "description": "Type of option set; determines other attributes.", + "type": "string" + }, + "resource_list": { + "description": "A reference (by URL) to a collection in the database.", + "type": "string" + } + } + } + ] + }, + "Option": { + "description": "`Option`\n", + "oneOf": [ + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "item": { + "$ref": "#/components/schemas/APIReference" + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "action_name": { + "description": "The name of the action.", + "type": "string" + }, + "count": { + "description": "The number of times this action can be repeated if chosen.", + "type": "number" + }, + "type": { + "description": "For attack options that can be melee, ranged, abilities, or thrown.", + "type": "string", + "enum": [ + "melee", + "ranged", + "ability", + "magic" + ] + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "items": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Option" + } + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "choice": { + "$ref": "#/components/schemas/Choice" + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "string": { + "description": "The string.", + "type": "string" + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "desc": { + "description": "A description of the ideal.", + "type": "string" + }, + "alignments": { + "description": "A list of alignments of those who might follow the ideal.", + "type": "array", + "items": { + "$ref": "#/components/schemas/APIReference" + } + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "count": { + "description": "Count", + "type": "number" + }, + "of": { + "$ref": "#/components/schemas/APIReference" + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "ability_score": { + "$ref": "#/components/schemas/APIReference" + }, + "minimum_score": { + "description": "The minimum score required to satisfy the prerequisite.", + "type": "number" + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "ability_score": { + "$ref": "#/components/schemas/APIReference" + }, + "bonus": { + "description": "The bonus being applied to the ability score", + "type": "number" + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "name": { + "description": "Name of the breath", + "type": "string" + }, + "dc": { + "$ref": "#/components/schemas/DC" + }, + "damage": { + "description": "Damage dealt by the breath attack, if any.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Damage" + } + } + } + }, + { + "type": "object", + "properties": { + "option_type": { + "description": "Type of option; determines other attributes.", + "type": "string" + }, + "damage_type": { + "$ref": "#/components/schemas/APIReference" + }, + "damage_dice": { + "description": "Damage expressed in dice (e.g. \"13d6\").", + "type": "string" + }, + "notes": { + "description": "Information regarding the damage.", + "type": "string" + } + } + } + ] + }, + "ClassLevelSpell": { + "description": "`ClassLevelSpell`\n", + "allOf": [ + { + "$ref": "#/components/schemas/APIReference" + }, + { + "type": "object", + "properties": { + "level": { + "type": "number", + "description": "The level of the spell slot used to cast the spell." + } + } + } + ] + }, + "ClassSpellList": { + "description": "`ClassSpellList`\n", + "type": "object", + "properties": { + "count": { + "description": "Total number of resources available.", + "type": "number" + }, + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ClassLevelSpell" + } + } + } + } + } + } +} diff --git a/src/swagger/api-spec/openapi.yml b/src/swagger/api-spec/openapi.yml new file mode 100644 index 00000000..ece1ae9a --- /dev/null +++ b/src/swagger/api-spec/openapi.yml @@ -0,0 +1,4189 @@ +openapi: 3.0.1 +info: + title: D&D 5e API + description: "# Introduction\n\nWelcome to the dnd5eapi, the Dungeons & Dragons 5th Edition API!\nThis documentation should help you familiarize yourself with the resources\navailable and how to consume them with HTTP requests. Read through the getting\nstarted section before you dive in. Most of your problems should be solved\njust by reading through it.\n\n## Getting Started\n\nLet's make our first API request to the D&D 5th Edition API!\n\nOpen up a terminal and use [curl](http://curl.haxx.se/) or [httpie](http://httpie.org/)\nto make an API request for a resource. You can also scroll through the\ndefinitions below and send requests directly from the endpoint documentation!\n\nFor example, if you paste and run this `curl` command:\n```bash\ncurl -X GET \"https://www.dnd5eapi.co/api/ability-scores/cha\" -H \"Accept: application/json\"\n```\n\nWe should see a result containing details about the Charisma ability score:\n```bash\n{\n \"index\": \"cha\",\n \"name\": \"CHA\",\n \"full_name\": \"Charisma\",\n \"desc\": [\n \"Charisma measures your ability to interact effectively with others. It\n includes such factors as confidence and eloquence, and it can represent\n a charming or commanding personality.\",\n \"A Charisma check might arise when you try to influence or entertain\n others, when you try to make an impression or tell a convincing lie,\n or when you are navigating a tricky social situation. The Deception,\n Intimidation, Performance, and Persuasion skills reflect aptitude in\n certain kinds of Charisma checks.\"\n ],\n \"skills\": [\n {\n \"name\": \"Deception\",\n \"index\": \"deception\",\n \"url\": \"/api/skills/deception\"\n },\n {\n \"name\": \"Intimidation\",\n \"index\": \"intimidation\",\n \"url\": \"/api/skills/intimidation\"\n },\n {\n \"name\": \"Performance\",\n \"index\": \"performance\",\n \"url\": \"/api/skills/performance\"\n },\n {\n \"name\": \"Persuasion\",\n \"index\": \"persuasion\",\n \"url\": \"/api/skills/persuasion\"\n }\n ],\n \"url\": \"/api/ability-scores/cha\"\n}\n```\n\n## Authentication\n\nThe dnd5eapi is a completely open API. No authentication is required to query\nand get data. This also means that we've limited what you can do to just\n`GET`-ing the data. If you find a mistake in the data, feel free to\n[message us](https://discord.gg/TQuYTv7).\n\n## GraphQL\n\nThis API supports [GraphQL](https://graphql.org/). The GraphQL URL for this API\nis `https://www.dnd5eapi.co/graphql`. Most of your questions regarding the GraphQL schema can be answered\nby querying the endpoint with the Apollo sandbox explorer.\n\n## Schemas\n\nDefinitions of all schemas will be accessible in a future update. Two of the most common schemas are described here.\n\n### `APIReference`\nRepresents a minimal representation of a resource. The detailed representation of the referenced resource can be retrieved by making a request to the referenced `URL`.\n```\nAPIReference {\n index string\n name string\n url string\n}\n```\n
\n\n### `DC`\nRepresents a difficulty check.\n```\nDC {\n dc_type APIReference\n dc_value number\n success_type \"none\" | \"half\" | \"other\"\n}\n```\n
\n\n### `Damage`\nRepresents damage.\n```\nDamage {\n damage_type APIReference\n damage_dice string\n}\n```\n
\n\n### `Choice`\nRepresents a choice made by a player. Commonly seen related to decisions made during character creation or combat (e.g.: the description of the cleric class, under **Proficiencies**, states \"Skills: Choose two from\tHistory, Insight, Medicine, Persuasion, and\tReligion\" [[SRD p15]](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=15))\n```\nChoice {\n desc string\n choose number\n type string\n from OptionSet\n}\n```\n
\n\n### `OptionSet`\nThe OptionSet structure provides the options to be chosen from, or sufficient data to fetch and interpret the options. All OptionSets have an `option_set_type` attribute that indicates the structure of the object that contains the options. The possible values are `options_array`, `equipment_category`, and `reference_list`. Other attributes on the OptionSet depend on the value of this attribute.\n- `options_array`\n - `options` (array): An array of Option objects. Each item in the array represents an option that can be chosen.\n- `equipment_category`\n - `equipment_category` (APIReference): A reference to an EquipmentCategory. Each item in the EquipmentCategory's `equipment` array represents one option that can be chosen.\n- `resource_list`\n - `resource_list_url` (string): A reference (by URL) to a collection in the database. The URL may include query parameters. Each item in the resulting ResourceList's `results` array represents one option that can be chosen.\n
\n\n### `Option`\nWhen the options are given in an `options_array`, each item in the array inherits from the Option structure. All Options have an `option_type` attribute that indicates the structure of the option. The value of this attribute indicates how the option should be handled, and each type has different attributes. The possible values and their corresponding attributes are listed below.\n- `reference` - A terminal option. Contains a reference to a Document that can be added to the list of options chosen.\n - `item` (APIReference): A reference to the chosen item.\n- `action` - A terminal option. Contains information describing an action, for use within Multiattack actions.\n - `action_name` (string): The name of the action, according to its `name` attribute.\n - `count` (number | string): The number of times this action can be repeated if this option is chosen.\n - `type` (string = `\"melee\" | \"ranged\" | \"ability\" | \"magic\"`, optional): For attack actions that can be either melee, ranged, abilities, or magic.\n- `multiple` - When this option is chosen, all of its child options are chosen, and must be resolved the same way as a normal option.\n - `items` (array): An array of Option objects. All of them must be taken if the option is chosen.\n- `choice` - A nested choice. If this option is chosen, the Choice structure contained within must be resolved like a normal Choice structure, and the results are the chosen options.\n - `choice` (Choice): The Choice to resolve.\n- `string` - A terminal option. Contains a reference to a string.\n - `string` (string): The string.\n- `ideal` - A terminal option. Contains information about an ideal.\n - `desc` (string): A description of the ideal.\n - `alignments` (ApiReference[]): A list of alignments of those who might follow the ideal.\n- `counted_reference` - A terminal option. Contains a reference to something else in the API along with a count.\n - `count` (number): Count.\n - `of` (ApiReference): Thing being referenced.\n- `score_prerequisite` - A terminal option. Contains a reference to an ability score and a minimum score.\n - `ability_score` (ApiReference): Ability score being referenced.\n - `minimum_score` (number): The minimum score required to satisfy the prerequisite.\n- `ability_bonus` - A terminal option. Contains a reference to an ability score and a bonus\n - `ability_score` (ApiReference): Ability score being referenced\n - `bonus` (number): The bonus being applied to the ability score\n- `breath` - A terminal option: Contains a reference to information about a breath attack.\n - `name` (string): Name of the breath.\n - `dc` (DC): Difficulty check of the breath attack.\n - `damage` ([Damage]): Damage dealt by the breath attack, if any.\n- `damage` - A terminal option. Contains information about damage.\n - `damage_type` (ApiReference): Reference to type of damage.\n - `damage_dice` (string): Damage expressed in dice (e.g. \"13d6\").\n - `notes` (string): Information regarding the damage.\n\n## FAQ\n\n### What is the SRD?\nThe SRD, or Systems Reference Document, contains guidelines for publishing content under the OGL. This allows for some of the data for D&D 5e to be open source. The API only covers data that can be found in the SRD. [Here's a link to the full text of the SRD.](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf)\n\n### What is the OGL?\nThe Open Game License (OGL) is a public copyright license by Wizards of the Coast that may be used by tabletop role-playing game developers to grant permission to modify, copy, and redistribute some of the content designed for their games, notably game mechanics. However, they must share-alike copies and derivative works. [More information about the OGL can be found here.](https://en.wikipedia.org/wiki/Open_Game_License)\n\n### A monster, spell, subclass, etc. is missing from the API / Database. Can I add it?\nPlease check if the data is within the SRD. If it is, feel free to open an issue or PR to add it yourself. Otherwise, due to legal reasons, we cannot add it.\n\n### Can this API be self hosted?\nYes it can! You can also host the data yourself if you don't want to use the API at all. You can also make changes and add extra data if you like. However, it is up to you to merge in new changes to the data and API.\n\n#### Can I publish is on ? Is this free use?\nYes, you can. The API itself is under the [MIT license](https://opensource.org/licenses/MIT), and the underlying data accessible via the API is supported under the SRD and OGL.\n\n# Status Page\n\nThe status page for the API can be found here: https://5e-bits.github.io/dnd-uptime/\n\n# Chat\n\nCome hang out with us [on Discord](https://discord.gg/TQuYTv7)!\n\n# Contribute\n\nThis API is built from two repositories.\n - The repo containing the data lives here: https://github.com/bagelbits/5e-database\n - The repo with the API implementation lives here: https://github.com/bagelbits/5e-srd-api\n\nThis is a evolving API and having fresh ideas are always welcome! You can\nopen an issue in either repo, open a PR for changes, or just discuss with\nother users in this discord.\n" + version: '0.1' + license: + name: MIT License + url: 'https://github.com/5e-bits/5e-srd-api/blob/main/LICENSE.md' + contact: + name: 5eBits + url: 'https://github.com/5e-bits' +servers: + - url: 'https://www.dnd5eapi.co' + description: Production + - url: 'http://localhost:3000' + description: Local Development +tags: + - name: Common + - name: Character Data +paths: + /api: + get: + summary: Get all resource URLs. + description: Making a request to the API's base URL returns an object containing available endpoints. + tags: + - Common + responses: + '200': + description: OK + content: + application/json: + schema: + type: object + additionalProperties: + type: string + example: + ability-scores: /api/ability-scores + alignments: /api/alignments + backgrounds: /api/backgrounds + classes: /api/classes + conditions: /api/conditions + damage-types: /api/damage-types + equipment-categories: /api/equipment-categories + equipment: /api/equipment + feats: /api/feats + features: /api/features + languages: /api/languages + magic-items: /api/magic-items + magic-schools: /api/magic-schools + monsters: /api/monsters + proficiencies: /api/proficiencies + races: /api/races + rules: /api/rules + rule-sections: /api/rule-sections + skills: /api/skills + spells: /api/spells + subclasses: /api/subclasses + subraces: /api/subraces + traits: /api/traits + weapon-properties: /api/weapon-properties + '/api/{endpoint}': + get: + summary: Get list of all available resources for an endpoint. + description: | + Currently only the [`/spells`](#get-/api/spells) and [`/monsters`](#get-/api/monsters) endpoints support filtering with query parameters. Use of these query parameters is documented under the respective [Spells](#tag--Spells) and [Monsters](#tag--Monsters) sections. + tags: + - Common + parameters: + - $ref: '#/components/parameters/base-endpoint-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/ability-scores/{index}': + get: + summary: Get an ability score by index. + description: | + # Ability Score + + Represents one of the six abilities that describes a creature's physical and mental characteristics. The three main rolls of the game - the ability check, the saving throw, and the attack roll - rely on the ability scores. [[SRD p76](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=76)] + tags: + - Character Data + parameters: + - $ref: '#/components/parameters/ability-score-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/AbilityScore' + example: + index: cha + name: CHA + url: /api/ability-scores/cha + desc: + - 'Charisma measures your ability to interact effectively with others. It includes such factors as confidence and eloquence, and it can represent a charming or commanding personality.' + - 'A Charisma check might arise when you try to influence or entertain others, when you try to make an impression or tell a convincing lie, or when you are navigating a tricky social situation. The Deception, Intimidation, Performance, and Persuasion skills reflect aptitude in certain kinds of Charisma checks.' + full_name: Charisma + skills: + - index: deception + name: Deception + url: /api/skills/deception + - index: intimidation + name: Intimidation + url: /api/skills/intimidation + - index: performance + name: Performance + url: /api/skills/performance + - index: persuasion + name: Persuasion + url: /api/skills/persuasion + '/api/alignments/{index}': + get: + summary: Get an alignment by index. + description: | + # Alignment + + A typical creature in the game world has an alignment, which broadly describes its moral and personal attitudes. Alignment is a combination of two factors: one identifies morality (good, evil, or neutral), and the other describes attitudes toward society and order (lawful, chaotic, or neutral). Thus, nine distinct alignments define the possible combinations.[[SRD p58](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=58)] + tags: + - Character Data + parameters: + - $ref: '#/components/parameters/alignment-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Alignment' + example: + index: chaotic-neutral + name: Chaotic Neutral + url: /api/alignments/chaotic-neutral + desc: 'Chaotic neutral (CN) creatures follow their whims, holding their personal freedom above all else. Many barbarians and rogues, and some bards, are chaotic neutral.' + abbreviation: CN + '/api/backgrounds/{index}': + get: + summary: Get a background by index. + description: | + # Background + + Every story has a beginning. Your character's background reveals where you came from, how you became an adventurer, and your place in the world. Choosing a background provides you with important story cues about your character's identity. [[SRD p60](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=60)] + + _Note:_ acolyte is the only background included in the SRD. + tags: + - Character Data + parameters: + - $ref: '#/components/parameters/background-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Background' + example: + index: acolyte + name: Acolyte + starting_proficiencies: + - index: skill-insight + name: 'Skill: Insight' + url: /api/proficiencies/skill-insight + - index: skill-religion + name: 'Skill: Religion' + url: /api/proficiencies/skill-religion + language_options: + choose: 2 + type: languages + from: + option_set_type: resource_list + resource_list_url: /api/languages + starting_equipment: + - equipment: + index: clothes-common + name: 'Clothes, common' + url: /api/equipment/clothes-common + quantity: 1 + - equipment: + index: pouch + name: Pouch + url: /api/equipment/pouch + quantity: 1 + starting_equipment_options: + - choose: 1 + type: equipment + from: + option_set_type: equipment_category + equipment_category: + index: holy-symbols + name: Holy Symbols + url: /api/equipment-categories/holy-symbols + feature: + name: Shelter of the Faithful + desc: + - 'As an acolyte, you command the respect of those who share your faith, and you can perform the religious ceremonies of your deity. You and your adventuring companions can expect to receive free healing and care at a temple, shrine, or other established presence of your faith, though you must provide any material components needed for spells. Those who share your religion will support you (but only you) at a modest lifestyle.' + - 'You might also have ties to a specific temple dedicated to your chosen deity or pantheon, and you have a residence there. This could be the temple where you used to serve, if you remain on good terms with it, or a temple where you have found a new home. While near your temple, you can call upon the priests for assistance, provided the assistance you ask for is not hazardous and you remain in good standing with your temple.' + personality_traits: + choose: 2 + type: personality_traits + from: + option_set_type: options_array + options: + - option_type: string + string: 'I idolize a particular hero of my faith, and constantly refer to that person''s deeds and example.' + - option_type: string + string: 'I can find common ground between the fiercest enemies, empathizing with them and always working toward peace.' + - option_type: string + string: 'I see omens in every event and action. The gods try to speak to us, we just need to listen.' + - option_type: string + string: Nothing can shake my optimistic attitude. + - option_type: string + string: I quote (or misquote) sacred texts and proverbs in almost every situation. + - option_type: string + string: I am tolerant (or intolerant) of other faiths and respect (or condemn) the worship of other gods. + - option_type: string + string: 'I''ve enjoyed fine food, drink, and high society among my temple''s elite. Rough living grates on me.' + - option_type: string + string: I've spent so long in the temple that I have little practical experience dealing with people in the outside world. + ideals: + choose: 1 + type: ideals + from: + option_set_type: options_array + options: + - option_type: ideal + desc: Tradition. The ancient traditions of worship and sacrifice must be preserved and upheld. + alignments: + - index: lawful-good + name: Lawful Good + url: /api/alignments/lawful-good + - index: lawful-neutral + name: Lawful Neutral + url: /api/alignments/lawful-neutral + - index: lawful-evil + name: Lawful Evil + url: /api/alignments/lawful-evil + - option_type: ideal + desc: 'Charity. I always try to help those in need, no matter what the personal cost.' + alignments: + - index: lawful-good + name: Lawful Good + url: /api/alignments/lawful-good + - index: neutral-good + name: Neutral Good + url: /api/alignments/neutral-good + - index: chaotic-good + name: Chaotic Good + url: /api/alignments/chaotic-good + - option_type: ideal + desc: Change. We must help bring about the changes the gods are constantly working in the world. + alignments: + - index: chaotic-good + name: Chaotic Good + url: /api/alignments/chaotic-good + - index: chaotic-neutral + name: Chaotic Neutral + url: /api/alignments/chaotic-neutral + - index: chaotic-evil + name: Chaotic Evil + url: /api/alignments/chaotic-evil + - option_type: ideal + desc: Power. I hope to one day rise to the top of my faith's religious hierarchy. + alignments: + - index: lawful-good + name: Lawful Good + url: /api/alignments/lawful-good + - index: lawful-neutral + name: Lawful Neutral + url: /api/alignments/lawful-neutral + - index: lawful-evil + name: Lawful Evil + url: /api/alignments/lawful-evil + - option_type: ideal + desc: 'Faith. I trust that my deity will guide my actions. I have faith that if I work hard, things will go well.' + alignments: + - index: lawful-good + name: Lawful Good + url: /api/alignments/lawful-good + - index: lawful-neutral + name: Lawful Neutral + url: /api/alignments/lawful-neutral + - index: lawful-evil + name: Lawful Evil + url: /api/alignments/lawful-evil + - option_type: ideal + desc: Aspiration. I seek to prove myself worthy of my god's favor by matching my actions against his or her teachings. + alignments: + - index: lawful-good + name: Lawful Good + url: /api/alignments/lawful-good + - index: neutral-good + name: Neutral Good + url: /api/alignments/neutral-good + - index: chaotic-good + name: Chaotic Good + url: /api/alignments/chaotic-good + - index: lawful-neutral + name: Lawful Neutral + url: /api/alignments/lawful-neutral + - index: neutral + name: Neutral + url: /api/alignments/neutral + - index: chaotic-neutral + name: Chaotic Neutral + url: /api/alignments/chaotic-neutral + - index: lawful-evil + name: Lawful Evil + url: /api/alignments/lawful-evil + - index: neutral-evil + name: Neutral Evil + url: /api/alignments/neutral-evil + - index: chaotic-evil + name: Chaotic Evil + url: /api/alignments/chaotic-evil + bonds: + choose: 1 + type: bonds + from: + option_set_type: options_array + options: + - option_type: string + string: I would die to recover an ancient relic of my faith that was lost long ago. + - option_type: string + string: I will someday get revenge on the corrupt temple hierarchy who branded me a heretic. + - option_type: string + string: I owe my life to the priest who took me in when my parents died. + - option_type: string + string: Everything I do is for the common people. + - option_type: string + string: I will do anything to protect the temple where I served. + - option_type: string + string: I seek to preserve a sacred text that my enemies consider heretical and seek to destroy. + flaws: + choose: 1 + type: flaws + from: + option_set_type: options_array + options: + - option_type: string + string: 'I judge others harshly, and myself even more severely.' + - option_type: string + string: I put too much trust in those who wield power within my temple's hierarchy. + - option_type: string + string: My piety sometimes leads me to blindly trust those that profess faith in my god. + - option_type: string + string: I am inflexible in my thinking. + - option_type: string + string: I am suspicious of strangers and expect the worst of them. + - option_type: string + string: 'Once I pick a goal, I become obsessed with it to the detriment of everything else in my life.' + url: /api/backgrounds/acolyte + '/api/classes/{index}': + get: + summary: Get a class by index. + description: | + # Class + + A character class is a fundamental part of the identity and nature of + characters in the Dungeons & Dragons role-playing game. A character's + capabilities, strengths, and weaknesses are largely defined by its class. + A character's class affects a character's available skills and abilities. [[SRD p8-55](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=8)] + tags: + - Class + parameters: + - $ref: '#/components/parameters/class-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Class' + example: + class_levels: /api/classes/barbarian/levels + hit_die: 12 + index: barbarian + multi_classing: + prerequisites: + - ability_score: + index: str + name: STR + url: /api/ability-scores/str + minimum_score: 13 + proficiencies: + - index: shields + name: Shields + url: /api/proficiencies/shields + - index: simple-weapons + name: Simple Weapons + url: /api/proficiencies/simple-weapons + - index: martial-weapons + name: Martial Weapons + url: /api/proficiencies/martial-weapons + proficiency_choices: [] + name: Barbarian + proficiencies: + - index: light-armor + name: Light Armor + url: /api/proficiencies/light-armor + - index: medium-armor + name: Medium Armor + url: /api/proficiencies/medium-armor + - index: shields + name: Shields + url: /api/proficiencies/shields + - index: simple-weapons + name: Simple Weapons + url: /api/proficiencies/simple-weapons + - index: martial-weapons + name: Martial Weapons + url: /api/proficiencies/martial-weapons + proficiency_choices: + - desc: 'Choose two from Animal Handling, Athletics, Intimidation, Nature, Perception, and Survival' + choose: 2 + type: proficiencies + from: + option_set_type: options_array + options: + - option_type: reference + item: + index: skill-animal-handling + name: 'Skill: Animal Handling' + url: /api/proficiencies/skill-animal-handling + - option_type: reference + item: + index: skill-athletics + name: 'Skill: Athletics' + url: /api/proficiencies/skill-athletics + - option_type: reference + item: + index: skill-intimidation + name: 'Skill: Intimidation' + url: /api/proficiencies/skill-intimidation + - option_type: reference + item: + index: skill-nature + name: 'Skill: Nature' + url: /api/proficiencies/skill-nature + - option_type: reference + item: + index: skill-perception + name: 'Skill: Perception' + url: /api/proficiencies/skill-perception + - option_type: reference + item: + index: skill-survival + name: 'Skill: Survival' + url: /api/proficiencies/skill-survival + saving_throws: + - index: str + name: STR + url: /api/ability-scores/str + - index: con + name: CON + url: /api/ability-scores/con + starting_equipment: + - equipment: + index: explorers-pack + name: Explorer's Pack + url: /api/equipment/explorers-pack + quantity: 1 + - equipment: + index: javelin + name: Javelin + url: /api/equipment/javelin + quantity: 4 + starting_equipment_options: + - desc: (a) a greataxe or (b) any martial melee weapon + choose: 1 + type: equipment + from: + option_set_type: options_array + options: + - option_type: counted_reference + count: 1 + of: + index: greataxe + name: Greataxe + url: /api/equipment/greataxe + - option_type: choice + choice: + desc: any martial melee weapon + choose: 1 + type: equipment + from: + option_set_type: equipment_category + equipment_category: + index: martial-melee-weapons + name: Martial Melee Weapons + url: /api/equipment-categories/martial-melee-weapons + - desc: (a) two handaxes or (b) any simple weapon + choose: 1 + type: equipment + from: + option_set_type: options_array + options: + - option_type: counted_reference + count: 2 + of: + index: handaxe + name: Handaxe + url: /api/equipment/handaxe + - option_type: choice + choice: + desc: any simple weapon + choose: 1 + type: equipment + from: + option_set_type: equipment_category + equipment_category: + index: simple-weapons + name: Simple Weapons + url: /api/equipment-categories/simple-weapons + subclasses: + - index: berserker + name: Berserker + url: /api/subclasses/berserker + url: /api/classes/barbarian + '/api/classes/{index}/subclasses': + get: + summary: Get subclasses available for a class. + tags: + - Class Resource Lists + parameters: + - $ref: '#/components/parameters/class-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + example: + count: 1 + results: + - index: berserker + name: Berserker + url: /api/subclasses/berserker + '/api/classes/{index}/spells': + get: + summary: Get spells available for a class. + tags: + - Class Resource Lists + parameters: + - $ref: '#/components/parameters/class-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ClassSpellList' + example: + count: 2 + results: + - index: power-word-kill + name: Power Word Kill + url: /api/spells/power-word-kill + - index: true-polymorph + name: True Polymorph + url: /api/spells/true-polymorph + '/api/classes/{index}/spellcasting': + get: + summary: Get spellcasting info for a class. + tags: + - Class + parameters: + - $ref: '#/components/parameters/class-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Spellcasting' + example: + level: 1 + spellcasting_ability: + index: cha + name: CHA + url: /api/ability-scores/cha + info: + - name: Cantrips + desc: + - 'You know two cantrips of your choice from the bard spell list. You learn additional bard cantrips of your choice at higher levels, as shown in the Cantrips Known column of the Bard table.' + - name: Spell Slots + desc: + - 'The Bard table shows how many spell slots you have to cast your spells of 1st level and higher. To cast one of these spells, you must expend a slot of the spell''s level or higher. You regain all expended spell slots when you finish a long rest.' + - 'For example, if you know the 1st-level spell cure wounds and have a 1st-level and a 2nd-level spell slot available, you can cast cure wounds using either slot.' + - name: Spells Known of 1st Level and Higher + desc: + - You know four 1st-level spells of your choice from the bard spell list. + - The Spells Known column of the Bard table shows when you learn more bard spells of your choice. + - 'Each of these spells must be of a level for which you have spell slots, as shown on the table. For instance, when you reach 3rd level in this class, you can learn one new spell of 1st or 2nd level.' + - 'Additionally, when you gain a level in this class, you can choose one of the bard spells you know and replace it with another spell from the bard spell list, which also must be of a level for which you have spell slots.' + - name: Spellcasting Ability + desc: + - 'Charisma is your spellcasting ability for your bard spells. Your magic comes from the heart and soul you pour into the performance of your music or oration. You use your Charisma whenever a spell refers to your spellcasting ability. In addition, you use your Charisma modifier when setting the saving throw DC for a bard spell you cast and when making an attack roll with one.' + - Spell save DC = 8 + your proficiency bonus + your Charisma modifier. + - Spell attack modifier = your proficiency bonus + your Charisma modifier. + - name: Ritual Casting + desc: + - You can cast any bard spell you know as a ritual if that spell has the ritual tag. + - name: Spellcasting Focus + desc: + - You can use a musical instrument (see Equipment) as a spellcasting focus for your bard spells. + '404': + description: Not found. + content: + application/json: + schema: + $ref: '#/components/schemas/error-response' + example: + error: Not found + '/api/classes/{index}/features': + get: + summary: Get features available for a class. + tags: + - Class Resource Lists + parameters: + - $ref: '#/components/parameters/class-index' + responses: + '200': + description: List of features for the class. + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/classes/{index}/proficiencies': + get: + summary: Get proficiencies available for a class. + tags: + - Class Resource Lists + parameters: + - $ref: '#/components/parameters/class-index' + responses: + '200': + description: List of proficiencies for the class. + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/classes/{index}/multi-classing': + get: + summary: Get multiclassing resource for a class. + tags: + - Class + parameters: + - $ref: '#/components/parameters/class-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Multiclassing' + example: + prerequisites: + - ability_score: + index: str + name: STR + url: /api/ability-scores/str + minimum_score: 13 + proficiencies: + - index: shields + name: Shields + url: /api/proficiencies/shields + - index: simple-weapons + name: Simple Weapons + url: /api/proficiencies/simple-weapons + - index: martial-weapons + name: Martial Weapons + url: /api/proficiencies/martial-weapons + proficiency_choices: [] + '/api/classes/{index}/levels': + get: + summary: Get all level resources for a class. + tags: + - Class Levels + parameters: + - $ref: '#/components/parameters/class-index' + - $ref: '#/components/parameters/levels-subclass-filter' + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ClassLevel' + '/api/classes/{index}/levels/{class_level}': + get: + summary: Get level resource for a class and level. + tags: + - Class Levels + parameters: + - $ref: '#/components/parameters/class-index' + - $ref: '#/components/parameters/class-level' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/ClassLevel' + example: + level: 1 + ability_score_bonuses: 0 + prof_bonus: 2 + features: + - index: rage + name: Rage + url: /api/features/rage + - index: barbarian-unarmored-defense + name: Unarmored Defense + url: /api/features/barbarian-unarmored-defense + class_specific: + rage_count: 2 + rage_damage_bonus: 2 + brutal_critical_dice: 0 + index: barbarian-1 + class: + index: barbarian + name: Barbarian + url: /api/classes/barbarian + url: /api/classes/barbarian/levels/1 + '/api/classes/{index}/levels/{class_level}/features': + get: + summary: Get features available to a class at the requested level. + tags: + - Class Levels + parameters: + - $ref: '#/components/parameters/class-index' + - $ref: '#/components/parameters/class-level' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + example: + count: 2 + results: + - index: barbarian-unarmored-defense + name: Unarmored Defense + url: /api/features/barbarian-unarmored-defense + - index: rage + name: Rage + url: /api/features/rage + '/api/classes/{index}/levels/{spell_level}/spells': + get: + summary: Get spells of the requested level available to the class. + tags: + - Class Levels + parameters: + - $ref: '#/components/parameters/class-index' + - $ref: '#/components/parameters/spell-level' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + example: + count: 5 + results: + - index: dominate-monster + name: Dominate Monster + url: /api/spells/dominate-monster + - index: earthquake + name: Earthquake + url: /api/spells/earthquake + - index: incendiary-cloud + name: Incendiary Cloud + url: /api/spells/incendiary-cloud + - index: power-word-stun + name: Power Word Stun + url: /api/spells/power-word-stun + - index: sunburst + name: Sunburst + url: /api/spells/sunburst + '/api/conditions/{index}': + get: + summary: Get a condition by index. + description: | + # Condition + + A condition alters a creature’s capabilities in a variety of ways and can + arise as a result of a spell, a class feature, a monster’s attack, or other + effect. Most conditions, such as blinded, are impairments, but a few, such + as invisible, can be advantageous. + tags: + - Game Mechanics + parameters: + - $ref: '#/components/parameters/condition-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Condition' + example: + index: blinded + name: Blinded + url: /api/conditions/blinded + desc: + - '- A blinded creature can''t see and automatically fails any ability check that requires sight.' + - '- Attack rolls against the creature have advantage, and the creature''s attack rolls have disadvantage.' + '/api/damage-types/{index}': + get: + summary: Get a damage type by index. + description: | + # Damage type + + Different attacks, damaging spells, and other harmful effects deal different + types of damage. Damage types have no rules of their own, but other rules, + such as damage resistance, rely on the types. + tags: + - Game Mechanics + parameters: + - $ref: '#/components/parameters/damage-type-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/DamageType' + example: + index: acid + name: Acid + url: /api/damage-types/acid + desc: + - The corrosive spray of a black dragon's breath and the dissolving enzymes secreted by a black pudding deal acid damage. + '/api/equipment/{index}': + get: + summary: Get an equipment item by index. + description: | + # Equipment + + Opportunities abound to find treasure, equipment, weapons, armor, and more + in the dungeons you explore. Normally, you can sell your treasures and + trinkets when you return to a town or other settlement, provided that you + can find buyers and merchants interested in your loot. + tags: + - Equipment + parameters: + - $ref: '#/components/parameters/equipment-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Equipment' + example: + category_range: Simple Melee + contents: [] + cost: + quantity: 1 + unit: sp + damage: + damage_dice: 1d4 + damage_type: + index: bludgeoning + name: Bludgeoning + url: /api/damage-types/bludgeoning + desc: [] + equipment_category: + index: weapon + name: Weapon + url: /api/equipment-categories/weapon + index: club + name: Club + properties: + - index: light + name: Light + url: /api/weapon-properties/light + - index: monk + name: Monk + url: /api/weapon-properties/monk + range: + long: null + normal: 5 + special: [] + url: /api/equipment/club + weapon_category: Simple + weapon_range: Melee + weight: 2 + '/api/equipment-categories/{index}': + get: + summary: Get an equipment category by index. + description: These are the categories that various equipment fall under. + tags: + - Equipment + parameters: + - name: index + in: path + required: true + description: | + The `index` of the equipment category score to get. + + Available values can be found in the resource list for this endpoint. + schema: + type: string + example: waterborne-vehicles + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/EquipmentCategory' + example: + index: waterborne-vehicles + name: Waterborne Vehicles + url: /api/equipment-categories/waterborne-vehicles + equipment: + - index: galley + name: Galley + url: /api/equipment/galley + - index: keelboat + name: Keelboat + url: /api/equipment/keelboat + - index: longship + name: Longship + url: /api/equipment/longship + - index: rowboat + name: Rowboat + url: /api/equipment/rowboat + - index: sailing-ship + name: Sailing ship + url: /api/equipment/sailing-ship + - index: warship + name: Warship + url: /api/equipment/warship + '/api/feats/{index}': + get: + summary: Get a feat by index. + description: | + # Feat + + A feat is a boon a character can receive at level up instead of an ability score increase. + tags: + - Feats + parameters: + - name: index + in: path + required: true + description: | + The `index` of the feat to get. + schema: + type: string + enum: + - grappler + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Feat' + example: + index: grappler + name: Grappler + url: /api/feats/grappler + desc: + - 'You’ve developed the Skills necessary to hold your own in close--quarters Grappling. You gain the following benefits:' + - '- You have advantage on Attack Rolls against a creature you are Grappling.' + - '- You can use your action to try to pin a creature Grappled by you. To do so, make another grapple check. If you succeed, you and the creature are both Restrained until the grapple ends.' + prerequisites: + - ability_score: + index: str + name: STR + url: /api/ability-scores/str + minimum_score: 13 + '/api/features/{index}': + get: + summary: Get a feature by index. + description: | + # Feature + + When you gain a new level in a class, you get its features for that level. + You don’t, however, receive the class’s starting Equipment, and a few + features have additional rules when you’re multiclassing: Channel Divinity, + Extra Attack, Unarmored Defense, and Spellcasting. + tags: + - Features + parameters: + - $ref: '#/components/parameters/feature-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Feature' + example: + index: action-surge-1-use + name: Action Surge (1 use) + url: /api/features/action-surge-1-use + class: + index: fighter + name: Fighter + url: /api/classes/fighter + desc: + - 'Starting at 2nd level, you can push yourself beyond your normal limits for a moment. On your turn, you can take one additional action on top of your regular action and a possible bonus action.' + - 'Once you use this feature, you must finish a short or long rest before you can use it again. Starting at 17th level, you can use it twice before a rest, but only once on the same turn.' + level: 2 + prerequisites: [] + '/api/languages/{index}': + get: + summary: Get a language by index. + description: | + # Language + + Your race indicates the languages your character can speak by default, and your background might give you access to one or more additional languages of your choice. [[SRD p59](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=59)] + tags: + - Character Data + parameters: + - $ref: '#/components/parameters/language-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Language' + example: + index: elvish + name: Elvish + url: /api/languages/elvish + desc: 'Elvish is fluid, with subtle intonations and intricate grammar. Elven literature is rich and varied, and their songs and poems are famous among other races. Many bards learn their language so they can add Elvish ballads to their repertoires.' + type: Standard + script: Elvish + typical_speakers: + - Elves + '/api/magic-items/{index}': + get: + summary: Get a magic item by index. + description: These are the various magic items you can find in the game. + tags: + - Equipment + parameters: + - name: index + in: path + required: true + description: | + The `index` of the magic item to get. + + Available values can be found in the resource list for this endpoint. + schema: + type: string + example: adamantine-armor + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/MagicItem' + example: + index: adamantine-armor + name: Adamantine Armor + url: /api/magic-items/adamantine-armor + desc: + - 'Armor (medium or heavy, but not hide), uncommon' + - 'This suit of armor is reinforced with adamantine, one of the hardest substances in existence. While you''re wearing it, any critical hit against you becomes a normal hit.' + equipment_category: + index: armor + name: Armor + url: /api/equipment-categories/armor + rarity: + name: Uncommon + variants: [] + variant: false + '/api/magic-schools/{index}': + get: + summary: Get a magic school by index. + description: | + # Magic School + + Academies of magic group spells into eight categories called schools of + magic. Scholars, particularly wizards, apply these categories to all spells, + believing that all magic functions in essentially the same way, whether it + derives from rigorous study or is bestowed by a deity. + tags: + - Game Mechanics + parameters: + - $ref: '#/components/parameters/magic-school-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/MagicSchool' + example: + index: conjuration + name: Conjuration + url: /api/magic-schools/conjuration + desc: 'Conjuration spells involve the transportation of objects and creatures from one location to another. Some spells summon creatures or objects to the caster''s side, whereas others allow the caster to teleport to another location. Some conjurations create objects or effects out of nothing.' + /api/monsters: + get: + summary: Get list of monsters with optional filtering + tags: + - Monsters + parameters: + - $ref: '#/components/parameters/challenge-rating-filter' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/monsters/{index}': + get: + summary: Get monster by index. + tags: + - Monsters + parameters: + - $ref: '#/components/parameters/monster-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Monster' + example: + index: aboleth + name: Aboleth + url: /api/monsters/aboleth + actions: + - attacks: [] + damage: [] + desc: The aboleth makes three tentacle attacks. + name: Multiattack + multiattack_type: actions + actions: + - action_name: Tentacle + count: 3 + type: melee + - attack_bonus: 9 + attacks: [] + damage: + - damage_dice: 2d6+5 + damage_type: + index: bludgeoning + name: Bludgeoning + url: /api/damage-types/bludgeoning + - damage_dice: 1d12 + damage_type: + index: acid + name: Acid + url: /api/damage-types/acid + dc: + dc_type: + index: con + name: CON + url: /api/ability-scores/con + dc_value: 14 + success_type: none + desc: 'Melee Weapon Attack: +9 to hit, reach 10 ft., one target. Hit: 12 (2d6 + 5) bludgeoning damage. If the target is a creature, it must succeed on a DC 14 Constitution saving throw or become diseased. The disease has no effect for 1 minute and can be removed by any magic that cures disease. After 1 minute, the diseased creature''s skin becomes translucent and slimy, the creature can''t regain hit points unless it is underwater, and the disease can be removed only by heal or another disease-curing spell of 6th level or higher. When the creature is outside a body of water, it takes 6 (1d12) acid damage every 10 minutes unless moisture is applied to the skin before 10 minutes have passed.' + name: Tentacle + - attack_bonus: 9 + attacks: [] + damage: + - damage_dice: 3d6+5 + damage_type: + index: bludgeoning + name: Bludgeoning + url: /api/damage-types/bludgeoning + desc: 'Melee Weapon Attack: +9 to hit, reach 10 ft. one target. Hit: 15 (3d6 + 5) bludgeoning damage.' + name: Tail + - attacks: [] + damage: [] + dc: + dc_type: + index: wis + name: WIS + url: /api/ability-scores/wis + dc_value: 14 + success_type: none + desc: |- + The aboleth targets one creature it can see within 30 ft. of it. The target must succeed on a DC 14 Wisdom saving throw or be magically charmed by the aboleth until the aboleth dies or until it is on a different plane of existence from the target. The charmed target is under the aboleth's control and can't take reactions, and the aboleth and the target can communicate telepathically with each other over any distance. + Whenever the charmed target takes damage, the target can repeat the saving throw. On a success, the effect ends. No more than once every 24 hours, the target can also repeat the saving throw when it is at least 1 mile away from the aboleth. + name: Enslave + usage: + times: 3 + type: per day + alignment: lawful evil + armor_class: + - type: natural + value: 17 + challenge_rating: 10 + proficiency_bonus: 4 + charisma: 18 + condition_immunities: [] + constitution: 15 + damage_immunities: [] + damage_resistances: [] + damage_vulnerabilities: [] + dexterity: 9 + forms: [] + hit_dice: 18d10 + hit_points: 135 + hit_points_roll: 18d10+36 + intelligence: 18 + languages: 'Deep Speech, telepathy 120 ft.' + legendary_actions: + - damage: [] + desc: The aboleth makes a Wisdom (Perception) check. + name: Detect + - damage: [] + desc: The aboleth makes one tail attack. + name: Tail Swipe + - attack_bonus: 0 + damage: + - damage_dice: 3d6 + damage_type: + index: psychic + name: Psychic + url: /api/damage-types/psychic + desc: 'One creature charmed by the aboleth takes 10 (3d6) psychic damage, and the aboleth regains hit points equal to the damage the creature takes.' + name: Psychic Drain (Costs 2 Actions) + proficiencies: + - proficiency: + index: saving-throw-con + name: 'Saving Throw: CON' + url: /api/proficiencies/saving-throw-con + value: 6 + - proficiency: + index: saving-throw-int + name: 'Saving Throw: INT' + url: /api/proficiencies/saving-throw-int + value: 8 + - proficiency: + index: saving-throw-wis + name: 'Saving Throw: WIS' + url: /api/proficiencies/saving-throw-wis + value: 6 + - proficiency: + index: skill-history + name: 'Skill: History' + url: /api/proficiencies/skill-history + value: 12 + - proficiency: + index: skill-perception + name: 'Skill: Perception' + url: /api/proficiencies/skill-perception + value: 10 + reactions: [] + senses: + darkvision: 120 ft. + passive_perception: 20 + size: Large + special_abilities: + - damage: [] + desc: The aboleth can breathe air and water. + name: Amphibious + - damage: [] + dc: + dc_type: + index: con + name: CON + url: /api/ability-scores/con + dc_value: 14 + success_type: none + desc: 'While underwater, the aboleth is surrounded by transformative mucus. A creature that touches the aboleth or that hits it with a melee attack while within 5 ft. of it must make a DC 14 Constitution saving throw. On a failure, the creature is diseased for 1d4 hours. The diseased creature can breathe only underwater.' + name: Mucous Cloud + - damage: [] + desc: 'If a creature communicates telepathically with the aboleth, the aboleth learns the creature''s greatest desires if the aboleth can see the creature.' + name: Probing Telepathy + speed: + swim: 40 ft. + walk: 10 ft. + strength: 21 + subtype: null + type: aberration + wisdom: 15 + xp: 5900 + '/api/proficiencies/{index}': + get: + summary: Get a proficiency by index. + description: | + # Proficiency + + By virtue of race, class, and background a character is proficient at using certain skills, weapons, and equipment. Characters can also gain additional proficiencies at higher levels or by multiclassing. A characters starting proficiencies are determined during character creation. + tags: + - Character Data + parameters: + - $ref: '#/components/parameters/proficiency-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Proficiency' + example: + index: medium-armor + name: Medium Armor + url: /api/proficiencies/medium-armor + type: Armor + classes: + - index: barbarian + name: Barbarian + url: /api/classes/barbarian + - index: cleric + name: Cleric + url: /api/classes/cleric + - index: druid + name: Druid + url: /api/classes/druid + - index: ranger + name: Ranger + url: /api/classes/ranger + races: [] + reference: + index: medium-armor + name: Medium Armor + url: /api/equipment-categories/medium-armor + '/api/races/{index}': + get: + summary: Get a race by index. + description: Each race grants your character ability and skill bonuses as well as racial traits. + tags: + - Races + parameters: + - $ref: '#/components/parameters/race-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Race' + example: + index: elf + name: Elf + url: /api/races/elf + ability_bonuses: + - ability_score: + index: dex + name: DEX + url: /api/ability-scores/dex + bonus: 2 + age: 'Although elves reach physical maturity at about the same age as humans, the elven understanding of adulthood goes beyond physical growth to encompass worldly experience. An elf typically claims adulthood and an adult name around the age of 100 and can live to be 750 years old.' + alignment: 'Elves love freedom, variety, and self-expression, so they lean strongly toward the gentler aspects of chaos. They value and protect others'' freedom as well as their own, and they are more often good than not. The drow are an exception; their exile has made them vicious and dangerous. Drow are more often evil than not.' + language_desc: 'You can speak, read, and write Common and Elvish. Elvish is fluid, with subtle intonations and intricate grammar. Elven literature is rich and varied, and their songs and poems are famous among other races. Many bards learn their language so they can add Elvish ballads to their repertoires.' + languages: + - index: common + name: Common + url: /api/languages/common + - index: elvish + name: Elvish + url: /api/languages/elvish + size: Medium + size_description: Elves range from under 5 to over 6 feet tall and have slender builds. Your size is Medium. + speed: 30 + starting_proficiencies: + - index: skill-perception + name: 'Skill: Perception' + url: /api/proficiencies/skill-perception + subraces: + - index: high-elf + name: High Elf + url: /api/subraces/high-elf + traits: + - index: darkvision + name: Darkvision + url: /api/traits/darkvision + - index: fey-ancestry + name: Fey Ancestry + url: /api/traits/fey-ancestry + - index: trance + name: Trance + url: /api/traits/trance + '/api/races/{index}/subraces': + get: + summary: Get subraces available for a race. + tags: + - Races + parameters: + - $ref: '#/components/parameters/race-index' + responses: + '200': + description: List of subraces for the race. + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/races/{index}/proficiencies': + get: + summary: Get proficiencies available for a race. + tags: + - Races + parameters: + - $ref: '#/components/parameters/race-index' + responses: + '200': + description: List of proficiencies for the race. + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/races/{index}/traits': + get: + summary: Get traits available for a race. + tags: + - Races + parameters: + - $ref: '#/components/parameters/race-index' + responses: + '200': + description: List of traits for the race. + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/rule-sections/{index}': + get: + summary: Get a rule section by index. + description: Rule sections represent a sub-heading and text that can be found underneath a rule heading in the SRD. + tags: + - Rules + parameters: + - $ref: '#/components/parameters/rule-section-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/RuleSection' + example: + index: time + name: Time + url: /api/rule-sections/time + desc: | + ## Time + + In situations where keeping track of the passage of time is important, the GM determines the time a task requires. The GM might use a different time scale depending on the context of the situation at hand. In a dungeon environment, the adventurers' movement happens on a scale of **minutes**. It takes them about a minute to creep down a long hallway, another minute to check for traps on the door at the end of the hall, and a good ten minutes to search the chamber beyond for anything interesting or valuable. + + In a city or wilderness, a scale of **hours** is often more appropriate. Adventurers eager to reach the lonely tower at the heart of the forest hurry across those fifteen miles in just under four hours' time. + + For long journeys, a scale of **days** works best. + + Following the road from Baldur's Gate to Waterdeep, the adventurers spend four uneventful days before a goblin ambush interrupts their journey. + + In combat and other fast-paced situations, the game relies on **rounds**, a 6-second span of time. + '/api/rules/{index}': + get: + summary: Get a rule by index. + description: | + # Rule + + Rules are pages in the SRD that document the mechanics of Dungeons and Dragons. + Rules have descriptions which is the text directly underneath the rule heading + in the SRD. Rules also have subsections for each heading underneath the rule in the SRD. + tags: + - Rules + parameters: + - $ref: '#/components/parameters/rule-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Rule' + example: + index: using-ability-scores + name: Using Ability Scores + url: /api/rules/using-ability-scores + desc: | + # Using Ability Scores + + Six abilities provide a quick description of every creature's physical and mental characteristics: + - **Strength**, measuring physical power + - **Dexterity**, measuring agility + - **Constitution**, measuring endurance + - **Intelligence**, measuring reasoning and memory + - **Wisdom**, measuring perception and insight + - **Charisma**, measuring force of personality + + Is a character muscle-bound and insightful? Brilliant and charming? Nimble and hardy? Ability scores define these qualities-a creature's assets as well as weaknesses. + + The three main rolls of the game-the ability check, the saving throw, and the attack roll-rely on the six ability scores. The book's introduction describes the basic rule behind these rolls: roll a d20, add an ability modifier derived from one of the six ability scores, and compare the total to a target number. + + **Ability Scores and Modifiers** Each of a creature's abilities has a score, a number that defines the magnitude of that ability. An ability score is not just a measure of innate capabilities, but also encompasses a creature's training and competence in activities related to that ability. + + A score of 10 or 11 is the normal human average, but adventurers and many monsters are a cut above average in most abilities. A score of 18 is the highest that a person usually reaches. Adventurers can have scores as high as 20, and monsters and divine beings can have scores as high as 30. + + Each ability also has a modifier, derived from the score and ranging from -5 (for an ability score of 1) to +10 (for a score of 30). The Ability Scores and Modifiers table notes the ability modifiers for the range of possible ability scores, from 1 to 30. + subsections: + - index: ability-scores-and-modifiers + name: Ability Scores and Modifiers + url: /api/rule-sections/ability-scores-and-modifiers + - index: advantage-and-disadvantage + name: Advantage and Disadvantage + url: /api/rule-sections/advantage-and-disadvantage + - index: proficiency-bonus + name: Proficiency Bonus + url: /api/rule-sections/proficiency-bonus + - index: ability-checks + name: Ability Checks + url: /api/rule-sections/ability-checks + - index: using-each-ability + name: Using Each Ability + url: /api/rule-sections/using-each-ability + - index: saving-throws + name: Saving Throws + url: /api/rule-sections/saving-throws + '/api/skills/{index}': + get: + summary: Get a skill by index. + description: | + # Skill + + Each ability covers a broad range of capabilities, including skills that a character or a monster can be proficient in. A skill represents a specific aspect of an ability score, and an individual's proficiency in a skill demonstrates a focus on that aspect. [[SRD p77](https://media.wizards.com/2016/downloads/DND/SRD-OGL_V5.1.pdf#page=77)] + tags: + - Character Data + parameters: + - $ref: '#/components/parameters/skill-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Skill' + example: + index: acrobatics + name: Acrobatics + url: /api/skills/acrobatics + ability_score: + index: dex + name: DEX + url: /api/ability-scores/dex + desc: + - 'Your Dexterity (Acrobatics) check covers your attempt to stay on your feet in a tricky situation, such as when you''re trying to run across a sheet of ice, balance on a tightrope, or stay upright on a rocking ship''s deck. The GM might also call for a Dexterity (Acrobatics) check to see if you can perform acrobatic stunts, including dives, rolls, somersaults, and flips.' + /api/spells: + get: + summary: Get list of spells with optional filtering. + tags: + - Spells + parameters: + - $ref: '#/components/parameters/level-filter' + - $ref: '#/components/parameters/school-filter' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/spells/{index}': + get: + summary: Get a spell by index. + tags: + - Spells + parameters: + - $ref: '#/components/parameters/spell-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Spell' + example: + index: sacred-flame + name: Sacred Flame + url: /api/spells/sacred-flame + attack_type: ranged + casting_time: 1 action + classes: + - index: cleric + name: Cleric + url: /api/classes/cleric + components: + - V + - S + concentration: false + damage: + damage_at_character_level: + '1': 1d8 + '5': 2d8 + '11': 3d8 + '17': 4d8 + damage_type: + index: radiant + name: Radiant + url: /api/damage-types/radiant + dc: + dc_success: none + dc_type: + index: dex + name: DEX + url: /api/ability-scores/dex + desc: + - Flame-like radiance descends on a creature that you can see within range. The target must succeed on a dexterity saving throw or take 1d8 radiant damage. The target gains no benefit from cover for this saving throw. + - 'The spell''s damage increases by 1d8 when you reach 5th level (2d8), 11th level (3d8), and 17th level (4d8).' + duration: Instantaneous + higher_level: [] + level: 0 + range: 60 feet + ritual: false + school: + index: evocation + name: Evocation + url: /api/magic-schools/evocation + subclasses: + - index: lore + name: Lore + url: /api/subclasses/lore + '/api/subclasses/{index}': + get: + summary: Get a subclass by index. + description: Subclasses reflect the different paths a class may take as levels are gained. + tags: + - Subclasses + parameters: + - $ref: '#/components/parameters/subclass-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Subclass' + example: + index: fiend + name: Fiend + url: /api/subclasses/fiend + class: + index: warlock + name: Warlock + url: /api/classes/warlock + desc: + - 'You have made a pact with a fiend from the lower planes of existence, a being whose aims are evil, even if you strive against those aims. Such beings desire the corruption or destruction of all things, ultimately including you. Fiends powerful enough to forge a pact include demon lords such as Demogorgon, Orcus, Fraz''Urb-luu, and Baphomet; archdevils such as Asmodeus, Dispater, Mephistopheles, and Belial; pit fiends and balors that are especially mighty; and ultroloths and other lords of the yugoloths.' + spells: + - prerequisites: + - index: warlock-1 + name: Warlock 1 + type: level + url: /api/classes/warlock/levels/1 + spell: + index: burning-hands + name: Burning Hands + url: /api/spells/burning-hands + - prerequisites: + - index: warlock-1 + name: Warlock 1 + type: level + url: /api/classes/warlock/levels/1 + spell: + index: command + name: Command + url: /api/spells/command + - prerequisites: + - index: warlock-3 + name: Warlock 3 + type: level + url: /api/classes/warlock/levels/3 + spell: + index: blindness-deafness + name: Blindness/Deafness + url: /api/spells/blindness-deafness + - prerequisites: + - index: warlock-3 + name: Warlock 3 + type: level + url: /api/classes/warlock/levels/3 + spell: + index: scorching-ray + name: Scorching Ray + url: /api/spells/scorching-ray + - prerequisites: + - index: warlock-5 + name: Warlock 5 + type: level + url: /api/classes/warlock/levels/5 + spell: + index: fireball + name: Fireball + url: /api/spells/fireball + - prerequisites: + - index: warlock-5 + name: Warlock 5 + type: level + url: /api/classes/warlock/levels/5 + spell: + index: stinking-cloud + name: Stinking Cloud + url: /api/spells/stinking-cloud + - prerequisites: + - index: warlock-7 + name: Warlock 7 + type: level + url: /api/classes/warlock/levels/7 + spell: + index: fire-shield + name: Fire Shield + url: /api/spells/fire-shield + - prerequisites: + - index: warlock-7 + name: Warlock 7 + type: level + url: /api/classes/warlock/levels/7 + spell: + index: wall-of-fire + name: Wall of Fire + url: /api/spells/wall-of-fire + - prerequisites: + - index: warlock-9 + name: Warlock 9 + type: level + url: /api/classes/warlock/levels/9 + spell: + index: flame-strike + name: Flame Strike + url: /api/spells/flame-strike + - prerequisites: + - index: warlock-9 + name: Warlock 9 + type: level + url: /api/classes/warlock/levels/9 + spell: + index: hallow + name: Hallow + url: /api/spells/hallow + subclass_flavor: Otherworldly Patron + subclass_levels: /api/subclasses/fiend/levels + '/api/subclasses/{index}/features': + get: + summary: Get features available for a subclass. + tags: + - Subclasses + parameters: + - $ref: '#/components/parameters/subclass-index' + responses: + '200': + description: List of features for the subclass. + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/subclasses/{index}/levels': + get: + summary: Get all level resources for a subclass. + tags: + - Subclasses + parameters: + - $ref: '#/components/parameters/subclass-index' + responses: + '200': + description: List of level resource for the subclass. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SubclassLevelResource' + '/api/subclasses/{index}/levels/{subclass_level}': + get: + summary: Get level resources for a subclass and level. + tags: + - Subclasses + parameters: + - $ref: '#/components/parameters/subclass-index' + - name: subclass_level + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 20 + example: 6 + responses: + '200': + description: Level resource for the subclass and level. + content: + application/json: + schema: + $ref: '#/components/schemas/SubclassLevel' + example: + index: devotion-3 + url: /api/subclasses/devotion/levels/3 + class: + index: paladin + name: Paladin + url: /api/classes/paladin + features: + - index: channel-divinity + name: Channel Divinity + url: /api/features/channel-divinity + level: 3 + subclass: + index: devotion + name: Devotion + url: /api/subclasses/devotion + '/api/subclasses/{index}/levels/{subclass_level}/features': + get: + summary: Get features of the requested spell level available to the class. + tags: + - Subclasses + parameters: + - $ref: '#/components/parameters/subclass-index' + - name: subclass_level + in: path + required: true + schema: + type: integer + minimum: 0 + maximum: 20 + example: 6 + responses: + '200': + description: List of features for the subclass and level. + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/subraces/{index}': + get: + summary: Get a subrace by index. + description: Subraces reflect the different varieties of a certain parent race. + tags: + - Subraces + parameters: + - $ref: '#/components/parameters/subrace-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Subrace' + example: + index: hill-dwarf + name: Hill Dwarf + url: /api/subraces/hill-dwarf + ability_bonuses: + - ability_score: + index: wis + name: WIS + url: /api/ability-scores/wis + bonus: 1 + desc: 'As a hill dwarf, you have keen senses, deep intuition, and remarkable resilience.' + languages: [] + race: + index: dwarf + name: Dwarf + url: /api/races/dwarf + racial_traits: + - index: dwarven-toughness + name: Dwarven Toughness + url: /api/traits/dwarven-toughness + starting_proficiencies: [] + '/api/subraces/{index}/proficiencies': + get: + summary: Get proficiences available for a subrace. + tags: + - Subraces + parameters: + - $ref: '#/components/parameters/subrace-index' + responses: + '200': + description: List of proficiences for the subrace. + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/subraces/{index}/traits': + get: + summary: Get traits available for a subrace. + tags: + - Subraces + parameters: + - $ref: '#/components/parameters/subrace-index' + responses: + '200': + description: List of traits for the subrace. + content: + application/json: + schema: + $ref: '#/components/schemas/APIReferenceList' + '/api/traits/{index}': + get: + summary: Get a trait by index. + tags: + - Traits + parameters: + - $ref: '#/components/parameters/trait-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/Trait' + example: + index: trance + name: Trance + url: /api/traits/trance + desc: + - 'Elves do not need to sleep. Instead, they meditate deeply, remaining semiconscious, for 4 hours a day. (The Common word for such meditation is "trance.") While meditating, you can dream after a fashion; such dreams are actually mental exercises that have become reflexive through years of practice. After resting this way, you gain the same benefit that a human does from 8 hours of sleep.' + proficiencies: [] + races: + - index: elf + name: Elf + url: /api/races/elf + subraces: [] + '/api/weapon-properties/{index}': + get: + summary: Get a weapon property by index. + tags: + - Equipment + parameters: + - $ref: '#/components/parameters/weapon-property-index' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/WeaponProperty' + example: + index: ammunition + name: Ammunition + url: /api/weapon-properties/ammunition + desc: + - 'You can use a weapon that has the ammunition property to make a ranged attack only if you have ammunition to fire from the weapon. Each time you attack with the weapon, you expend one piece of ammunition. Drawing the ammunition from a quiver, case, or other container is part of the attack (you need a free hand to load a one-handed weapon).' + - 'At the end of the battle, you can recover half your expended ammunition by taking a minute to search the battlefield. If you use a weapon that has the ammunition property to make a melee attack, you treat the weapon as an improvised weapon (see "Improvised Weapons" later in the section). A sling must be loaded to deal any damage when used in this way.' +components: + parameters: + ability-score-index: + name: index + in: path + required: true + description: | + The `index` of the ability score to get. + schema: + type: string + enum: + - cha + - con + - dex + - int + - str + - wis + example: cha + alignment-index: + name: index + in: path + required: true + description: | + The `index` of the alignment to get. + schema: + type: string + enum: + - chaotic-neutral + - chaotic-evil + - chaotic-good + - lawful-neutral + - lawful-evil + - lawful-good + - neutral + - neutral-evil + - neutral-good + example: chaotic-neutral + language-index: + name: index + in: path + required: true + description: | + The `index` of the language to get. + schema: + type: string + enum: + - abyssal + - celestial + - common + - deep-speech + - draconic + - dwarvish + - elvish + - giant + - gnomish + - goblin + - halfling + - infernal + - orc + - primordial + - sylvan + - undercommon + example: abyssal + proficiency-index: + name: index + in: path + required: true + description: | + The `index` of the proficiency to get. + + Available values can be found in the [`ResourceList`](#get-/api/-endpoint-) for `proficiencies`. + schema: + type: string + example: medium-armor + skill-index: + name: index + in: path + required: true + description: | + The `index` of the skill to get. + schema: + type: string + enum: + - acrobatics + - animal-handling + - arcana + - athletics + - deception + - history + - insight + - intimidation + - investigation + - medicine + - nature + - perception + - performance + - persuasion + - religion + - sleight-of-hand + - stealth + - survival + example: nature + class-index: + name: index + in: path + required: true + description: | + The `index` of the class to get. + schema: + type: string + enum: + - barbarian + - bard + - cleric + - druid + - fighter + - monk + - paladin + - ranger + - rogue + - sorcerer + - warlock + - wizard + example: paladin + background-index: + name: index + in: path + required: true + description: | + The `index` of the background to get. + schema: + type: string + enum: + - acolyte + example: acolyte + weapon-property-index: + name: index + in: path + required: true + description: | + The `index` of the weapon property to get. + schema: + type: string + enum: + - ammunition + - finesse + - heavy + - light + - loading + - monk + - reach + - special + - thrown + - two-handed + - versatile + example: ammunition + class-level: + name: class_level + in: path + required: true + schema: + type: number + minimum: 0 + maximum: 20 + example: 3 + spell-level: + name: spell_level + in: path + required: true + schema: + type: number + minimum: 1 + maximum: 9 + example: 4 + condition-index: + name: index + in: path + required: true + description: | + The `index` of the condition to get. + schema: + type: string + enum: + - blinded + - charmed + - deafened + - exhaustion + - frightened + - grappled + - incapacitated + - invisible + - paralyzed + - petrified + - poisoned + - prone + - restrained + - stunned + - unconscious + example: blinded + damage-type-index: + name: index + in: path + required: true + description: | + The `index` of the damage type to get. + schema: + type: string + enum: + - acid + - bludgeoning + - cold + - fire + - force + - lightning + - necrotic + - piercing + - poison + - psychic + - radiant + - slashing + - thunder + example: acid + magic-school-index: + name: index + in: path + required: true + description: | + The `index` of the magic school to get. + schema: + type: string + enum: + - abjuration + - conjuration + - divination + - enchantment + - evocation + - illusion + - necromancy + - transmutation + example: abjuration + equipment-index: + name: index + in: path + required: true + description: | + The `index` of the equipment to get. + + Available values can be found in the [`ResourceList`](#get-/api/-endpoint-) for `equipment`. + schema: + type: string + example: club + feature-index: + name: index + in: path + required: true + description: | + The `index` of the feature to get. + + Available values can be found in the [`ResourceList`](#get-/api/-endpoint-) for `features`. + schema: + type: string + example: action-surge-1-use + rule-index: + name: index + in: path + required: true + description: | + The `index` of the rule to get. + schema: + type: string + enum: + - adventuring + - appendix + - combat + - equipment + - spellcasting + - using-ability-scores + example: adventuring + rule-section-index: + name: index + in: path + required: true + description: | + The `index` of the rule section to get. + schema: + type: string + enum: + - ability-checks + - ability-scores-and-modifiers + - actions-in-combat + - activating-an-item + - advantage-and-disadvantage + - attunement + - between-adventures + - casting-a-spell + - cover + - damage-and-healing + - diseases + - fantasy-historical-pantheons + - madness + - making-an-attack + - mounted-combat + - movement + - movement-and-position + - objects + - poisons + - proficiency-bonus + - resting + - saving-throws + - sentient-magic-items + - standard-exchange-rates + - the-environment + - the-order-of-combat + - the-planes-of-existence + - time + - traps + - underwater-combat + - using-each-ability + - wearing-and-wielding-items + - what-is-a-spell + example: traps + race-index: + name: index + in: path + required: true + description: | + The `index` of the race to get. + schema: + type: string + enum: + - dragonborn + - dwarf + - elf + - gnome + - half-elf + - half-orc + - halfling + - human + - tiefling + example: elf + subclass-index: + name: index + in: path + required: true + description: | + The `index` of the subclass to get. + schema: + type: string + enum: + - berserker + - champion + - devotion + - draconic + - evocation + - fiend + - hunter + - land + - life + - lore + - open-hand + - thief + example: fiend + subrace-index: + name: index + in: path + required: true + description: | + The `index` of the subrace to get. + schema: + type: string + enum: + - high-elf + - hill-dwarf + - lightfoot-halfling + - rock-gnome + example: hill-dwarf + trait-index: + name: index + in: path + required: true + description: The `index` of the `Trait` to get. + schema: + type: string + enum: + - artificers-lore + - brave + - breath-weapon + - damage-resistance + - darkvision + - draconic-ancestry + - draconic-ancestry-black + - draconic-ancestry-blue + - draconic-ancestry-brass + - draconic-ancestry-bronze + - draconic-ancestry-copper + - draconic-ancestry-gold + - draconic-ancestry-green + - draconic-ancestry-red + - draconic-ancestry-silver + - draconic-ancestry-white + - dwarven-combat-training + - dwarven-resilience + - dwarven-toughness + - elf-weapon-training + - extra-language + - fey-ancestry + - gnome-cunning + - halfling-nimbleness + - hellish-resistance + - high-elf-cantrip + - infernal-legacy + - keen-senses + - lucky + - menacing + - naturally-stealthy + - relentless-endurance + - savage-attacks + - skill-versatility + - stonecunning + - tinker + - tool-proficiency + - trance + example: trance + monster-index: + name: index + in: path + required: true + description: | + The `index` of the `Monster` to get. + schema: + type: string + example: aboleth + spell-index: + name: index + in: path + required: true + description: | + The `index` of the `Spell` to get. + + Available values can be found in the [`ResourceList`](#get-/api/-endpoint-) for `spells`. + schema: + type: string + example: sacred-flame + level-filter: + name: level + in: query + required: false + description: The level or levels to filter on. + schema: + type: array + items: + type: integer + examples: + single-value: + value: + - 1 + multiple-value: + value: + - 1 + - 2 + school-filter: + name: school + in: query + required: false + description: The magic school or schools to filter on. + schema: + type: array + items: + type: string + examples: + single-value: + value: + - illusion + multiple-value: + value: + - evocation + - illusion + partial-value: + value: + - illu + challenge-rating-filter: + name: challenge_rating + in: query + required: false + description: The challenge rating or ratings to filter on. + schema: + type: array + items: + type: number + examples: + single-value: + value: + - 1 + multiple-value: + value: + - 1 + - 2 + multiple-value-with-float: + value: + - 2 + - 0.25 + levels-subclass-filter: + name: subclass + in: query + required: false + description: Adds subclasses for class to the response + schema: + type: string + examples: + single-value: + value: berserker + partial-value: + value: ber + base-endpoint-index: + name: endpoint + in: path + required: true + schema: + type: string + enum: + - ability-scores + - alignments + - backgrounds + - classes + - conditions + - damage-types + - equipment + - equipment-categories + - feats + - features + - languages + - magic-items + - magic-schools + - monsters + - proficiencies + - races + - rule-sections + - rules + - skills + - spells + - subclasses + - subraces + - traits + - weapon-properties + example: ability-scores + schemas: + APIReference: + description: | + `APIReference` + type: object + properties: + index: + description: Resource index for shorthand searching. + type: string + name: + description: Name of the referenced resource. + type: string + url: + description: URL of the referenced resource. + type: string + APIReferenceList: + description: | + `APIReferenceList` + type: object + properties: + count: + description: Total number of resources available. + type: number + results: + type: array + items: + $ref: '#/components/schemas/APIReference' + Damage: + description: | + `Damage` + type: object + properties: + damage_dice: + type: string + damage_type: + $ref: '#/components/schemas/APIReference' + Choice: + description: | + `Choice` + type: object + properties: + desc: + description: Description of the choice to be made. + type: string + choose: + description: Number of items to pick from the list. + type: number + type: + description: Type of the resources to choose from. + type: string + from: + $ref: '#/components/schemas/OptionSet' + AreaOfEffect: + type: object + properties: + size: + type: number + type: + type: string + enum: + - sphere + - cone + - cylinder + - line + - cube + Prerequisite: + description: | + `Prerequisite` + type: object + properties: + ability_score: + allOf: + - $ref: '#/components/schemas/APIReference' + minimum_score: + description: Minimum score to meet the prerequisite. + type: number + ResourceDescription: + type: object + properties: + desc: + description: Description of the resource. + type: array + items: + type: string + AbilityScore: + description: | + `AbilityScore` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + full_name: + description: Full name of the ability score. + type: string + skills: + description: List of skills that use this ability score. + type: array + items: + $ref: '#/components/schemas/APIReference' + Alignment: + description: | + `Alignment` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + desc: + description: Brief description of the resource. + type: string + abbreviation: + description: Abbreviation/initials/acronym for the alignment. + type: string + Class: + description: | + `Class` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + hit_die: + description: 'Hit die of the class. (ex: 12 == 1d12).' + type: number + class_levels: + description: URL of the level resource for the class. + type: string + multi_classing: + $ref: '#/components/schemas/Multiclassing' + spellcasting: + $ref: '#/components/schemas/Spellcasting' + spells: + description: URL of the spell resource list for the class. + type: string + starting_equipment: + description: List of equipment and their quantities all players of the class start with. + type: array + items: + type: object + properties: + quantity: + type: number + equipment: + $ref: '#/components/schemas/APIReference' + starting_equipment_options: + description: List of choices of starting equipment. + type: array + items: + $ref: '#/components/schemas/Choice' + proficiency_choices: + description: List of choices of starting proficiencies. + type: array + items: + $ref: '#/components/schemas/Choice' + proficiencies: + description: List of starting proficiencies for all new characters of this class. + type: array + items: + $ref: '#/components/schemas/APIReference' + saving_throws: + description: Saving throws the class is proficient in. + type: array + items: + $ref: '#/components/schemas/APIReference' + subclasses: + description: List of all possible subclasses this class can specialize in. + type: array + items: + $ref: '#/components/schemas/APIReference' + Multiclassing: + description: | + `Multiclassing` + type: object + properties: + prerequisites: + description: List of prerequisites that must be met. + type: array + items: + $ref: '#/components/schemas/Prerequisite' + prerequisite_options: + description: List of choices of prerequisites to meet for. + type: array + items: + $ref: '#/components/schemas/Choice' + proficiencies: + description: List of proficiencies available when multiclassing. + type: array + items: + $ref: '#/components/schemas/APIReference' + proficiency_choices: + description: List of choices of proficiencies that are given when multiclassing. + type: array + items: + $ref: '#/components/schemas/Choice' + Spellcasting: + type: object + description: | + `Spellcasting` + properties: + level: + description: Level at which the class can start using its spellcasting abilities. + type: number + info: + description: Descriptions of the class' ability to cast spells. + type: array + items: + type: object + properties: + name: + description: Feature name. + type: string + desc: + description: Feature description. + type: array + items: + type: string + spellcasting_ability: + description: Reference to the `AbilityScore` used for spellcasting by the class. + allOf: + - $ref: '#/components/schemas/APIReference' + Gear: + description: | + `Gear` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + equipment_category: + $ref: '#/components/schemas/APIReference' + gear_category: + $ref: '#/components/schemas/APIReference' + cost: + $ref: '#/components/schemas/Cost' + weight: + description: How much the equipment weighs. + type: number + EquipmentPack: + description: | + `EquipmentPack` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + equipment_category: + $ref: '#/components/schemas/APIReference' + gear_category: + $ref: '#/components/schemas/APIReference' + cost: + $ref: '#/components/schemas/Cost' + contents: + description: The list of adventuring gear in the pack. + type: array + items: + $ref: '#/components/schemas/APIReference' + EquipmentCategory: + description: | + `EquipmentCategory` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + equipment: + description: A list of the equipment that falls into this category. + type: array + items: + $ref: '#/components/schemas/APIReference' + Equipment: + description: | + `Equipment` + anyOf: + - $ref: '#/components/schemas/Weapon' + - $ref: '#/components/schemas/Armor' + - $ref: '#/components/schemas/Gear' + - $ref: '#/components/schemas/EquipmentPack' + Cost: + description: | + `Cost` + type: object + properties: + quantity: + description: Numerical amount of coins. + type: number + unit: + description: Unit of coinage. + type: string + Weapon: + description: | + `Weapon` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + equipment_category: + $ref: '#/components/schemas/APIReference' + weapon_category: + description: The category of weapon this falls into. + type: string + weapon_range: + description: Whether this is a Melee or Ranged weapon. + type: string + category_range: + description: A combination of weapon_category and weapon_range. + type: string + range: + type: object + properties: + normal: + description: The weapon's normal range in feet. + type: number + long: + description: The weapon's long range in feet. + type: number + damage: + $ref: '#/components/schemas/Damage' + two_handed_damage: + $ref: '#/components/schemas/Damage' + properties: + description: A list of the properties this weapon has. + type: array + items: + $ref: '#/components/schemas/APIReference' + cost: + $ref: '#/components/schemas/Cost' + weight: + description: How much the equipment weighs. + type: number + Armor: + description: | + `Armor` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + equipment_category: + $ref: '#/components/schemas/APIReference' + armor_category: + description: The category of armor this falls into. + type: string + armor_class: + description: Details on how to calculate armor class. + type: object + additionalProperties: + type: string + str_minimum: + description: Minimum STR required to use this armor. + type: number + stealth_disadvantage: + description: Whether the armor gives disadvantage for Stealth. + type: boolean + cost: + $ref: '#/components/schemas/Cost' + weight: + description: How much the equipment weighs. + type: number + MagicItem: + description: | + `MagicItem` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + image: + description: The image url of the magic item. + type: string + equipment_category: + $ref: '#/components/schemas/APIReference' + rarity: + type: object + properties: + name: + description: The rarity of the item. + type: string + enum: + - Varies + - Common + - Uncommon + - Rare + - Very Rare + - Legendary + - Artifact + variants: + type: array + items: + $ref: '#/components/schemas/APIReference' + variant: + description: Whether this is a variant or not + type: boolean + DamageType: + description: | + `DamageType` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + DamageAtCharacterLevel: + description: | + 'Spell Damage' + type: object + properties: + damage_at_character_level: + type: object + additionalProperties: true + damage_type: + $ref: '#/components/schemas/APIReference' + DamageAtSlotLevel: + description: | + 'Spell Damage' + type: object + properties: + damage_at_slot_level: + type: object + additionalProperties: true + damage_type: + $ref: '#/components/schemas/APIReference' + Condition: + description: | + `Condition` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + MagicSchool: + description: | + `MagicSchool` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + desc: + description: Brief description of the resource. + type: string + Skill: + description: | + `Skill` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + ability_score: + $ref: '#/components/schemas/APIReference' + Proficiency: + description: | + `Proficiency` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + type: + description: The general category of the proficiency. + type: string + classes: + description: Classes that start with this proficiency. + type: array + items: + $ref: '#/components/schemas/APIReference' + races: + description: Races that start with this proficiency. + type: array + items: + $ref: '#/components/schemas/APIReference' + reference: + description: | + `APIReference` to the full description of the related resource. + allOf: + - $ref: '#/components/schemas/APIReference' + Language: + description: | + `Language` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + desc: + description: Brief description of the language. + type: string + type: + type: string + enum: + - Standard + - Exotic + script: + description: Script used for writing in the language. + type: string + typical_speakers: + description: List of races that tend to speak the language. + type: array + items: + type: string + Background: + description: | + `Background` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + starting_proficiencies: + description: Starting proficiencies for all new characters of this background. + type: array + items: + $ref: '#/components/schemas/APIReference' + starting_equipment: + description: Starting equipment for all new characters of this background. + type: array + items: + $ref: '#/components/schemas/APIReference' + starting_equipment_options: + $ref: '#/components/schemas/Choice' + language_options: + $ref: '#/components/schemas/Choice' + feature: + description: Special feature granted to new characters of this background. + type: object + properties: + name: + type: string + desc: + type: array + items: + type: string + personality_traits: + description: Choice of personality traits for this background. + type: object + ideals: + $ref: '#/components/schemas/Choice' + bonds: + $ref: '#/components/schemas/Choice' + flaws: + $ref: '#/components/schemas/Choice' + Feat: + description: | + `Feat` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + prerequisites: + description: An object of APIReferences to ability scores and minimum scores. + type: array + items: + $ref: '#/components/schemas/Prerequisite' + Subclass: + description: | + `Subclass` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + class: + $ref: '#/components/schemas/APIReference' + subclass_flavor: + description: Lore-friendly flavor text for a classes respective subclass. + type: string + subclass_levels: + description: Resource url that shows the subclass level progression. + type: string + spells: + type: array + items: + type: object + properties: + prerequisites: + type: array + items: + $ref: '#/components/schemas/SpellPrerequisite' + spell: + $ref: '#/components/schemas/APIReference' + SubclassLevel: + description: | + `SubclassLevel` + type: object + properties: + index: + description: Resource index for shorthand searching. + type: string + url: + description: URL of the referenced resource. + type: string + level: + description: Number value for the current level object. + type: number + ability_score_bonuses: + description: 'Total number of ability score bonuses gained, added from previous levels.' + type: number + prof_bonus: + description: Proficiency bonus for this class at the specified level. + type: number + features: + description: List of features gained at this level. + type: array + items: + $ref: '#/components/schemas/APIReference' + spellcasting: + description: Summary of spells known at this level. + type: object + properties: + cantrips_known: + type: number + spells_known: + type: number + spell_slots_level_1: + type: number + spell_slots_level_2: + type: number + spell_slots_level_3: + type: number + spell_slots_level_4: + type: number + spell_slots_level_5: + type: number + spell_slots_level_6: + type: number + spell_slots_level_7: + type: number + spell_slots_level_8: + type: number + spell_slots_level_9: + type: number + classspecific: + description: Class specific information such as dice values for bard songs and number of warlock invocations. + additionalProperties: {} + SubclassLevelResource: + type: object + properties: + index: + type: string + url: + type: string + level: + type: number + features: + type: array + items: + $ref: '#/components/schemas/APIReference' + class: + $ref: '#/components/schemas/APIReference' + subclass: + $ref: '#/components/schemas/APIReference' + ClassLevel: + description: | + `ClassLevel` + type: object + properties: + index: + description: Resource index for shorthand searching. + type: string + url: + description: URL of the referenced resource. + type: string + level: + description: The number value for the current level object. + type: number + ability_score_bonuses: + description: 'Total number of ability score bonuses gained, added from previous levels.' + type: number + prof_bonus: + description: Proficiency bonus for this class at the specified level. + type: number + features: + description: Features automatically gained at this level. + type: array + items: + $ref: '#/components/schemas/APIReference' + spellcasting: + description: Summary of spells known at this level. + type: object + properties: + cantrips_known: + type: number + spells_known: + type: number + spell_slots_level_1: + type: number + spell_slots_level_2: + type: number + spell_slots_level_3: + type: number + spell_slots_level_4: + type: number + spell_slots_level_5: + type: number + spell_slots_level_6: + type: number + spell_slots_level_7: + type: number + spell_slots_level_8: + type: number + spell_slots_level_9: + type: number + class_specific: + description: Class specific information such as dice values for bard songs and number of warlock invocations. + anyOf: + - description: Barbarian Class Specific Features + type: object + properties: + rage_count: + type: number + rage_damage_bonus: + type: number + brutal_critical_dice: + type: number + - description: Bard Class Specific Features + type: object + properties: + bardic_inspiration_dice: + type: number + song_of_rest_die: + type: number + magical_secrets_max_5: + type: number + magical_secrets_max_7: + type: number + magical_secrets_max_9: + type: number + - description: Cleric Class Specific Features + type: object + properties: + channel_divinity_charges: + type: number + destroy_undead_cr: + type: number + - description: Druid Class Specific Features + type: object + properties: + wild_shape_max_cr: + type: number + wild_shape_swim: + type: boolean + wild_shape_fly: + type: boolean + - description: Fighter Class Specific Features + type: object + properties: + action_surges: + type: number + indomitable_uses: + type: number + extra_attacks: + type: number + - description: Monk Class Specific Features + type: object + properties: + ki_points: + type: number + unarmored_movement: + type: number + martial_arts: + type: object + properties: + dice_count: + type: number + dice_value: + type: number + - description: Paladin Class Specific Features + type: object + properties: + aura_range: + type: number + - description: Bard Ranger Specific Features + type: object + properties: + favored_enemies: + type: number + favored_terrain: + type: number + - description: Bard Rogue Specific Features + type: object + properties: + sneak_attack: + type: object + properties: + dice_count: + type: number + dice_value: + type: number + - description: Bard Sorcerer Specific Features + type: object + properties: + sorcery_points: + type: number + metamagic_known: + type: number + creating_spell_slots: + type: array + items: + type: object + properties: + spell_slot_level: + type: number + sorcery_point_cost: + type: number + - description: Bard Warlock Specific Features + type: object + properties: + invocations_known: + type: number + mystic_arcanum_level_6: + type: number + mystic_arcanum_level_7: + type: number + mystic_arcanum_level_8: + type: number + mystic_arcanum_level_9: + type: number + - description: Wizard Class Specific Features + type: object + properties: + arcane_recover_levels: + type: number + Feature: + description: | + `Feature` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + level: + description: The level this feature is gained. + type: number + class: + $ref: '#/components/schemas/APIReference' + subclass: + $ref: '#/components/schemas/APIReference' + parent: + $ref: '#/components/schemas/APIReference' + prerequisites: + description: The prerequisites for this feature. + type: array + items: + anyOf: + - type: object + properties: + type: + type: string + level: + type: number + - type: object + properties: + type: + type: string + feature: + type: string + - type: object + properties: + type: + type: string + spell: + type: string + example: + - type: level + level: 3 + - type: feature + feature: martial-archetype + - type: spell + spell: shield + feature_specific: + description: Information specific to this feature. + additionalProperties: true + Race: + description: | + `Race` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + speed: + description: Base move speed for this race (in feet per round). + type: number + ability_bonuses: + description: Racial bonuses to ability scores. + type: array + items: + $ref: '#/components/schemas/AbilityBonus' + alignment: + description: Flavor description of likely alignments this race takes. + type: string + age: + description: Flavor description of possible ages for this race. + type: string + size: + description: Size class of this race. + type: string + size_description: + description: Flavor description of height and weight for this race. + type: string + starting_proficiencies: + description: Starting proficiencies for all new characters of this race. + type: array + items: + $ref: '#/components/schemas/APIReference' + starting_proficiency_options: + description: Starting proficiency options for all new characters of this race. + $ref: '#/components/schemas/Choice' + languages: + description: Starting languages for all new characters of this race. + type: array + items: + $ref: '#/components/schemas/APIReference' + language_desc: + description: Flavor description of the languages this race knows. + type: string + traits: + description: Racial traits that provide benefits to its members. + type: array + items: + $ref: '#/components/schemas/APIReference' + subraces: + description: All possible subraces that this race includes. + type: array + items: + $ref: '#/components/schemas/APIReference' + AbilityBonus: + type: object + properties: + bonus: + description: Bonus amount for this ability score. + type: number + ability_score: + $ref: '#/components/schemas/APIReference' + Spell: + description: | + `Spell` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + higher_level: + description: List of descriptions for casting the spell at higher levels. + type: array + items: + type: string + range: + description: 'Range of the spell, usually expressed in feet.' + type: string + components: + description: | + List of shorthand for required components of the spell. + V: verbal + S: somatic + M: material + type: array + items: + type: string + enum: + - V + - S + - M + material: + description: Material component for the spell to be cast. + type: string + area_of_effect: + $ref: '#/components/schemas/AreaOfEffect' + ritual: + description: Determines if a spell can be cast in a 10-min(in-game) ritual. + type: boolean + duration: + description: How long the spell effect lasts. + type: string + concentration: + description: Determines if a spell needs concentration to persist. + type: boolean + casting_time: + description: How long it takes for the spell to activate. + type: string + level: + description: Level of the spell. + type: number + attack_type: + description: Attack type of the spell. + type: string + damage: + oneOf: + - $ref: '#/components/schemas/DamageAtCharacterLevel' + - $ref: '#/components/schemas/DamageAtSlotLevel' + school: + description: Magic school this spell belongs to. + $ref: '#/components/schemas/APIReference' + classes: + description: List of classes that are able to learn the spell. + type: array + items: + $ref: '#/components/schemas/APIReference' + subclasses: + description: List of subclasses that have access to the spell. + type: array + items: + $ref: '#/components/schemas/APIReference' + Subrace: + description: | + `Subrace` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + desc: + description: Description of the subrace. + type: string + race: + description: Parent race for the subrace. + allOf: + - $ref: '#/components/schemas/APIReference' + ability_bonuses: + description: Additional ability bonuses for the subrace. + type: array + items: + $ref: '#/components/schemas/AbilityBonus' + starting_proficiencies: + description: Starting proficiencies for all new characters of the subrace. + type: array + items: + $ref: '#/components/schemas/APIReference' + languages: + description: Starting languages for all new characters of the subrace. + type: array + items: + $ref: '#/components/schemas/APIReference' + language_options: + description: Starting languages to choose from for the subrace. + $ref: '#/components/schemas/Choice' + racial_traits: + description: List of traits that for the subrace. + type: array + items: + $ref: '#/components/schemas/APIReference' + Trait: + description: | + `Trait` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - type: object + properties: + races: + description: List of `Races` that have access to the trait. + type: array + items: + $ref: '#/components/schemas/APIReference' + subraces: + description: List of `Subraces` that have access to the trait. + type: array + items: + $ref: '#/components/schemas/APIReference' + proficiencies: + description: List of `Proficiencies` this trait grants. + type: array + items: + $ref: '#/components/schemas/APIReference' + proficiency_choices: + $ref: '#/components/schemas/Choice' + language_options: + $ref: '#/components/schemas/Choice' + trait_specific: + description: Information specific to this trait + oneOf: + - $ref: '#/components/schemas/Choice' + - $ref: '#/components/schemas/Choice' + - type: object + properties: + damage-type: + description: A damage type associated with this trait. + allOf: + - $ref: '#/components/schemas/APIReference' + breath-weapon: + description: The breath weapon action associated with a draconic ancestry. + type: object + properties: + name: + type: string + desc: + type: string + area_of_effect: + $ref: '#/components/schemas/AreaOfEffect' + damage: + type: object + properties: + damage_at_character_level: + type: object + additionalProperties: + type: string + damage_type: + allOf: + - $ref: '#/components/schemas/APIReference' + dc: + $ref: '#/components/schemas/DC' + usage: + description: Description of the usage constraints of this action. + type: object + properties: + times: + type: number + type: + type: string + WeaponProperty: + description: WeaponProperty + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + Rule: + description: | + `Rule` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + desc: + description: Description of the rule. + type: string + subsections: + description: List of sections for each subheading underneath the rule in the SRD. + type: array + items: + $ref: '#/components/schemas/APIReference' + RuleSection: + description: | + `RuleSection` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + desc: + description: Description of the rule. + type: string + Monster: + description: | + `Monster` + allOf: + - $ref: '#/components/schemas/APIReference' + - $ref: '#/components/schemas/ResourceDescription' + - $ref: '#/components/schemas/MonsterAbility' + - type: object + properties: + image: + description: The image url of the monster. + type: string + size: + description: The size of the monster ranging from Tiny to Gargantuan." + type: string + enum: + - Tiny + - Small + - Medium + - Large + - Huge + - Gargantuan + type: + description: The type of monster. + type: string + subtype: + description: The sub-category of a monster used for classification of monsters." + type: string + alignment: + description: A creature's general moral and personal attitudes. + type: string + armor_class: + description: The difficulty for a player to successfully deal damage to a monster. + type: array + items: + $ref: '#/components/schemas/MonsterArmorClass' + hit_points: + description: The hit points of a monster determine how much damage it is able to take before it can be defeated. + type: number + hit_dice: + description: 'The hit die of a monster can be used to make a version of the same monster whose hit points are determined by the roll of the die. For example: A monster with 2d6 would have its hit points determine by rolling a 6 sided die twice.' + type: string + hit_points_roll: + description: 'The roll for determining a monster''s hit points, which consists of the hit dice (e.g. 18d10) and the modifier determined by its Constitution (e.g. +36). For example, 18d10+36' + type: string + actions: + description: A list of actions that are available to the monster to take during combat. + type: array + items: + $ref: '#/components/schemas/MonsterAction' + legendary_actions: + description: A list of legendary actions that are available to the monster to take during combat. + type: array + items: + $ref: '#/components/schemas/MonsterAction' + challenge_rating: + description: A monster's challenge rating is a guideline number that says when a monster becomes an appropriate challenge against the party's average level. For example. A group of 4 players with an average level of 4 would have an appropriate combat challenge against a monster with a challenge rating of 4 but a monster with a challenge rating of 8 against the same group of players would pose a significant threat. + type: number + minimum: 0 + maximum: 21 + proficiency_bonus: + description: 'A monster''s proficiency bonus is the number added to ability checks, saving throws and attack rolls in which the monster is proficient, and is linked to the monster''s challenge rating. This bonus has already been included in the monster''s stats where applicable.' + type: number + minimum: 2 + maximum: 9 + condition_immunities: + description: A list of conditions that a monster is immune to. + type: array + items: + $ref: '#/components/schemas/APIReference' + damage_immunities: + description: A list of damage types that a monster will take double damage from. + type: array + items: + type: string + damage_resistances: + description: A list of damage types that a monster will take half damage from. + type: array + items: + type: string + damage_vulnerabilities: + description: A list of damage types that a monster will take double damage from. + type: array + items: + type: string + forms: + description: List of other related monster entries that are of the same form. Only applicable to Lycanthropes that have multiple forms. + type: array + items: + $ref: '#/components/schemas/APIReference' + languages: + description: The languages a monster is able to speak. + type: string + proficiencies: + description: A list of proficiencies of a monster. + type: array + items: + $ref: '#/components/schemas/MonsterProficiency' + reactions: + description: A list of reactions that is available to the monster to take during combat. + type: array + items: + $ref: '#/components/schemas/MonsterAction' + senses: + description: Monsters typically have a passive perception but they might also have other senses to detect players. + allOf: + - $ref: '#/components/schemas/MonsterSense' + special_abilities: + description: A list of the monster's special abilities. + type: array + items: + $ref: '#/components/schemas/MonsterSpecialAbility' + speed: + description: Speed for a monster determines how fast it can move per turn. + type: object + properties: + walk: + description: 'All creatures have a walking speed, simply called the monster’s speed. Creatures that have no form of ground-based locomotion have a walking speed of 0 feet.' + type: string + burrow: + description: 'A monster that has a burrowing speed can use that speed to move through sand, earth, mud, or ice. A monster can’t burrow through solid rock unless it has a special trait that allows it to do so.' + type: string + climb: + description: A monster that has a climbing speed can use all or part of its movement to move on vertical surfaces. The monster doesn’t need to spend extra movement to climb. + type: string + fly: + description: A monster that has a flying speed can use all or part of its movement to fly. + type: string + swim: + description: A monster that has a swimming speed doesn’t need to spend extra movement to swim. + type: string + xp: + description: The number of experience points (XP) a monster is worth is based on its challenge rating. + type: number + MonsterAbility: + description: | + `Monster Ability` + type: object + properties: + charisma: + description: A monster's ability to charm or intimidate a player. + type: number + constitution: + description: How sturdy a monster is." + type: number + dexterity: + description: The monster's ability for swift movement or stealth + type: number + intelligence: + description: The monster's ability to outsmart a player. + type: number + strength: + description: How hard a monster can hit a player. + type: number + wisdom: + description: A monster's ability to ascertain the player's plan. + type: number + MonsterAction: + description: Action available to a `Monster` in addition to the standard creature actions. + type: object + properties: + name: + type: string + desc: + type: string + action_options: + $ref: '#/components/schemas/Choice' + actions: + type: array + items: + $ref: '#/components/schemas/MonsterMultiAttackAction' + options: + $ref: '#/components/schemas/Choice' + multiattack_type: + type: string + attack_bonus: + type: number + dc: + $ref: '#/components/schemas/DC' + attacks: + type: array + items: + $ref: '#/components/schemas/MonsterAttack' + damage: + type: array + items: + $ref: '#/components/schemas/Damage' + MonsterArmorClass: + description: The armor class of a monster. + type: object + oneOf: + - type: object + properties: + type: + type: string + enum: + - dex + value: + type: number + desc: + type: string + - type: object + properties: + type: + type: string + enum: + - natural + value: + type: number + desc: + type: string + - type: object + properties: + type: + type: string + enum: + - armor + value: + type: number + armor: + type: array + items: + $ref: '#/components/schemas/APIReference' + desc: + type: string + - type: object + properties: + type: + type: string + enum: + - spell + value: + type: number + spell: + $ref: '#/components/schemas/APIReference' + desc: + type: string + - type: object + properties: + type: + type: string + enum: + - condition + value: + type: number + condition: + $ref: '#/components/schemas/APIReference' + desc: + type: string + MonsterAttack: + type: object + properties: + name: + type: string + dc: + $ref: '#/components/schemas/DC' + damage: + $ref: '#/components/schemas/Damage' + MonsterMultiAttackAction: + type: object + properties: + action_name: + type: string + count: + type: number + type: + type: string + enum: + - melee + - ranged + - ability + - magic + MonsterProficiency: + type: object + properties: + value: + type: number + proficiency: + $ref: '#/components/schemas/APIReference' + MonsterSense: + type: object + properties: + passive_perception: + description: The monster's passive perception (wisdom) score. + type: number + blindsight: + description: 'A monster with blindsight can perceive its surroundings without relying on sight, within a specific radius.' + type: string + darkvision: + description: A monster with darkvision can see in the dark within a specific radius. + type: string + tremorsense: + description: 'A monster with tremorsense can detect and pinpoint the origin of vibrations within a specific radius, provided that the monster and the source of the vibrations are in contact with the same ground or substance.' + type: string + truesight: + description: 'A monster with truesight can, out to a specific range, see in normal and magical darkness, see invisible creatures and objects, automatically detect visual illusions and succeed on saving throws against them, and perceive the original form of a shapechanger or a creature that is transformed by magic. Furthermore, the monster can see into the Ethereal Plane within the same range.' + type: string + MonsterSpecialAbility: + type: object + properties: + name: + type: string + desc: + type: string + attack_bonus: + type: number + damage: + $ref: '#/components/schemas/Damage' + dc: + $ref: '#/components/schemas/DC' + spellcasting: + $ref: '#/components/schemas/MonsterSpellcasting' + usage: + $ref: '#/components/schemas/MonsterUsage' + MonsterSpell: + type: object + properties: + name: + type: string + level: + type: number + url: + type: string + usage: + $ref: '#/components/schemas/MonsterUsage' + MonsterSpellcasting: + type: object + properties: + ability: + $ref: '#/components/schemas/APIReference' + dc: + type: number + modifier: + type: number + components_required: + type: array + items: + type: string + school: + type: string + slots: + type: object + additionalProperties: + type: number + spells: + type: array + items: + $ref: '#/components/schemas/MonsterSpell' + MonsterUsage: + type: object + properties: + type: + type: string + enum: + - at will + - per day + - recharge after rest + - recharge on roll + rest_types: + type: array + items: + type: string + times: + type: number + SpellPrerequisite: + description: | + `SpellPrerequisite` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + type: + description: The type of prerequisite. + type: string + error-response: + type: object + properties: + error: + type: string + required: + - error + DC: + description: | + `DC` + type: object + properties: + dc_type: + $ref: '#/components/schemas/APIReference' + dc_value: + description: Value to beat + type: number + success_type: + description: 'Result of a successful save. Can be \"none\", \"half\", or \"other\"' + type: string + OptionSet: + description: | + `Option Set` + oneOf: + - type: object + properties: + option_set_type: + description: Type of option set; determines other attributes. + type: string + options_array: + description: Array of options to choose from. + type: array + items: + $ref: '#/components/schemas/Option' + - type: object + properties: + option_set_type: + description: Type of option set; determines other attributes. + type: string + equipment_category: + $ref: '#/components/schemas/APIReference' + - type: object + properties: + option_set_type: + description: Type of option set; determines other attributes. + type: string + resource_list: + description: A reference (by URL) to a collection in the database. + type: string + Option: + description: | + `Option` + oneOf: + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + item: + $ref: '#/components/schemas/APIReference' + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + action_name: + description: The name of the action. + type: string + count: + description: The number of times this action can be repeated if chosen. + type: number + type: + description: 'For attack options that can be melee, ranged, abilities, or thrown.' + type: string + enum: + - melee + - ranged + - ability + - magic + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + items: + type: array + items: + $ref: '#/components/schemas/Option' + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + choice: + $ref: '#/components/schemas/Choice' + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + string: + description: The string. + type: string + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + desc: + description: A description of the ideal. + type: string + alignments: + description: A list of alignments of those who might follow the ideal. + type: array + items: + $ref: '#/components/schemas/APIReference' + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + count: + description: Count + type: number + of: + $ref: '#/components/schemas/APIReference' + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + ability_score: + $ref: '#/components/schemas/APIReference' + minimum_score: + description: The minimum score required to satisfy the prerequisite. + type: number + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + ability_score: + $ref: '#/components/schemas/APIReference' + bonus: + description: The bonus being applied to the ability score + type: number + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + name: + description: Name of the breath + type: string + dc: + $ref: '#/components/schemas/DC' + damage: + description: 'Damage dealt by the breath attack, if any.' + type: array + items: + $ref: '#/components/schemas/Damage' + - type: object + properties: + option_type: + description: Type of option; determines other attributes. + type: string + damage_type: + $ref: '#/components/schemas/APIReference' + damage_dice: + description: Damage expressed in dice (e.g. "13d6"). + type: string + notes: + description: Information regarding the damage. + type: string + ClassLevelSpell: + description: | + `ClassLevelSpell` + allOf: + - $ref: '#/components/schemas/APIReference' + - type: object + properties: + level: + type: number + description: The level of the spell slot used to cast the spell. + ClassSpellList: + description: | + `ClassSpellList` + type: object + properties: + count: + description: Total number of resources available. + type: number + results: + type: array + items: + $ref: '#/components/schemas/ClassLevelSpell' diff --git a/src/swagger/paths/classes.yml b/src/swagger/paths/classes.yml index 3d2f7eea..d756ad06 100644 --- a/src/swagger/paths/classes.yml +++ b/src/swagger/paths/classes.yml @@ -201,7 +201,7 @@ class-spells-path: content: application/json: schema: - $ref: '../schemas/combined.yml#/APIReferenceList' + $ref: '../schemas/combined.yml#/ClassSpellList' example: count: 2 results: diff --git a/src/swagger/schemas/classes.yml b/src/swagger/schemas/classes.yml index 02da5cc4..bd000228 100644 --- a/src/swagger/schemas/classes.yml +++ b/src/swagger/schemas/classes.yml @@ -250,3 +250,26 @@ class-level-model: - $ref: '#/cs-sorcerer' - $ref: '#/cs-warlock' - $ref: '#/cs-wizard' +class-level-spell-model: + description: | + `ClassLevelSpell` + allOf: + - $ref: './combined.yml#/APIReference' + - type: object + properties: + level: + type: number + description: 'The level of the spell slot used to cast the spell.' + +class-spell-list-model: + description: | + `ClassSpellList` + type: object + properties: + count: + description: 'Total number of resources available.' + type: number + results: + type: array + items: + $ref: '#/class-level-spell-model' diff --git a/src/swagger/schemas/combined.yml b/src/swagger/schemas/combined.yml index 08006350..797405a7 100644 --- a/src/swagger/schemas/combined.yml +++ b/src/swagger/schemas/combined.yml @@ -118,3 +118,7 @@ OptionSet: $ref: './common.yml#/option-set-model' Option: $ref: './common.yml#/option-model' +ClassLevelSpell: + $ref: './classes.yml#/class-level-spell-model' +ClassSpellList: + $ref: './classes.yml#/class-spell-list-model' diff --git a/src/swagger/schemas/monsters.yml b/src/swagger/schemas/monsters.yml index d13363dc..0ef893b3 100644 --- a/src/swagger/schemas/monsters.yml +++ b/src/swagger/schemas/monsters.yml @@ -26,21 +26,9 @@ monster-model: subtype: description: The sub-category of a monster used for classification of monsters." type: string - alignments: + alignment: description: "A creature's general moral and personal attitudes." type: string - enum: - - chaotic neutral - - chaotic evil - - chaotic good - - lawful neutral - - lawful evil - - lawful good - - neutral - - neutral evil - - neutral good - - any alignment - - unaligned armor_class: description: 'The difficulty for a player to successfully deal damage to a monster.' type: array diff --git a/src/swagger/schemas/subclass.yml b/src/swagger/schemas/subclass.yml index 062d32d3..c9661f92 100644 --- a/src/swagger/schemas/subclass.yml +++ b/src/swagger/schemas/subclass.yml @@ -36,6 +36,7 @@ subclass-model: $ref: "./combined.yml#/SpellPrerequisite" spell: $ref: "./combined.yml#/APIReference" + subclass-level-resource-model: type: object properties: