DocMake
The PDF DocMake makes from the Training Record template

The first page of the document DocMake makes from the sample values on this page.

HR

Training Record

A training record is the employer's evidence rather than the learner's souvenir. It lives in the personnel file and answers one question that auditors and supervisors ask in a dozen different ways: can this named person carry out this named task, and what proves it.

That is why the document carries two tables instead of one. The first logs what was actually delivered, with the date, the trainer or provider, how it was delivered, the hours, how competence was assessed and the result. The second is the requirement matrix for the role, listing what the job demands and marking every line as met, in progress or a gap, so a supervisor spots the hole before the shift starts instead of after.

Expiry is the part that decays quietly. First aid, forklift, working at height and hygiene refreshers all lapse, and lapsing is a property of the individual line, not of the record as a whole. Keeping the due date on the row lets the same structure produce both the file copy for one person and the report of everyone falling due next quarter.

This is deliberately not a certificate. A certificate marks one course for one person and gets framed; this is the cumulative history plus the standing requirement, reissued whenever either changes. Generating it from whatever system already holds the bookings keeps the paper in the file identical to the data in the database.

Blanks to fill

record_reference Record reference
issued_date Issued
employee_name Employee
employee_id Employee number
job_title Job title
department Department
site Site
line_manager Line manager
employee_statement What the employee confirms
employee_signed_date Date the employee signed
manager_name Manager
manager_signed_date Date the manager signed
next_review_date Next review
company_name Company
sessions[] One per item, so a row is added for every item in the list
requirements[] 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 Instruments",
  "record_reference": "TRN-NI-0842",
  "employee_name": "Radu Ilies",
  "employee_id": "NI-0842",
  "job_title": "Calibration Technician",
  "department": "Calibration Laboratory",
  "site": "Cluj-Napoca",
  "line_manager": "Anca Marin, Laboratory Manager",
  "issued_date": "August 28, 2026",
  "next_review_date": "February 28, 2027",
  "sessions": [
    {
      "date": "November 12, 2025",
      "title": "ISO/IEC 17025 awareness",
      "provider": "Certus Training SRL",
      "method": "Classroom",
      "hours": "8.0",
      "assessment": "Written test",
      "result": "Pass, 92 percent",
      "reference": "TR-2025-441",
      "expires": "No refresher set"
    },
    {
      "date": "February 3, 2026",
      "title": "Measurement uncertainty budgets, practical workshop",
      "provider": "In house, Anca Marin",
      "method": "Workshop with supervised practice",
      "hours": "12.0",
      "assessment": "Four supervised budgets reviewed by the trainer",
      "result": "Competent",
      "reference": "TR-2026-018",
      "expires": "February 3, 2029"
    },
    {
      "date": "March 19, 2026",
      "title": "Electrical safety on low voltage test benches",
      "provider": "Volt Academy",
      "method": "Classroom and practical",
      "hours": "6.0",
      "assessment": "Observed task",
      "result": "Pass",
      "reference": "TR-2026-052",
      "expires": "March 19, 2028"
    },
    {
      "date": "June 8, 2026",
      "title": "First aid at work, requalification",
      "provider": "Medix Training Centre",
      "method": "Classroom",
      "hours": "16.0",
      "assessment": "Skills assessment",
      "result": "Pass",
      "reference": "TR-2026-096",
      "expires": "June 8, 2029"
    },
    {
      "date": "August 14, 2026",
      "title": "Document control refresher, PR-QMS-004 revision 2",
      "provider": "In house, Quality Manager",
      "method": "Briefing",
      "hours": "1.0",
      "assessment": "Acknowledgment signed",
      "result": "Completed",
      "reference": "TR-2026-131",
      "expires": "No refresher set"
    }
  ],
  "requirements": [
    {
      "competence": "Calibration of benchtop conductivity meters",
      "reason": "Core task",
      "standard": "WI-CAL-012 revision 3",
      "evidence": "TR-2026-018 plus four supervised runs signed off",
      "status": "Met",
      "due": "February 3, 2029"
    },
    {
      "competence": "Building an uncertainty budget",
      "reason": "Core task",
      "standard": "Laboratory quality manual, section 7.6",
      "evidence": "TR-2026-018",
      "status": "Met",
      "due": "February 3, 2029"
    },
    {
      "competence": "Working safely on low voltage test benches",
      "reason": "Core task",
      "standard": "EHS-04 site rule",
      "evidence": "TR-2026-052",
      "status": "Met",
      "due": "March 19, 2028"
    },
    {
      "competence": "Designated first aider, day shift",
      "reason": "Site role",
      "standard": "Site first aid roster",
      "evidence": "TR-2026-096",
      "status": "Met",
      "due": "June 8, 2029"
    },
    {
      "competence": "Torque tool verification",
      "reason": "Core task, added when WI-CAL-021 was issued",
      "standard": "WI-CAL-021 revision 1",
      "evidence": "Nothing on file",
      "status": "Gap",
      "due": "Book before October 31, 2026"
    },
    {
      "competence": "Internal auditor, quality management system",
      "reason": "Development objective",
      "standard": "Internal auditor course, ISO 19011 based",
      "evidence": "Booked for October 6 to 8, 2026",
      "status": "In progress",
      "due": "December 18, 2026"
    }
  ],
  "employee_statement": "I confirm that the training listed above was delivered to me, that I understood it, and that I have had the chance to raise any gap in this record with my manager.",
  "employee_signed_date": "August 28, 2026",
  "manager_name": "Anca Marin",
  "manager_signed_date": "August 28, 2026"
}

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-training-record.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 training-record.pdf \
  --data-binary @- <<'JSON'
{
  "template_id": "tmpl_your_template_id",
  "format": "pdf",
  "data": {
    "company_name": "Northwind Instruments",
    "record_reference": "TRN-NI-0842",
    "employee_name": "Radu Ilies",
    "employee_id": "NI-0842",
    "job_title": "Calibration Technician",
    "department": "Calibration Laboratory",
    "site": "Cluj-Napoca",
    "line_manager": "Anca Marin, Laboratory Manager",
    "issued_date": "August 28, 2026",
    "next_review_date": "February 28, 2027",
    "sessions": [
      {
        "date": "November 12, 2025",
        "title": "ISO/IEC 17025 awareness",
        "provider": "Certus Training SRL",
        "method": "Classroom",
        "hours": "8.0",
        "assessment": "Written test",
        "result": "Pass, 92 percent",
        "reference": "TR-2025-441",
        "expires": "No refresher set"
      },
      {
        "date": "February 3, 2026",
        "title": "Measurement uncertainty budgets, practical workshop",
        "provider": "In house, Anca Marin",
        "method": "Workshop with supervised practice",
        "hours": "12.0",
        "assessment": "Four supervised budgets reviewed by the trainer",
        "result": "Competent",
        "reference": "TR-2026-018",
        "expires": "February 3, 2029"
      },
      {
        "date": "March 19, 2026",
        "title": "Electrical safety on low voltage test benches",
        "provider": "Volt Academy",
        "method": "Classroom and practical",
        "hours": "6.0",
        "assessment": "Observed task",
        "result": "Pass",
        "reference": "TR-2026-052",
        "expires": "March 19, 2028"
      },
      {
        "date": "June 8, 2026",
        "title": "First aid at work, requalification",
        "provider": "Medix Training Centre",
        "method": "Classroom",
        "hours": "16.0",
        "assessment": "Skills assessment",
        "result": "Pass",
        "reference": "TR-2026-096",
        "expires": "June 8, 2029"
      },
      {
        "date": "August 14, 2026",
        "title": "Document control refresher, PR-QMS-004 revision 2",
        "provider": "In house, Quality Manager",
        "method": "Briefing",
        "hours": "1.0",
        "assessment": "Acknowledgment signed",
        "result": "Completed",
        "reference": "TR-2026-131",
        "expires": "No refresher set"
      }
    ],
    "requirements": [
      {
        "competence": "Calibration of benchtop conductivity meters",
        "reason": "Core task",
        "standard": "WI-CAL-012 revision 3",
        "evidence": "TR-2026-018 plus four supervised runs signed off",
        "status": "Met",
        "due": "February 3, 2029"
      },
      {
        "competence": "Building an uncertainty budget",
        "reason": "Core task",
        "standard": "Laboratory quality manual, section 7.6",
        "evidence": "TR-2026-018",
        "status": "Met",
        "due": "February 3, 2029"
      },
      {
        "competence": "Working safely on low voltage test benches",
        "reason": "Core task",
        "standard": "EHS-04 site rule",
        "evidence": "TR-2026-052",
        "status": "Met",
        "due": "March 19, 2028"
      },
      {
        "competence": "Designated first aider, day shift",
        "reason": "Site role",
        "standard": "Site first aid roster",
        "evidence": "TR-2026-096",
        "status": "Met",
        "due": "June 8, 2029"
      },
      {
        "competence": "Torque tool verification",
        "reason": "Core task, added when WI-CAL-021 was issued",
        "standard": "WI-CAL-021 revision 1",
        "evidence": "Nothing on file",
        "status": "Gap",
        "due": "Book before October 31, 2026"
      },
      {
        "competence": "Internal auditor, quality management system",
        "reason": "Development objective",
        "standard": "Internal auditor course, ISO 19011 based",
        "evidence": "Booked for October 6 to 8, 2026",
        "status": "In progress",
        "due": "December 18, 2026"
      }
    ],
    "employee_statement": "I confirm that the training listed above was delivered to me, that I understood it, and that I have had the chance to raise any gap in this record with my manager.",
    "employee_signed_date": "August 28, 2026",
    "manager_name": "Anca Marin",
    "manager_signed_date": "August 28, 2026"
  }
}
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 Training Record template with record reference "TRN-NI-0842" and issued "August 28, 2026".

How the MCP server works →

More hr templates