DocMake
The PDF DocMake makes from the Risk Assessment template

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

Compliance

Risk Assessment

A risk assessment records what could go wrong in a given activity, who would be harmed, what already prevents it, and what else will be done about it. Every row ends with a named owner and a due date, which is the difference between an assessment and a list of worries.

Likelihood and severity scales are an organization's own choice: three by three on a small site, five by five where a regulator or an insurer expects it. Keeping the scale in the data instead of the wording lets one template serve both without a rewrite.

Residual risk, the rating that remains once the additional controls are in place, is the number a manager actually signs. Showing it beside the initial rating is what makes the signature mean something.

Assessments expire. A review date on the face of the document, and the ability to reproduce the exact version that was in force on any past day, is what an auditor or an investigator asks for after something has gone wrong.

Blanks to fill

reference Reference
assessment_date Assessment date
assessor_name Assessed by
assessor_role Role of the assessor
site_location Site or location
review_due_date Review due
activity_assessed What was assessed
rating_scale How the risk is rated
overall_conclusion Conclusion
approved_by Approved by
approver_title Title of the approver
approval_date Approval date
organization Organization
assessment_title Assessment title
risks[] 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
{
  "assessment_title": "Warehouse order picking and loading",
  "organization": "Northwind Distribution BV",
  "site_location": "Rotterdam distribution centre, aisles 1 to 14 and loading bays A to D",
  "activity_assessed": "Manual and powered order picking, pallet wrapping, and loading of curtain side trailers during single and double shift operation.",
  "reference": "RA-2026-018",
  "assessor_name": "Ilse van Dijk",
  "assessor_role": "Health and Safety Coordinator",
  "assessment_date": "September 4, 2026",
  "review_due_date": "September 4, 2027, or sooner if the layout, the equipment or the shift pattern changes",
  "rating_scale": "A five by five matrix: likelihood 1 to 5 multiplied by severity 1 to 5. A rating of 15 or above needs action before the activity continues.",
  "risks": [
    {
      "hazard": "Pedestrian struck by a forklift at an aisle intersection",
      "who_is_affected": "Pickers, visiting drivers, contractors",
      "existing_controls": "Marked pedestrian walkways, mirrors at four intersections, forklift speed limiter set to 8 km/h, high visibility vests mandatory",
      "likelihood": "3",
      "severity": "5",
      "risk_rating": "15",
      "additional_controls": "Install proximity warning sensors on all six forklifts and add a physical barrier at the aisle 7 and 8 crossing",
      "owner": "T. Bakker, Warehouse Manager",
      "due_date": "November 28, 2026",
      "residual_rating": "5"
    },
    {
      "hazard": "Falling stock from racking above 2 metres",
      "who_is_affected": "Pickers, anyone passing the aisle",
      "existing_controls": "Racking inspected annually by a competent person, load notices displayed, damaged beams reported through the maintenance log",
      "likelihood": "2",
      "severity": "4",
      "risk_rating": "8",
      "additional_controls": "Fit mesh decking to the top two levels of aisles 9 to 14",
      "owner": "T. Bakker, Warehouse Manager",
      "due_date": "January 30, 2027",
      "residual_rating": "4"
    },
    {
      "hazard": "Manual handling injury when picking heavy or awkward items",
      "who_is_affected": "Pickers, especially agency staff on short assignments",
      "existing_controls": "Weights over 16 kg flagged in the picking system, lift assist equipment available, manual handling training at induction",
      "likelihood": "3",
      "severity": "3",
      "risk_rating": "9",
      "additional_controls": "Refresher training every twelve months including agency staff, and relocate the twelve heaviest lines to waist height",
      "owner": "I. van Dijk",
      "due_date": "December 12, 2026",
      "residual_rating": "4"
    },
    {
      "hazard": "Trailer moves away from the bay while loading",
      "who_is_affected": "Loaders, forklift operators, drivers",
      "existing_controls": "Wheel chocks, key retention procedure at the gatehouse, bay traffic lights",
      "likelihood": "2",
      "severity": "5",
      "risk_rating": "10",
      "additional_controls": "Install automatic trailer restraints on bays A and B, which handle the highest turnover",
      "owner": "M. de Groot, Site Engineer",
      "due_date": "March 31, 2027",
      "residual_rating": "5"
    },
    {
      "hazard": "Slips on wet floor near the bay doors in winter",
      "who_is_affected": "All warehouse staff and drivers",
      "existing_controls": "Absorbent matting at each door, spill kits, cleaning schedule twice per shift",
      "likelihood": "3",
      "severity": "2",
      "risk_rating": "6",
      "additional_controls": "Extend matting by two metres and add air curtains to bays C and D",
      "owner": "M. de Groot, Site Engineer",
      "due_date": "November 14, 2026",
      "residual_rating": "2"
    }
  ],
  "overall_conclusion": "The activity can continue while the actions above are in progress. The forklift and pedestrian interface is the only item rated 15 or above and is under a dated action with an owner. All other residual ratings sit at 5 or below once the listed controls are in place.",
  "approved_by": "Sanne Kuipers",
  "approver_title": "Operations Director",
  "approval_date": "September 8, 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-risk-assessment.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 risk-assessment.pdf \
  --data-binary @- <<'JSON'
{
  "template_id": "tmpl_your_template_id",
  "format": "pdf",
  "data": {
    "assessment_title": "Warehouse order picking and loading",
    "organization": "Northwind Distribution BV",
    "site_location": "Rotterdam distribution centre, aisles 1 to 14 and loading bays A to D",
    "activity_assessed": "Manual and powered order picking, pallet wrapping, and loading of curtain side trailers during single and double shift operation.",
    "reference": "RA-2026-018",
    "assessor_name": "Ilse van Dijk",
    "assessor_role": "Health and Safety Coordinator",
    "assessment_date": "September 4, 2026",
    "review_due_date": "September 4, 2027, or sooner if the layout, the equipment or the shift pattern changes",
    "rating_scale": "A five by five matrix: likelihood 1 to 5 multiplied by severity 1 to 5. A rating of 15 or above needs action before the activity continues.",
    "risks": [
      {
        "hazard": "Pedestrian struck by a forklift at an aisle intersection",
        "who_is_affected": "Pickers, visiting drivers, contractors",
        "existing_controls": "Marked pedestrian walkways, mirrors at four intersections, forklift speed limiter set to 8 km/h, high visibility vests mandatory",
        "likelihood": "3",
        "severity": "5",
        "risk_rating": "15",
        "additional_controls": "Install proximity warning sensors on all six forklifts and add a physical barrier at the aisle 7 and 8 crossing",
        "owner": "T. Bakker, Warehouse Manager",
        "due_date": "November 28, 2026",
        "residual_rating": "5"
      },
      {
        "hazard": "Falling stock from racking above 2 metres",
        "who_is_affected": "Pickers, anyone passing the aisle",
        "existing_controls": "Racking inspected annually by a competent person, load notices displayed, damaged beams reported through the maintenance log",
        "likelihood": "2",
        "severity": "4",
        "risk_rating": "8",
        "additional_controls": "Fit mesh decking to the top two levels of aisles 9 to 14",
        "owner": "T. Bakker, Warehouse Manager",
        "due_date": "January 30, 2027",
        "residual_rating": "4"
      },
      {
        "hazard": "Manual handling injury when picking heavy or awkward items",
        "who_is_affected": "Pickers, especially agency staff on short assignments",
        "existing_controls": "Weights over 16 kg flagged in the picking system, lift assist equipment available, manual handling training at induction",
        "likelihood": "3",
        "severity": "3",
        "risk_rating": "9",
        "additional_controls": "Refresher training every twelve months including agency staff, and relocate the twelve heaviest lines to waist height",
        "owner": "I. van Dijk",
        "due_date": "December 12, 2026",
        "residual_rating": "4"
      },
      {
        "hazard": "Trailer moves away from the bay while loading",
        "who_is_affected": "Loaders, forklift operators, drivers",
        "existing_controls": "Wheel chocks, key retention procedure at the gatehouse, bay traffic lights",
        "likelihood": "2",
        "severity": "5",
        "risk_rating": "10",
        "additional_controls": "Install automatic trailer restraints on bays A and B, which handle the highest turnover",
        "owner": "M. de Groot, Site Engineer",
        "due_date": "March 31, 2027",
        "residual_rating": "5"
      },
      {
        "hazard": "Slips on wet floor near the bay doors in winter",
        "who_is_affected": "All warehouse staff and drivers",
        "existing_controls": "Absorbent matting at each door, spill kits, cleaning schedule twice per shift",
        "likelihood": "3",
        "severity": "2",
        "risk_rating": "6",
        "additional_controls": "Extend matting by two metres and add air curtains to bays C and D",
        "owner": "M. de Groot, Site Engineer",
        "due_date": "November 14, 2026",
        "residual_rating": "2"
      }
    ],
    "overall_conclusion": "The activity can continue while the actions above are in progress. The forklift and pedestrian interface is the only item rated 15 or above and is under a dated action with an owner. All other residual ratings sit at 5 or below once the listed controls are in place.",
    "approved_by": "Sanne Kuipers",
    "approver_title": "Operations Director",
    "approval_date": "September 8, 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 Risk Assessment template with reference "RA-2026-018" and assessment date "September 4, 2026".

How the MCP server works →

More compliance templates