Skip to main content
The patch endpoint lets you make small, targeted changes to a resume’s content without sending the whole document. You send a list of JSON Patch (RFC 6902) operations, and the server applies them together and returns the updated resume. This is the same mechanism the MCP server’s apply_resume_patch tool uses.

Before you start

  • Create an API key and try a first request, as described in Using the API.
  • Find the resume’s ID with GET /api/openapi/resumes, then fetch its current content with GET /api/openapi/resumes/{id}. Paths in your operations point into the data object of that response.
  • Keep the JSON resume schema at hand. It lists every field, its type and which fields a new item needs.

Choose PATCH or PUT

PATCH only changes the resume’s data. The name, slug, tags and public setting sit outside data, so change them with PUT, which updates only the fields you send.

Send a patch

The body holds the operations, and optionally the version of the resume you based them on:
Each operation has these properties: A successful patch returns 200 with the full updated resume, including its new updatedAt.

Examples

Replace basic fields

Add an experience entry

A new entry must be a complete item: include every required field of that item type, a unique id (a UUID) and "hidden": false. Set its dates in dates and leave period empty; the server fills it in.
A numeric index inserts at that position (0 puts the entry first). The special index - appends to the end, as in /sections/skills/items/-.

Remove an entry

Remove the second skill:

Move an entry within a section

Move the first experience entry to the third position:

Change the design

Switch the template and the primary color:

Hide a section

Dates

Experience (and its roles), education, projects and volunteer entries, and awards, certifications and publications, have a structured dates object:
Write dates, not the text. Each entry also has a text field, period (ranges) or date (single dates). On every save, the server rewrites that text from dates, in the resume’s language and date format (/metadata/page/dateFormat: short, long, numeric or iso). A patch that changes only period or date is overwritten, and the resume keeps its old dates. To change an entry’s dates, replace the whole object:
With the long date format, that entry’s period becomes “2021 – June 2024”. An entry sent without dates (for example from an older export) gets them read from its text.

Avoid overwriting other edits

Someone might edit the resume in the browser between your read and your write. Two tools protect you: expectedUpdatedAt rejects the whole patch if the resume changed after you read it. Send the updatedAt value from your last read:
If the resume has moved on, you get 409 with the code RESUME_VERSION_CONFLICT and the current updatedAt in data. Read the resume again, rebuild your operations and retry. test checks a value before the other operations run. If it doesn’t match, nothing is applied:

What happens when a patch is applied

  • All or nothing. The operations run in order inside one transaction. If any operation fails, or the result doesn’t match the resume schema, none of them are saved.
  • Validation. The patched resume must pass the same validation as any other save. For example, /metadata/template must be one of the available templates. Rich-text fields such as description and /summary/content are HTML strings, so send HTML (<p>…</p>) rather than plain text or Markdown.
  • History. Each successful patch saves a version in the resume’s history. It appears as AI edit, described as “from the assistant or API”, and you can restore an earlier version from the editor. See Undoing changes and version history.
  • Cover letters leave the resume. If a patch adds a section of type cover-letter, the server saves its letter as a separate cover letter linked to the resume and removes the section. Manage letters with the /cover-letters endpoints instead.
  • Public resumes update at once. If the resume is public, the change is visible on its public page straight away.

Errors

Locked resume writes return HTTP 403 with code RESUME_LOCKED. Unlock the resume before retrying.