Skip to main content
Every Reactive Resume document is stored as one JSON object, described by a public JSON Schema. The same schema validates what the API and MCP server accept, what the JSON export produces and what the JSON import reads. Use it to validate files, generate types, get autocompletion in your editor or build integrations that exchange resumes without parsing PDFs.

Where to get it

The schema is served by every instance at /schema.json: It uses the JSON Schema draft 2020-12 dialect and is served as application/schema+json. Self-hosted instances serve the schema of the version they run, at their own address. MCP clients can read the same schema as the resource resume://_meta/schema.
This is Reactive Resume’s own format, not the community JSON Resume format. Reactive Resume can import JSON Resume files; see Importing resumes.

Structure

A resume object has six required top-level properties: Each section has display settings and a list of items:
An empty title means the template’s default heading in the resume’s language.

Things to know

  • Dates. Dated items have a dates object with start, end (a year like "2022" or a year and month like "2022-03") and present. The text in period (or date for awards, certifications and publications) is still required and still exported, but Reactive Resume rewrites it from dates whenever it saves. Write dates. See Using the patch API.
  • Rich text is HTML. Fields such as description and summary.content hold HTML strings.
  • IDs. Every item and custom section needs a unique id. Use a UUID.
  • Cover letters. The schema still accepts custom sections of type cover-letter so older exports stay valid. When you save or import such a resume, Reactive Resume moves each letter into a cover letter of its own and removes the section. See Writing a cover letter.
  • Templates. metadata.template is one of the 17 templates: azurill, bronzor, chikorita, ditgar, ditto, gengar, glalie, kakuna, lapras, leafish, meowth, onyx, pikachu, porygon, rhyhorn, scizor or smeargle.
  • No version field. Resume objects have no top-level version or $schema property. Don’t add one; point your tools at the schema URL instead.

Validate resume data

Any validator that supports draft 2020-12 works. With Ajv in JavaScript:
In Python, with jsonschema:
Passing the schema is necessary, not sufficient: the server also checks a few things the schema can’t express, such as the size limit on custom styles.

Get autocompletion in your editor

Associate exported files with the schema. In VS Code, add this to settings.json:

Full schema

The complete schema, generated from the source code of this version.
/schema.json