docs/guides/using-the-patch-api.mdx
The Patch API lets you make small, targeted changes to your resume without sending the entire data object. Instead of replacing the whole resume with a PUT, you send a list of JSON Patch operations that describe exactly what to change.
This is based on the JSON Patch (RFC 6902) standard.
| Use case | Method |
|---|---|
| Update a single field (e.g., name, headline) | PATCH |
| Add or remove an item in a section | PATCH |
| Change template, colors, or fonts | PATCH |
| Replace the entire resume data at once | PUT |
All requests require your API key in the x-api-key header. See Using the API for how to create one.
PATCH /api/openapi/resume/{id}
The resume ID is taken from the URL path, so the request body only requires the operations array:
{
"operations": [{ "op": "replace", "path": "/basics/name", "value": "Jane Doe" }]
}
Each operation is an object with the following properties:
| Property | Required | Description |
|---|---|---|
op | Yes | The operation to perform: add, remove, replace, move, copy, or test |
path | Yes | A JSON Pointer (RFC 6901) to the target location in the resume data |
value | For add, replace, test | The value to use for the operation |
from | For move, copy | A JSON Pointer to the source location |
Update the resume holder's name and headline:
curl -X PATCH "https://rxresu.me/api/openapi/resume/YOUR_RESUME_ID" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operations": [
{ "op": "replace", "path": "/basics/name", "value": "Jane Doe" },
{ "op": "replace", "path": "/basics/headline", "value": "Senior Software Engineer" }
]
}'
Append a new item to the experience section:
curl -X PATCH "https://rxresu.me/api/openapi/resume/YOUR_RESUME_ID" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operations": [
{
"op": "add",
"path": "/sections/experience/items/-",
"value": {
"id": "a1b2c3d4-0000-0000-0000-000000000000",
"hidden": false,
"company": "Acme Corp",
"position": "Staff Engineer",
"location": "San Francisco, CA",
"period": "Jan 2024 - Present",
"website": { "url": "https://acme.example.com", "label": "Acme Corp" },
"description": "<p>Leading the platform team.</p>"
}
}
]
}'
Remove the second skill (index 1) from the skills section:
curl -X PATCH "https://rxresu.me/api/openapi/resume/YOUR_RESUME_ID" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operations": [
{ "op": "remove", "path": "/sections/skills/items/1" }
]
}'
Switch the template and update the primary color:
curl -X PATCH "https://rxresu.me/api/openapi/resume/YOUR_RESUME_ID" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operations": [
{ "op": "replace", "path": "/metadata/template", "value": "bronzor" },
{ "op": "replace", "path": "/metadata/design/colors/primary", "value": "rgba(37, 99, 235, 1)" }
]
}'
The test operation checks that a value matches before proceeding. If the test fails, the entire patch is rejected. This is useful to avoid overwriting changes made by another client:
curl -X PATCH "https://rxresu.me/api/openapi/resume/YOUR_RESUME_ID" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operations": [
{ "op": "test", "path": "/basics/name", "value": "Albert Einstein" },
{ "op": "replace", "path": "/basics/name", "value": "Jane Doe" }
]
}'
If /basics/name is not "Albert Einstein" at the time of the request, the entire patch will fail with a 400 error and no changes will be applied.
Move the first experience item to the third position:
curl -X PATCH "https://rxresu.me/api/openapi/resume/YOUR_RESUME_ID" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"operations": [
{ "op": "move", "from": "/sections/experience/items/0", "path": "/sections/experience/items/2" }
]
}'
| Status | Error Code | Description |
|---|---|---|
400 | INVALID_PATCH_OPERATIONS | The operations are structurally invalid, target a non-existent path, or produce resume data that fails schema validation. |
401 | UNAUTHORIZED | Missing or invalid API key. |
404 | NOT_FOUND | The resume does not exist or does not belong to the authenticated user. |
403 | RESUME_LOCKED | The resume is locked and cannot be modified. Unlock it first. |
GET /resume/{id} to inspect the current structure before crafting your operations. This helps you target the correct paths and array indices.test for safety. When updating a value you expect to be a specific value, combine test + replace to avoid accidentally overwriting concurrent changes.- index appends. When adding items to arrays, use - as the index (e.g., /sections/skills/items/-) to append to the end.