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 withGET /api/openapi/resumes/{id}. Paths in your operations point into thedataobject 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
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 uniqueid (a UUID) and "hidden": false. Set its dates in dates and leave period empty; the server fills it in.
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 structureddates 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:
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:
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/templatemust be one of the available templates. Rich-text fields such asdescriptionand/summary/contentare 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-lettersendpoints 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.Related guides
- Using the API: keys, authentication and the other endpoints.
- JSON resume schema: every path and value type you can patch.
- Using the MCP server: let an AI client write these patches for you.