DocMake
The PDF DocMake makes from the Performance Review template

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.

  1. 01 Sign up free and duplicate this template into your workspace.
  2. 02 Adjust the wording and branding in the visual editor.
  3. 03 Fill it in the app, share it as a form link, or call the API.
sample-data.json
{
  "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.

make-performance-review.sh
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".

How the MCP server works →

More hr templates