The first page of the document DocMake makes from the sample values on this page.
HR
Performance Review
A performance review is a dated record of how somebody did against expectations set in advance. It carries three lists doing three different jobs: competencies rated on a defined scale, goals from the period being closed with what actually happened, and goals for the period opening.
Ratings without examples read as opinion. The comments column beside each competency is where the evidence goes, and it is what makes the document hold up if a promotion, a pay decision, or an exit is questioned later.
Goals for the coming period need a measure and a date or they are wishes. Keeping those as separate fields also means next cycle can start from this document instead of a blank form.
Most companies run one form across every team and calibrate ratings before anything is released, so reviews are generated in a batch once calibration closes: one document per employee, each with its own rows, all in the same layout.
Blanks to fill
| employee_name | Employee |
| employee_id | Employee number |
| job_title | Job title |
| department | Department |
| manager_name | Reviewing manager |
| review_date | Review date |
| review_period | Period reviewed |
| overall_rating | Overall rating |
| rating_scale | Rating scale |
| manager_summary | What the manager says |
| employee_comments | What the employee says |
| next_review_date | Next review date |
| company_name | Company |
| competencies[] | One per item, so a row is added for every item in the list |
| goals_reviewed[] | One per item, so a row is added for every item in the list |
| goals_next[] | One per item, so a row is added for every item in the list |
The data behind the preview
This is the exact JSON that produced the document above. Change the values, POST them to the API, and you get your version back as DOCX or PDF. Lists grow and shrink with your data; the layout adapts.
- 01 Sign up free and duplicate this template into your workspace.
- 02 Adjust the wording and branding in the visual editor.
- 03 Fill it in the app, share it as a form link, or call the API.
{
"company_name": "Northwind Software",
"employee_name": "Priya Raman",
"employee_id": "EMP-0412",
"job_title": "Senior Support Engineer",
"department": "Customer Operations",
"manager_name": "Daniel Okafor",
"review_period": "September 2025 to August 2026",
"review_date": "September 8, 2026",
"rating_scale": "1 to 5, where 3 is what the level asks for",
"overall_rating": "4 of 5, exceeds expectations",
"competencies": [
{
"name": "Technical problem solving",
"rating": "5",
"comments": "Traced the recurring export timeout to a queue misconfiguration that had been open for seven months and wrote the runbook the rest of the team now uses."
},
{
"name": "Customer communication",
"rating": "4",
"comments": "Consistently clear written updates. Two escalations this year were resolved without a manager joining the call."
},
{
"name": "Collaboration",
"rating": "4",
"comments": "Ran the weekly triage with engineering and kept the shared backlog accurate. Could involve the product team earlier on recurring issues."
},
{
"name": "Ownership and follow through",
"rating": "4",
"comments": "Picked up the on call rotation redesign without being asked and saw it through to adoption."
},
{
"name": "Coaching others",
"rating": "3",
"comments": "Onboarded one new hire well. Wider knowledge sharing is still mostly one to one rather than documented."
}
],
"goals_reviewed": [
{
"description": "Reduce median first response time on priority tickets",
"target": "Under 45 minutes",
"result": "38 minutes across the year",
"status": "Met"
},
{
"description": "Publish runbooks for the ten most frequent issues",
"target": "10 runbooks",
"result": "7 published, 2 in draft",
"status": "Partly met"
},
{
"description": "Complete the platform certification",
"target": "By June 2026",
"result": "Passed in May 2026",
"status": "Met"
}
],
"goals_next": [
{
"description": "Take technical lead on the support tooling migration",
"measure": "Migration delivered with no regression in response times",
"due_date": "March 31, 2027"
},
{
"description": "Finish and maintain the runbook set",
"measure": "All ten runbooks published and reviewed quarterly",
"due_date": "December 31, 2026"
},
{
"description": "Mentor two junior engineers through their first on call rotations",
"measure": "Both rotating independently with a documented handover",
"due_date": "June 30, 2027"
}
],
"manager_summary": "A strong year. Priya is the person the team turns to on hard tickets and she has started shaping how the work is done rather than only doing it. The next step is making her knowledge available without her in the room, which is why documentation and mentoring lead the goals for the coming year.",
"employee_comments": "I agree with the summary. I would like more involvement in product planning for the tooling migration, since support sees the failure patterns first.",
"next_review_date": "September 7, 2027"
} Generate this document via the API
One template plus changing data is the whole point. The list of blanks above is the contract, and every new set of values comes back in the same layout: fill it in the app, hand someone a form link, or POST the JSON and get the file straight back.
The request below carries this page's own values, so it runs as soon as the template exists in your workspace. Swap the values for yours and the response is your document.
curl -X POST https://app.docmake.io/api/v1/render \
-H "Authorization: Bearer $DOCMAKE_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
--output performance-review.pdf \
--data-binary @- <<'JSON'
{
"template_id": "tmpl_your_template_id",
"format": "pdf",
"data": {
"company_name": "Northwind Software",
"employee_name": "Priya Raman",
"employee_id": "EMP-0412",
"job_title": "Senior Support Engineer",
"department": "Customer Operations",
"manager_name": "Daniel Okafor",
"review_period": "September 2025 to August 2026",
"review_date": "September 8, 2026",
"rating_scale": "1 to 5, where 3 is what the level asks for",
"overall_rating": "4 of 5, exceeds expectations",
"competencies": [
{
"name": "Technical problem solving",
"rating": "5",
"comments": "Traced the recurring export timeout to a queue misconfiguration that had been open for seven months and wrote the runbook the rest of the team now uses."
},
{
"name": "Customer communication",
"rating": "4",
"comments": "Consistently clear written updates. Two escalations this year were resolved without a manager joining the call."
},
{
"name": "Collaboration",
"rating": "4",
"comments": "Ran the weekly triage with engineering and kept the shared backlog accurate. Could involve the product team earlier on recurring issues."
},
{
"name": "Ownership and follow through",
"rating": "4",
"comments": "Picked up the on call rotation redesign without being asked and saw it through to adoption."
},
{
"name": "Coaching others",
"rating": "3",
"comments": "Onboarded one new hire well. Wider knowledge sharing is still mostly one to one rather than documented."
}
],
"goals_reviewed": [
{
"description": "Reduce median first response time on priority tickets",
"target": "Under 45 minutes",
"result": "38 minutes across the year",
"status": "Met"
},
{
"description": "Publish runbooks for the ten most frequent issues",
"target": "10 runbooks",
"result": "7 published, 2 in draft",
"status": "Partly met"
},
{
"description": "Complete the platform certification",
"target": "By June 2026",
"result": "Passed in May 2026",
"status": "Met"
}
],
"goals_next": [
{
"description": "Take technical lead on the support tooling migration",
"measure": "Migration delivered with no regression in response times",
"due_date": "March 31, 2027"
},
{
"description": "Finish and maintain the runbook set",
"measure": "All ten runbooks published and reviewed quarterly",
"due_date": "December 31, 2026"
},
{
"description": "Mentor two junior engineers through their first on call rotations",
"measure": "Both rotating independently with a documented handover",
"due_date": "June 30, 2027"
}
],
"manager_summary": "A strong year. Priya is the person the team turns to on hard tickets and she has started shaping how the work is done rather than only doing it. The next step is making her knowledge available without her in the room, which is why documentation and mentoring lead the goals for the coming year.",
"employee_comments": "I agree with the summary. I would like more involvement in product planning for the tooling migration, since support sees the failure patterns first.",
"next_review_date": "September 7, 2027"
}
}
JSON tmpl_your_template_id is
a stand-in: build this template in the visual editor and copy the id it shows, or create one with POST /api/v1/templates. Keys, formats, strict mode and batches are in the API reference.
Or let an AI assistant do it
The DocMake MCP server lets Claude and other assistants make this document the same way. Install it once:
claude mcp add docmake \
--env DOCMAKE_API_KEY=dm_your_api_key \
-- npx -y @docmake/mcp@latest Then ask for the document in plain words:
Make a PDF from my Performance Review template with employee "Priya Raman" and employee number "EMP-0412".
More hr templates
Certificate of Completion
A one page certificate naming the person, the course, the hours and the day they finished, with a line for the tutor to sign.
View template →Employment Verification Letter
A letter confirming that somebody works for you, since when and in what role, with the salary line you can turn off.
View template →Job Offer Letter
A warm letter offering the role, with the pay, the start day and the day the offer runs out, and a line to accept on.
View template →