Skip to main content
Glama

Embers: Tabletop RPG Toolkit

Create a vault character

vault_create_character

Create a new character in the user's vault. Requires name and ruleset. The vault server fills the per-ruleset sheet skeleton (the ruleset's attributes, skills, defense scaffolding, and the rest) for any sections the caller omits — a minimal { name, ruleset } body produces the same shape the web and iOS clients create. The passthrough schema accepts richer structure when you want to set sections inline at create time. Set type: "monster" (lowercase) to mark a monster. The new character is owned by the calling user. Note: characters can be linked to active play campaigns; modify them with care if so.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
coreNo
deadNo
nameYesCharacter name. Required.
typeNoCharacter type. Free-form per ruleset. Set to 'monster' (lowercase) to mark an authored monster; vault's character list endpoint filters that value out of the default catalog view.
imageNo
itemsNo
notesNo
rulesNo
speedNo
activeNo
skillsNo
spellsNo
stressNo
actionsNo
aspectsNo
defenseNo
offenseNo
rulesetYesRuleset code, from list_rulesets (the codes this account can use). Required. Restricted rulesets require an entitlement grant on the account — vault answers 403 for ungranted or unknown codes.
settingsNo
attributesNo
trackablesNo
descriptionNo
personalityNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
_idNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / offense / properties / spellCasting / properties / bonuses
      Added value: +{
      +  "description": "The character's Misc bonuses on the spell / feature attack bonus and save DC (the sheet's Spellcasting section). The array is written whole: send every row to keep.",
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "bonus": {
      +        "description": "Flat bonus the row adds.",
      +        "type": "number"
      +      },
      +      "description": {
      +        "description": "What the bonus is (an item, a feature, a house rule).",
      +        "type": "string"
      +      },
      +      "saveDc": {
      +        "description": "Adds to the spell / feature save DC. Defaults to false.",
      +        "type": "boolean"
      +      },
      +      "toHit": {
      +        "description": "Adds to the spell / feature attack bonus. Defaults to true.",
      +        "type": "boolean"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed46 schema fields changed
    • changedInput schema / properties / actions / items / properties / actions / description
      Previous value: -"PF Playtest action-economy marker (F/1/2/3/R)."New value: +"Action-cost marker, for rulesets whose actions carry one; the value is the source text."
    • changedInput schema / properties / actions / items / properties / attack / properties / attribute / description
      Previous value: -"Ability driving the to-hit roll (e.g. 'strength', 'charisma' for spell attacks)."New value: +"Ability driving the to-hit roll."
    • changedInput schema / properties / actions / items / properties / rof / description
      Previous value: -"Savage Worlds Rate of Fire."New value: +"Rate of fire, for rulesets whose actions carry one."
    • changedInput schema / properties / actions / items / properties / type / description
      Previous value: -"Action type. 5e24 uses 'Melee' / 'Range' / 'Special' / 'Reaction' / 'Legendary' / 'Bonus'."New value: +"Action type, as the ruleset's sheet names it."
    • changedInput schema / properties / aspects / items / properties / kind / description
      Previous value: -"One of 'high concept', 'trouble', 'character', 'consequence'."New value: +"The aspect's kind. The values are the ones the ruleset's sheet template uses; read a character of that ruleset (vault_get_character) to see them."
    • changedInput schema / properties / aspects / items / properties / shifts / description
      Previous value: -"Consequence/condition slots only: harm absorbed. Fate: 2 Mild, 4 Moderate, 6 Severe, 8 Extreme (Fate Accelerated omits Extreme). Demon Hunters conditions: 5 Mild, 10 Moderate, 15 Severe."New value: +"Consequence/condition slots only: the harm the slot absorbs, as the ruleset's sheet template sets it per slot."
    • changedInput schema / properties / attributes / items / properties / misc / description
      Previous value: -"Misc bonus on the save (5e/5e24). Used for high-PB monster compensation."New value: +"Misc bonus on the save. The monster authoring guide covers when a monster uses it."
    • changedInput schema / properties / attributes / items / properties / name / description
      Previous value: -"Ability name: strength / dexterity / constitution / intelligence / wisdom / charisma. Lowercase."New value: +"Ability id, lowercase (a value from the abilities list the typed tools' schemas carry)."
    • changedInput schema / properties / attributes / items / properties / proficient / description
      Previous value: -"Save proficiency flag (5e/5e24). When true, PB is added to the save."New value: +"Save proficiency flag. The sheet applies it to the save total."
    • changedInput schema / properties / attributes / items / properties / score / description
      Previous value: -"Raw ability score (e.g. 17). Modifier is derived by the sheet."New value: +"Raw ability score. Modifier is derived by the sheet."
    • changedInput schema / properties / core / properties / race / description
      Previous value: -"Creature type for monsters (e.g. 'Elemental', 'Humanoid', 'Dragon (Chromatic)'); race for PCs."New value: +"Creature type for monsters (source text); race for PCs."
    • changedInput schema / properties / core / properties / refresh / description
      Previous value: -"Session-start resource: fate points (Fate — Refresh) or faith dice (Demon Hunters — Devotion). The total the character resets to at the start of a session."New value: +"Session-start resource: the total the character resets to at the start of a session. The sheet template of the character's ruleset labels it."
    • changedInput schema / properties / core / properties / size / description
      Previous value: -"Creature size. Exact source text including 'or' for variable sizes ('Medium or Small')."New value: +"Creature size. Exact source text including 'or' for variable sizes ('X or Y')."
    • changedInput schema / properties / defense / properties / armorClass / description
      Previous value: -"Layered AC rows the sheet sums. IMPORTANT (5e24): when the character's `settings.autoPassiveBonuses` is true — the default for new 5e24 characters — the `armor` and `shield` rows are DERIVED from equipped items and recomputed on every sheet load, so writing them here gets overwritten. Change AC by setting `equipped: true/false` on the character's armor/shield items instead. When the toggle is false (and on all other rulesets), these rows are manually authored and writing them here is correct. `magic` and `misc` are manual in both modes. Check the toggle with vault_get_character before writing."New value: +"Layered AC rows the sheet sums. IMPORTANT: when the character's `settings.autoPassiveBonuses` is true — the default for new characters in rulesets with sheet automation — the `armor` and `shield` rows are DERIVED from equipped items and recomputed on every sheet load, so writing them here gets overwritten. Change AC by setting `equipped: true/false` on the character's armor/shield items instead. When the toggle is false (and on rulesets without sheet automation), these rows are manually authored and writing them here is correct. `magic` and `misc` are manual in both modes. Check the toggle with vault_get_character before writing."
    • changedInput schema / properties / defense / properties / armorClass / properties / armor / properties / bonus / description
      Previous value: -"Base AC value the sheet adds DEX to. See the 5e24 monster guide Rule 1 for the math."New value: +"Base AC value the sheet builds the total from. The monster authoring guide's Rule 1 gives the math."
    • changedInput schema / properties / defense / properties / armorClass / properties / armor / properties / description / description
      Previous value: -"Armor name ('Natural Armor', 'Chain Shirt') or null when AC derives from DEX only."New value: +"Armor name, source text, or null when no armor applies."
    • changedInput schema / properties / defense / properties / armorClass / properties / armor / properties / heavy / description
      Previous value: -"True suppresses DEX contribution entirely (heavy armor)."New value: +"True for heavy armor; the engine applies that armor weight's rule to the total."
    • changedInput schema / properties / defense / properties / armorClass / properties / armor / properties / medium / description
      Previous value: -"True caps DEX contribution to +2 (medium armor)."New value: +"True for medium armor; the engine applies that armor weight's rule to the total."
    • changedInput schema / properties / defense / properties / exhaustion / description
      Previous value: -"5e24 Exhaustion level (0-6). Absent = 0 (not exhausted). Each level is -2 to d20 Tests and -5 ft Speed; level 6 = death. A Long Rest via the vault rest control reduces it by 1."New value: +"Exhaustion level, within the schema's range. Absent = not exhausted. The engine applies its effects and reduces it on a rest taken through the vault rest control."
    • changedInput schema / properties / defense / properties / hitDice / properties / current / description
      Previous value: -"Unspent hit dice count. When `pools` is present (5e24 class characters), this is the derived sum of pool currents — keep it consistent with pools on write."New value: +"Unspent hit dice count. When `pools` is present, this is the derived sum of pool currents — keep it consistent with pools on write."
    • changedInput schema / properties / defense / properties / hitDice / properties / dice / description
      Previous value: -"Without `pools` (monsters, non-5e24): per-die expression, NOT the multiplied total — size-mapped Tiny d4 / Small d6 / Medium d8 / Large d10 / Huge d12 / Gargantuan d20, see monster guide Rule 20. When `pools` is present (5e24 class characters): the derived compound string ('5d10 + 5d6') — keep it consistent with pools on write."New value: +"Without `pools` (monsters, and sheets without pools): one die expression ('1dX'), NOT the multiplied total; the monster guide's Rule 20 gives a monster's die. When `pools` is present: the derived compound string, one 'NdX' term per pool joined by ' + ' — keep it consistent with pools on write."
    • changedInput schema / properties / defense / properties / hitDice / properties / pools / description
      Previous value: -"5e24 per-die-size Hit Dice pools — the AUTHORITATIVE representation (one entry per die size a multiclass character has). Maintained by creation, level-up, and a one-shot backfill; player edits win. The server does NOT re-derive the legacy fields on write, so when writing hit dice for a character with pools, write pools AND the legacy current/dice consistently (current = sum of pool currents; dice = compound string)."New value: +"Per-die-size Hit Dice pools, present on class characters the creation and level-up tools maintain — the AUTHORITATIVE representation (one entry per die size a multiclass character has). Maintained by creation, level-up, and a one-shot backfill; player edits win. The server does NOT re-derive the legacy fields on write, so when writing hit dice for a character with pools, write pools AND the legacy current/dice consistently (current = sum of pool currents; dice = compound string)."
    • changedInput schema / properties / defense / properties / hitDice / properties / pools / items / properties / dice / description
      Previous value: -"Die size of this pool, e.g. 'd10'."New value: +"Die size of this pool."
    • changedInput schema / properties / items / items / properties / sourceSpell / description
      Previous value: -"Auto-managed. Link to the spell that manufactured this companion armor item (e.g. Mage Armor, which the vault sheet offers as an equippable Light armor). The sheet sets and maintains it; if it's present on an item you're editing, preserve it verbatim, and never set, change, or invent it. Dropping it on a round-trip de-links the companion and leaves a duplicate item on the sheet."New value: +"Auto-managed. Link to the spell that manufactured this companion armor item (a spell the vault sheet offers as equippable armor). The sheet sets and maintains it; if it's present on an item you're editing, preserve it verbatim, and never set, change, or invent it. Dropping it on a round-trip de-links the companion and leaves a duplicate item on the sheet."
    • changedInput schema / properties / offense / properties / initiative / properties / attribute / description
      Previous value: -"Ability whose modifier drives initiative. Typically 'dexterity'."New value: +"Ability whose modifier drives initiative, lowercase."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / durationCount / description
      Previous value: -"Numeric count paired with durationUnit (e.g. count: 3, unit: 'round')."New value: +"Numeric count paired with durationUnit."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / range / description
      Previous value: -"Aura radius in feet for ally/any-audience bonuses (Aura of Protection's 10 ft.). Absent = no range filter."New value: +"Aura radius in feet for ally/any-audience bonuses. Absent = no range filter."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / armorCategories / description
      Previous value: -"For 'equipped' + slot:armor: armor category list (Light / Medium / Heavy). OR semantics — match any."New value: +"Armor categories to match, as the items' `armorCategory` values name them. OR semantics — match any."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / condition / description
      Previous value: -"For 'condition' predicates: the character-state condition to gate on (5e24 named conditions and ongoing-action states)."New value: +"For 'condition' predicates: the character-state condition to gate on (named conditions and ongoing-action states)."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / condition / enum
      Previous value: -[
      -  "blinded",
      -  "charmed",
      -  "dazed",
      -  "deafened",
      -  "exhaustion",
      -  "frightened",
      -  "grappled",
      -  "incapacitated",
      -  "invisible",
      -  "paralyzed",
      -  "petrified",
      -  "poisoned",
      -  "prone",
      -  "restrained",
      -  "stunned",
      -  "unconscious",
      -  "concentrating",
      -  "grappling",
      -  "dodging",
      -  "hiding",
      -  "raging"
      -]New value: +[
      +  "blinded",
      +  "charmed",
      +  "concentration",
      +  "deafened",
      +  "exhaustion",
      +  "frightened",
      +  "grappled",
      +  "incapacitated",
      +  "invisible",
      +  "paralyzed",
      +  "petrified",
      +  "poisoned",
      +  "prone",
      +  "restrained",
      +  "stunned",
      +  "unconscious",
      +  "dazed",
      +  "grappling",
      +  "dodging",
      +  "hiding",
      +  "raging"
      +]
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / equipSlot / description
      Previous value: -"Body slot the matched weapon must occupy. mainHand / offHand. Resolved via getRequiredSlots so two-handed grips occupy both."New value: +"Body slot the matched weapon must occupy (one of the schema's enum)."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / slot / description
      Previous value: -"For 'equipped' predicates: the body category to match (armor / shield / weapon)."New value: +"The equipped body category to match (one of the schema's enum)."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / type / description
      Previous value: -"Predicate type. 'equipped' = character-scoped (gates on what's equipped). 'attackingWeapon' = attack-scoped (gates on the current action's source weapon). 'condition' = gates on a character-state condition."New value: +"Predicate type (one of the schema's enum): what the predicate gates on."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / requires / items / properties / weaponProperties / description
      Previous value: -"For 'equipped' + slot:weapon OR 'attackingWeapon': weapon-property list. AND semantics — match all."New value: +"Weapon properties to match. AND semantics — match all."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / target / description
      Previous value: -"Stat the bonus contributes to (e.g. 'skills.Acrobatics.misc', 'attributes.strength.misc')."New value: +"Stat the bonus contributes to (e.g. 'skills.<skill>.misc', 'attributes.<ability>.misc')."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / trigger / description
      Previous value: -"Action-economy / cost shape of the bonus. passive / toggled / reaction / perRoll / resource / targetBound."New value: +"Action-economy / cost shape of the bonus."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / triggerEvent / description
      Previous value: -"Game-time event that fires the bonus (onHit / onDamage / startOfYourTurn / etc.). Absent = not event-driven (passive walker contributes whenever `requires` holds)."New value: +"Game-time event that fires the bonus (one of the schema's trigger events). Absent = not event-driven (passive walker contributes whenever `requires` holds)."
    • changedInput schema / properties / rules / items / properties / statBonuses / items / properties / valueType / enum
      Previous value: -[
      -  "fixed",
      -  "attribute",
      -  "proficiency",
      -  "level",
      -  "halfLevel",
      -  "dice",
      -  "byLevel",
      -  "attackAttribute"
      -]New value: +[
      +  "fixed",
      +  "attribute",
      +  "attackAttribute",
      +  "proficiency",
      +  "level",
      +  "halfLevel",
      +  "dice",
      +  "byLevel"
      +]
    • changedInput schema / properties / rules / items / properties / type / description
      Previous value: -"Rule type (Ability / Feat / Class / Background / etc.). Vault validates against its rulestype enum on save."New value: +"Rule type. Vault validates it on save."
    • changedInput schema / properties / ruleset / description
      Previous value: -"Ruleset code (e.g. '5th Edition', '5e24', 'PFRPG', 'Savage Worlds'). Required. Restricted rulesets require an entitlement grant on the account — vault answers 403 for ungranted or unknown codes. Check list_rulesets for the codes this account can use."New value: +"Ruleset code, from list_rulesets (the codes this account can use). Required. Restricted rulesets require an entitlement grant on the account — vault answers 403 for ungranted or unknown codes."
    • changedInput schema / properties / settings / properties / autoPassiveBonuses / description
      Previous value: -"When true, the per-character rules engine layer contributes statBonuses from rules / items / feats. On 5e24 it ALSO derives the armor/shield rows of defense.armorClass from equipped items, recomputed on every sheet load — manual writes to those rows do not stick while this is true. Monsters should set this to false."New value: +"When true, the per-character rules engine layer contributes statBonuses from rules / items / feats. On rulesets with sheet automation it ALSO derives the armor/shield rows of defense.armorClass from equipped items, recomputed on every sheet load — manual writes to those rows do not stick while this is true. Monsters should set this to false."
    • changedInput schema / properties / settings / properties / hiddenSections / description
      Previous value: -"Sheet-section keys the player chose to hide while the section is empty ('spells', 'abilities', 'feats', 'origin', 'actionCards', 'hindrances', 'edges', 'stunts', 'extras'). A section with content always renders regardless of this list — the preference means 'hide when empty', never 'hide my data'."New value: +"Keys of the character sheet's sections the player chose to hide while the section is empty. A section with content always renders regardless of this list — the preference means 'hide when empty', never 'hide my data'."
    • changedInput schema / properties / skills / items / properties / rating / description
      Previous value: -"Fate: ladder position, -2 (Terrible) to +8 (Legendary); also an FAE approach's rating. Demon Hunters: the trait's die size (4, 6, 8, 10, or 12), or 0 for an unrated Fringe discipline."New value: +"The rating, on the ruleset's own scale. The ruleset's sheet template sets it; read a character of that ruleset (vault_get_character) to see the values."
    • changedInput schema / properties / spells / items / properties / recovery / description
      Previous value: -"Per-rest recovery rows for a finite free-cast counter, stamped from the granting rule's freeCast.recovery whenever the counter is created or grown (creation build and level-up). The vault rest control refills the counter from these when the player declares a Short/Long rest. Absent = the counter doesn't refresh on rest."New value: +"Per-rest recovery rows for a finite free-cast counter, stamped from the granting rule's freeCast.recovery whenever the counter is created or grown (creation build and level-up). The vault rest control refills the counter from these when the player declares the rest a row's `on` field names. Absent = the counter doesn't refresh on rest."
    • changedInput schema / properties / stress / items / properties / name / description
      Previous value: -"Track name — 'Physical Stress' / 'Mental Stress' in Fate Core, 'Stress' in Fate Accelerated."New value: +"Track name, as the ruleset's sheet template names its tracks."
    • changedInput schema / properties / trackables / items / properties / slotLevel / description
      Previous value: -"Spell-slot level of this pool (Pact Magic: one pool whose level rises with character level), stamped at build from the granting rule's uses[].slotLevel. The sheet shows it on the trackable row ('Level N'). Absent = an ordinary counter."New value: +"Spell-slot level of this pool, stamped at build from the granting rule's uses[].slotLevel. The sheet shows it on the trackable row ('Level N'). Absent = an ordinary counter."
  3. Changed26 schema fields changed
    • addedInput schema / $schema
      Added value: +"http://json-schema.org/draft-07/schema#"
    • addedInput schema / additionalProperties
      Added value: +{}
    • addedInput schema / properties / actions
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_item": {
      +        "description": "Optional back-reference to the Vault Item this action was built from.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "_rule": {
      +        "description": "Optional back-reference to the Vault Rule this action was built from.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "_spell": {
      +        "description": "Optional back-reference to the Vault Spell this action was built from.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "actions": {
      +        "description": "PF Playtest action-economy marker (F/1/2/3/R).",
      +        "type": "string"
      +      },
      +      "attack": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "attribute": {
      +            "description": "Ability driving the to-hit roll (e.g. 'strength', 'charisma' for spell attacks).",
      +            "type": "string"
      +          },
      +          "magic": {
      +            "type": "number"
      +          },
      +          "misc": {
      +            "type": "number"
      +          },
      +          "proficiency": {
      +            "type": "number"
      +          },
      +          "skill": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "damage": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "attribute": {
      +            "description": "Ability whose modifier is added to damage.",
      +            "type": "string"
      +          },
      +          "critical": {
      +            "type": "string"
      +          },
      +          "dice": {
      +            "description": "Base damage dice expression (e.g. '2d8'). Additional damage types live in `description` per Rule 11.",
      +            "type": "string"
      +          },
      +          "magic": {
      +            "type": "number"
      +          },
      +          "misc": {
      +            "type": "number"
      +          },
      +          "type": {
      +            "description": "Damage type ('piercing', 'fire', etc.). Source-exact, capitalize if the source does.",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "proficient": {
      +        "type": "boolean"
      +      },
      +      "range": {
      +        "type": "string"
      +      },
      +      "rof": {
      +        "description": "Savage Worlds Rate of Fire.",
      +        "type": "number"
      +      },
      +      "summary": {
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Action type. 5e24 uses 'Melee' / 'Range' / 'Special' / 'Reaction' / 'Legendary' / 'Bonus'.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / active
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / aspects
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "description": {
      +        "type": "string"
      +      },
      +      "kind": {
      +        "description": "One of 'high concept', 'trouble', 'character', 'consequence'.",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "The aspect's phrase. A consequence slot carries its cost while blank.",
      +        "type": "string"
      +      },
      +      "shifts": {
      +        "description": "Consequence/condition slots only: harm absorbed. Fate: 2 Mild, 4 Moderate, 6 Severe, 8 Extreme (Fate Accelerated omits Extreme). Demon Hunters conditions: 5 Mild, 10 Moderate, 15 Severe.",
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / attributes
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "misc": {
      +        "description": "Misc bonus on the save (5e/5e24). Used for high-PB monster compensation.",
      +        "type": "number"
      +      },
      +      "name": {
      +        "description": "Ability name: strength / dexterity / constitution / intelligence / wisdom / charisma. Lowercase.",
      +        "type": "string"
      +      },
      +      "proficient": {
      +        "description": "Save proficiency flag (5e/5e24). When true, PB is added to the save.",
      +        "type": "boolean"
      +      },
      +      "score": {
      +        "description": "Raw ability score (e.g. 17). Modifier is derived by the sheet.",
      +        "type": "number"
      +      },
      +      "temp": {
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / core
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "age": {
      +      "type": "string"
      +    },
      +    "alignment": {
      +      "type": "string"
      +    },
      +    "ancestry": {
      +      "type": "string"
      +    },
      +    "background": {
      +      "type": "string"
      +    },
      +    "baseAttackBonus": {
      +      "type": "number"
      +    },
      +    "charisma": {
      +      "type": "string"
      +    },
      +    "class": {
      +      "description": "Character class as free-form text. PCs use a Class rule via rules[]; this field is the display string.",
      +      "type": "string"
      +    },
      +    "cr": {
      +      "type": "string"
      +    },
      +    "deity": {
      +      "type": "string"
      +    },
      +    "experience": {
      +      "description": "Character-level XP (no commas). For monsters, the value from the CR→level XP table.",
      +      "type": "string"
      +    },
      +    "eyes": {
      +      "type": "string"
      +    },
      +    "gender": {
      +      "type": "string"
      +    },
      +    "hair": {
      +      "type": "string"
      +    },
      +    "height": {
      +      "type": "string"
      +    },
      +    "homeland": {
      +      "type": "string"
      +    },
      +    "languages": {
      +      "type": "string"
      +    },
      +    "proficiencies": {
      +      "type": "string"
      +    },
      +    "pronouns": {
      +      "description": "The character's pronouns as free-form text (e.g. 'she/her', 'they/them').",
      +      "type": "string"
      +    },
      +    "race": {
      +      "description": "Creature type for monsters (e.g. 'Elemental', 'Humanoid', 'Dragon (Chromatic)'); race for PCs.",
      +      "type": "string"
      +    },
      +    "refresh": {
      +      "description": "Session-start resource: fate points (Fate — Refresh) or faith dice (Demon Hunters — Devotion). The total the character resets to at the start of a session.",
      +      "type": "number"
      +    },
      +    "size": {
      +      "description": "Creature size. Exact source text including 'or' for variable sizes ('Medium or Small').",
      +      "type": "string"
      +    },
      +    "skin": {
      +      "type": "string"
      +    },
      +    "spellCastingAttribute": {
      +      "type": "string"
      +    },
      +    "weight": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / dead
      Added value: +{
      +  "type": "boolean"
      +}
    • addedInput schema / properties / defense
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "armorClass": {
      +      "additionalProperties": {},
      +      "description": "Layered AC rows the sheet sums. IMPORTANT (5e24): when the character's `settings.autoPassiveBonuses` is true — the default for new 5e24 characters — the `armor` and `shield` rows are DERIVED from equipped items and recomputed on every sheet load, so writing them here gets overwritten. Change AC by setting `equipped: true/false` on the character's armor/shield items instead. When the toggle is false (and on all other rulesets), these rows are manually authored and writing them here is correct. `magic` and `misc` are manual in both modes. Check the toggle with vault_get_character before writing.",
      +      "properties": {
      +        "armor": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "description": "Base AC value the sheet adds DEX to. See the 5e24 monster guide Rule 1 for the math.",
      +              "type": "number"
      +            },
      +            "checkPenalty": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "description": "Armor name ('Natural Armor', 'Chain Shirt') or null when AC derives from DEX only.",
      +              "type": "string"
      +            },
      +            "heavy": {
      +              "description": "True suppresses DEX contribution entirely (heavy armor).",
      +              "type": "boolean"
      +            },
      +            "maxDex": {
      +              "type": "number"
      +            },
      +            "medium": {
      +              "description": "True caps DEX contribution to +2 (medium armor).",
      +              "type": "boolean"
      +            },
      +            "proficiency": {
      +              "type": "number"
      +            },
      +            "speed": {
      +              "type": "string"
      +            },
      +            "speedPenalty": {
      +              "type": "string"
      +            },
      +            "spellFail": {
      +              "type": "string"
      +            },
      +            "touchBonus": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "arms": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "deflection": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "dodge": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "head": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "legs": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "magic": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "misc": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "natural": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "shield": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "bonus": {
      +              "type": "number"
      +            },
      +            "checkPenalty": {
      +              "type": "number"
      +            },
      +            "description": {
      +              "type": "string"
      +            },
      +            "maxDex": {
      +              "type": "number"
      +            },
      +            "proficiency": {
      +              "type": "number"
      +            },
      +            "raised": {
      +              "type": "boolean"
      +            },
      +            "spellFail": {
      +              "type": "number"
      +            },
      +            "touchBonus": {
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "damageReduction": {
      +      "type": "string"
      +    },
      +    "deathSaves": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "failures": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "successes": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "dying": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "current": {
      +          "type": "number"
      +        },
      +        "wounds": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "exhaustion": {
      +      "description": "5e24 Exhaustion level (0-6). Absent = 0 (not exhausted). Each level is -2 to d20 Tests and -5 ft Speed; level 6 = death. A Long Rest via the vault rest control reduces it by 1.",
      +      "maximum": 6,
      +      "minimum": 0,
      +      "type": "integer"
      +    },
      +    "health": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "fatigue": {
      +          "type": "number"
      +        },
      +        "incapacitated": {
      +          "type": "boolean"
      +        },
      +        "wounds": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "hitDice": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "current": {
      +          "description": "Unspent hit dice count. When `pools` is present (5e24 class characters), this is the derived sum of pool currents — keep it consistent with pools on write.",
      +          "type": "number"
      +        },
      +        "dice": {
      +          "description": "Without `pools` (monsters, non-5e24): per-die expression, NOT the multiplied total — size-mapped Tiny d4 / Small d6 / Medium d8 / Large d10 / Huge d12 / Gargantuan d20, see monster guide Rule 20. When `pools` is present (5e24 class characters): the derived compound string ('5d10 + 5d6') — keep it consistent with pools on write.",
      +          "type": "string"
      +        },
      +        "pools": {
      +          "description": "5e24 per-die-size Hit Dice pools — the AUTHORITATIVE representation (one entry per die size a multiclass character has). Maintained by creation, level-up, and a one-shot backfill; player edits win. The server does NOT re-derive the legacy fields on write, so when writing hit dice for a character with pools, write pools AND the legacy current/dice consistently (current = sum of pool currents; dice = compound string).",
      +          "items": {
      +            "additionalProperties": {},
      +            "properties": {
      +              "current": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "dice": {
      +                "description": "Die size of this pool, e.g. 'd10'.",
      +                "type": "string"
      +              },
      +              "maximum": {
      +                "maximum": 9007199254740991,
      +                "minimum": 0,
      +                "type": "integer"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "hitPoints": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "current": {
      +          "type": "number"
      +        },
      +        "maximum": {
      +          "type": "number"
      +        },
      +        "temp": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "parryBonus": {
      +      "type": "number"
      +    },
      +    "savingThrows": {
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "attribute": {
      +            "type": "string"
      +          },
      +          "base": {
      +            "type": "number"
      +          },
      +          "magic": {
      +            "type": "number"
      +          },
      +          "misc": {
      +            "type": "number"
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "proficiency": {
      +            "type": "number"
      +          },
      +          "temp": {
      +            "type": "number"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "spellResistance": {
      +      "type": "string"
      +    },
      +    "toughnessBonus": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / description
      Added value: +{
      +  "type": "string"
      +}
    • addedInput schema / properties / image
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "url": {
      +      "description": "Image URL hosted on Embers Images (or any addressable HTTPS URL).",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / items
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_ref": {
      +        "description": "Mongo `_id` reference (24-character hex string).",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "armorCategory": {
      +        "type": "string"
      +      },
      +      "armorClass": {
      +        "type": "number"
      +      },
      +      "carried": {
      +        "type": "boolean"
      +      },
      +      "cost": {
      +        "type": "number"
      +      },
      +      "damageDice": {
      +        "type": "string"
      +      },
      +      "damageType": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "detail": {
      +        "type": "string"
      +      },
      +      "equipSlot": {
      +        "type": "string"
      +      },
      +      "equipSlots": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "equipped": {
      +        "description": "Monsters: ALWAYS false. Never set equipped/equipSlot on a monster's items.",
      +        "type": "boolean"
      +      },
      +      "image": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "url": {
      +            "description": "Image URL hosted on Embers Images (or any addressable HTTPS URL).",
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "mastery": {
      +        "type": "string"
      +      },
      +      "maxDexModifier": {
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "properties": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "ammoType": {
      +              "type": "string"
      +            },
      +            "damage": {
      +              "type": "string"
      +            },
      +            "display": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "range": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "long": {
      +                  "type": "number"
      +                },
      +                "normal": {
      +                  "type": "number"
      +                }
      +              },
      +              "type": "object"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "quantity": {
      +        "type": "number"
      +      },
      +      "sourceSpell": {
      +        "description": "Auto-managed. Link to the spell that manufactured this companion armor item (e.g. Mage Armor, which the vault sheet offers as an equippable Light armor). The sheet sets and maintains it; if it's present on an item you're editing, preserve it verbatim, and never set, change, or invent it. Dropping it on a round-trip de-links the companion and leaves a duplicate item on the sheet.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "stealthDisadvantage": {
      +        "type": "boolean"
      +      },
      +      "stock": {
      +        "type": "boolean"
      +      },
      +      "strengthRequirement": {
      +        "type": "number"
      +      },
      +      "summary": {
      +        "type": "string"
      +      },
      +      "twoHandedGrip": {
      +        "type": "boolean"
      +      },
      +      "type": {
      +        "type": "string"
      +      },
      +      "weaponType": {
      +        "type": "string"
      +      },
      +      "weight": {
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / name
      Added value: +{
      +  "description": "Character name. Required.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / notes
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "description": {
      +        "description": "Note body. Free-form markdown.",
      +        "type": "string"
      +      },
      +      "name": {
      +        "description": "Note title. Used as the visible heading on the character sheet.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / offense
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "initiative": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "attribute": {
      +          "description": "Ability whose modifier drives initiative. Typically 'dexterity'.",
      +          "type": "string"
      +        },
      +        "misc": {
      +          "description": "Misc bonus added to initiative beyond the attribute modifier.",
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "perception": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "attribute": {
      +          "type": "string"
      +        },
      +        "misc": {
      +          "type": "number"
      +        },
      +        "proficiency": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "spellCasting": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "attribute": {
      +          "type": "string"
      +        },
      +        "misc": {
      +          "type": "number"
      +        },
      +        "proficiency": {
      +          "type": "number"
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / personality
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "bonds": {
      +      "type": "string"
      +    },
      +    "flaws": {
      +      "type": "string"
      +    },
      +    "ideals": {
      +      "type": "string"
      +    },
      +    "traits": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / rules
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_ref": {
      +        "description": "Master Rule ObjectId. Present when the snapshot points at a Vault Rule (PC catalog content); null on stock-monster-style inline rules.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "actions": {
      +        "type": "string"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "detail": {
      +        "type": "string"
      +      },
      +      "level": {
      +        "description": "Per-instance class level (this character's level in this class) — only meaningful on a Class snapshot. Stored and read directly, never derived; total character level stays XP-derived. Absent on non-Class snapshots.",
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "statBonuses": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "attribute": {
      +              "description": "For valueType: 'attribute' — which ability's modifier to use.",
      +              "type": "string"
      +            },
      +            "audience": {
      +              "description": "Who the bonus contributes to. Absent = self.",
      +              "enum": [
      +                "self",
      +                "ally",
      +                "any",
      +                "target",
      +                "enemy"
      +              ],
      +              "type": "string"
      +            },
      +            "dice": {
      +              "description": "For valueType: 'dice' — dice expression (e.g. '1d4').",
      +              "type": "string"
      +            },
      +            "durationCount": {
      +              "description": "Numeric count paired with durationUnit (e.g. count: 3, unit: 'round').",
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "durationUnit": {
      +              "description": "How long the bonus persists once fired. Only meaningful for event-driven bonuses.",
      +              "enum": [
      +                "instantaneous",
      +                "untilStartOfNextTurn",
      +                "untilEndOfNextTurn",
      +                "round",
      +                "minute",
      +                "hour",
      +                "untilShortRest",
      +                "untilLongRest"
      +              ],
      +              "type": "string"
      +            },
      +            "fixed": {
      +              "description": "For valueType: 'fixed' — the literal numeric contribution.",
      +              "type": "number"
      +            },
      +            "progression": {
      +              "description": "For valueType: 'byLevel' — per-level rows; walker picks the row with level <= current level.",
      +              "items": {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "dice": {
      +                    "type": "string"
      +                  },
      +                  "flat": {
      +                    "type": "number"
      +                  },
      +                  "level": {
      +                    "maximum": 20,
      +                    "minimum": 1,
      +                    "type": "integer"
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "range": {
      +              "description": "Aura radius in feet for ally/any-audience bonuses (Aura of Protection's 10 ft.). Absent = no range filter.",
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "requires": {
      +              "description": "Optional predicate list that gates this bonus. Absent / empty = always-on.",
      +              "items": {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "armorCategories": {
      +                    "description": "For 'equipped' + slot:armor: armor category list (Light / Medium / Heavy). OR semantics — match any.",
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  },
      +                  "condition": {
      +                    "description": "For 'condition' predicates: the character-state condition to gate on (5e24 named conditions and ongoing-action states).",
      +                    "enum": [
      +                      "blinded",
      +                      "charmed",
      +                      "dazed",
      +                      "deafened",
      +                      "exhaustion",
      +                      "frightened",
      +                      "grappled",
      +                      "incapacitated",
      +                      "invisible",
      +                      "paralyzed",
      +                      "petrified",
      +                      "poisoned",
      +                      "prone",
      +                      "restrained",
      +                      "stunned",
      +                      "unconscious",
      +                      "concentrating",
      +                      "grappling",
      +                      "dodging",
      +                      "hiding",
      +                      "raging"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "equipSlot": {
      +                    "description": "Body slot the matched weapon must occupy. mainHand / offHand. Resolved via getRequiredSlots so two-handed grips occupy both.",
      +                    "enum": [
      +                      "mainHand",
      +                      "offHand"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "negate": {
      +                    "description": "true inverts the predicate — 'while NOT matching' instead of 'while matching'.",
      +                    "type": "boolean"
      +                  },
      +                  "slot": {
      +                    "description": "For 'equipped' predicates: the body category to match (armor / shield / weapon).",
      +                    "enum": [
      +                      "armor",
      +                      "shield",
      +                      "weapon"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "type": {
      +                    "description": "Predicate type. 'equipped' = character-scoped (gates on what's equipped). 'attackingWeapon' = attack-scoped (gates on the current action's source weapon). 'condition' = gates on a character-state condition.",
      +                    "enum": [
      +                      "equipped",
      +                      "attackingWeapon",
      +                      "condition"
      +                    ],
      +                    "type": "string"
      +                  },
      +                  "weaponProperties": {
      +                    "description": "For 'equipped' + slot:weapon OR 'attackingWeapon': weapon-property list. AND semantics — match all.",
      +                    "items": {
      +                      "type": "string"
      +                    },
      +                    "type": "array"
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "requiresLogic": {
      +              "description": "How `requires` predicates compose. 'and' (default) = ALL must hold. 'or' = ANY one is sufficient.",
      +              "enum": [
      +                "and",
      +                "or"
      +              ],
      +              "type": "string"
      +            },
      +            "target": {
      +              "description": "Stat the bonus contributes to (e.g. 'skills.Acrobatics.misc', 'attributes.strength.misc').",
      +              "type": "string"
      +            },
      +            "trigger": {
      +              "description": "Action-economy / cost shape of the bonus. passive / toggled / reaction / perRoll / resource / targetBound.",
      +              "enum": [
      +                "passive",
      +                "toggled",
      +                "reaction",
      +                "perRoll",
      +                "resource",
      +                "targetBound"
      +              ],
      +              "type": "string"
      +            },
      +            "triggerEvent": {
      +              "description": "Game-time event that fires the bonus (onHit / onDamage / startOfYourTurn / etc.). Absent = not event-driven (passive walker contributes whenever `requires` holds).",
      +              "enum": [
      +                "onHit",
      +                "onMiss",
      +                "onDamage",
      +                "startOfYourTurn",
      +                "endOfYourTurn",
      +                "startOfTargetTurn",
      +                "endOfTargetTurn"
      +              ],
      +              "type": "string"
      +            },
      +            "types": {
      +              "description": "Damage type tags for damage.* targets. No-op for non-damage targets.",
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "valueType": {
      +              "description": "How the contribution is computed. 'fixed' uses `fixed`; 'attribute' uses the mod of `attribute`; 'attackAttribute' uses the action's attack-roll ability (per-attack only); others scale by level/PB/dice.",
      +              "enum": [
      +                "fixed",
      +                "attribute",
      +                "proficiency",
      +                "level",
      +                "halfLevel",
      +                "dice",
      +                "byLevel",
      +                "attackAttribute"
      +              ],
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "stock": {
      +        "type": "boolean"
      +      },
      +      "summary": {
      +        "type": "string"
      +      },
      +      "type": {
      +        "description": "Rule type (Ability / Feat / Class / Background / etc.). Vault validates against its rulestype enum on save.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / ruleset
      Added value: +{
      +  "description": "Ruleset code (e.g. '5th Edition', '5e24', 'PFRPG', 'Savage Worlds'). Required. Restricted rulesets require an entitlement grant on the account — vault answers 403 for ungranted or unknown codes. Check list_rulesets for the codes this account can use.",
      +  "minLength": 1,
      +  "type": "string"
      +}
    • addedInput schema / properties / settings
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "autoPassiveBonuses": {
      +      "description": "When true, the per-character rules engine layer contributes statBonuses from rules / items / feats. On 5e24 it ALSO derives the armor/shield rows of defense.armorClass from equipped items, recomputed on every sheet load — manual writes to those rows do not stick while this is true. Monsters should set this to false.",
      +      "type": "boolean"
      +    },
      +    "hiddenSections": {
      +      "description": "Sheet-section keys the player chose to hide while the section is empty ('spells', 'abilities', 'feats', 'origin', 'actionCards', 'hindrances', 'edges', 'stunts', 'extras'). A section with content always renders regardless of this list — the preference means 'hide when empty', never 'hide my data'.",
      +      "items": {
      +        "maxLength": 64,
      +        "type": "string"
      +      },
      +      "maxItems": 20,
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / skills
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "attribute": {
      +        "type": "string"
      +      },
      +      "classSkill": {
      +        "type": "boolean"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "expertise": {
      +        "type": "boolean"
      +      },
      +      "misc": {
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "passiveMisc": {
      +        "type": "number"
      +      },
      +      "proficiency": {
      +        "type": "number"
      +      },
      +      "proficient": {
      +        "type": "boolean"
      +      },
      +      "ranks": {
      +        "type": "number"
      +      },
      +      "rating": {
      +        "description": "Fate: ladder position, -2 (Terrible) to +8 (Legendary); also an FAE approach's rating. Demon Hunters: the trait's die size (4, 6, 8, 10, or 12), or 0 for an unrated Fringe discipline.",
      +        "type": "number"
      +      },
      +      "score": {
      +        "type": "number"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / speed
      Added value: +{
      +  "additionalProperties": {},
      +  "properties": {
      +    "base": {
      +      "description": "Walking speed in feet.",
      +      "type": "number"
      +    },
      +    "burrow": {
      +      "type": "number"
      +    },
      +    "climb": {
      +      "type": "number"
      +    },
      +    "fly": {
      +      "type": "number"
      +    },
      +    "swim": {
      +      "type": "number"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / spells
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_ref": {
      +        "description": "Mongo `_id` reference (24-character hex string).",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "actions": {
      +        "type": "string"
      +      },
      +      "atWill": {
      +        "description": "Free-cast budget. true = the spell casts without a slot an unlimited number of times (rendered as an 'at will' badge, no use counter); a finite free cast uses maximum/current instead. Absent = an ordinary spell.",
      +        "type": "boolean"
      +      },
      +      "castingAbility": {
      +        "description": "Per-spell spellcasting-ability override (lowercase), stamped at build from the granting block's castingAbility / the player's pick. The sheet computes THIS spell's save DC / attack bonus from it. Absent = the spell uses the character-wide casting ability.",
      +        "enum": [
      +          "strength",
      +          "dexterity",
      +          "constitution",
      +          "intelligence",
      +          "wisdom",
      +          "charisma"
      +        ],
      +        "type": "string"
      +      },
      +      "current": {
      +        "type": "number"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "detail": {
      +        "type": "string"
      +      },
      +      "level": {
      +        "type": "number"
      +      },
      +      "maximum": {
      +        "type": "number"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "prepared": {
      +        "type": "boolean"
      +      },
      +      "rank": {
      +        "type": "string"
      +      },
      +      "recovery": {
      +        "description": "Per-rest recovery rows for a finite free-cast counter, stamped from the granting rule's freeCast.recovery whenever the counter is created or grown (creation build and level-up). The vault rest control refills the counter from these when the player declares a Short/Long rest. Absent = the counter doesn't refresh on rest.",
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "count": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "on": {
      +              "enum": [
      +                "Short",
      +                "Long"
      +              ],
      +              "type": "string"
      +            },
      +            "restoreAll": {
      +              "type": "boolean"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "school": {
      +        "type": "string"
      +      },
      +      "stock": {
      +        "type": "boolean"
      +      },
      +      "summary": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / stress
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "boxes": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "marked": {
      +              "type": "boolean"
      +            },
      +            "value": {
      +              "description": "Shifts this box absorbs. Stated per box, not implied by its position.",
      +              "type": "number"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "name": {
      +        "description": "Track name — 'Physical Stress' / 'Mental Stress' in Fate Core, 'Stress' in Fate Accelerated.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / trackables
      Added value: +{
      +  "items": {
      +    "additionalProperties": {},
      +    "properties": {
      +      "_rule": {
      +        "description": "Mongo `_id` reference (24-character hex string).",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "_spell": {
      +        "description": "The Spell this trackable is a free-cast budget for (a spell grant's `freeCast`). Present means 'N casts of this spell without a slot'; the sheet surfaces it on that spell. Absent on every other trackable.",
      +        "minLength": 1,
      +        "type": "string"
      +      },
      +      "current": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "description": {
      +        "type": "string"
      +      },
      +      "maximum": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "name": {
      +        "type": "string"
      +      },
      +      "recovery": {
      +        "items": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "count": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "on": {
      +              "enum": [
      +                "Short",
      +                "Long"
      +              ],
      +              "type": "string"
      +            },
      +            "restoreAll": {
      +              "type": "boolean"
      +            }
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "slotLevel": {
      +        "description": "Spell-slot level of this pool (Pact Magic: one pool whose level rises with character level), stamped at build from the granting rule's uses[].slotLevel. The sheet shows it on the trackable row ('Level N'). Absent = an ordinary counter.",
      +        "maximum": 9,
      +        "minimum": 1,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "description": "'number' (counter) or 'checkboxes' (filled boxes). Defaults to 'number'.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / type
      Added value: +{
      +  "description": "Character type. Free-form per ruleset. Set to 'monster' (lowercase) to mark an authored monster; vault's character list endpoint filters that value out of the default catalog view.",
      +  "type": "string"
      +}
    • addedInput schema / required
      Added value: +[
      +  "name",
      +  "ruleset"
      +]
  4. First observed

TDQS

Score is being calculated.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources