DocMake
The PDF DocMake makes from the Punch List template

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

Operations

Punch List

A punch list, or snagging list outside North America, is what an inspection produces when a job is nearly finished. Somebody walks the space against the drawings and the specification and writes down everything that is not right yet. It is the last document that stands between a contractor and a completion certificate, which is why the arguments about it are rarely about the paint and usually about whether an item is a defect or a variation.

Location and trade are what make the list usable. Fifty items sorted by the order somebody noticed them is an unreadable document; the same fifty grouped by level, room and responsible trade turn into six work lists that go out to six subcontractors the same afternoon. Each item wants a grading too, because a missing fire stop and a scuffed skirting are not the same problem, and a list that treats them alike gets worked from the top rather than from the risk.

The lifecycle matters more than the description. An item is raised, given an owner and a target date, reported as done by the trade, and then verified closed by whoever raised it. Verification is the step that gets dropped, and dropping it is how a list of forty closed items turns into eleven reopened ones at the second inspection. Keeping the raised date, the target date, the closed date and the verifier on every row is what makes the counts at the bottom of the page mean anything.

Those counts are the commercial part. How many items are open, how many are graded as preventing handover, and what that does to the completion certificate and the release of retention. Rendering the list from JSON lets a site app hold one row per item, publish the filtered PDF each trade actually needs, and reissue the whole schedule as a numbered revision after every re-inspection without rebuilding the document by hand.

Blanks to fill

list_reference List reference
revision Revision
project_name Project
project_number Project number
site_address Site address
client Client
principal_contractor Principal contractor
contract_administrator Contract administrator
section Section inspected
areas_covered Areas covered
inspection_type Inspection type
inspection_date Inspection date
inspection_attendees Attended by
reference_documents Inspected against
grading_key Grading key
items_raised Items raised
items_closed Items closed and verified
items_open Items open
items_blocking_handover Items graded as blocking handover
reinspection_date Re-inspection
handover_effect Effect on handover
retention_note Effect on retention
distribution Distribution
prepared_by Prepared by
prepared_date Prepared
acknowledged_by Acknowledged by
company_name Company
items[] One per item, so a row is added for every item in the list
disputed[] 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": "Harbor Build Group",
  "list_reference": "PL-2026-0079",
  "revision": "2, issued after the re-inspection on October 1, 2026",
  "project_name": "Cascade Street mixed use development",
  "project_number": "PRJ-2026-114",
  "site_address": "Cascade Street, Bristol BS1 6TR, United Kingdom",
  "client": "Cascade Street Holdings LLC",
  "principal_contractor": "Harbor Build Group",
  "contract_administrator": "Prentice Ward Architects",
  "section": "Sectional completion 1, levels 3 and 4 office floors including the level 4 plant room",
  "areas_covered": "Level 3 open plan office, level 3 tea point and WC core, level 4 open plan office, level 4 plant room, and the shared stair and lift lobby serving both floors",
  "inspection_type": "Pre-handover inspection with re-inspection of items raised at revision 1",
  "inspection_date": "September 29, 2026, with re-inspection on October 1, 2026",
  "inspection_attendees": "Julia Prentice (Prentice Ward Architects), Owen Marsh (Harbor Build Group), Priya Raman (Kestrel M&E Ltd), Hana Duarte (client representative)",
  "reference_documents": "Architectural drawings A-3011 to A-3016 at the revisions current on September 25, 2026, specification sections 09, 22, 23 and 26, the level 4 coordination sketch SK-ME-114, and the commissioning records issued on September 28, 2026",
  "grading_key": "A, prevents handover of the section. B, must be cleared within 14 days of handover. C, cosmetic or minor, clear within the defects liability period.",
  "items": [
    {
      "number": "1",
      "location": "Level 3, grid B2, open plan office",
      "trade": "Drylining and decoration",
      "description": "Plasterboard joint cracked over 900 mm above the door head, tape lifting",
      "grading": "C",
      "responsible": "Harbor Build Group",
      "raised": "September 29, 2026",
      "target_date": "October 10, 2026",
      "status": "Closed",
      "closed_date": "October 1, 2026",
      "verified_by": "Julia Prentice"
    },
    {
      "number": "2",
      "location": "Level 3, tea point",
      "trade": "Plumbing",
      "description": "Boiling water tap runs but the isolation valve under the sink is inaccessible behind the waste trap",
      "grading": "B",
      "responsible": "Kestrel M&E Ltd",
      "raised": "September 29, 2026",
      "target_date": "October 9, 2026",
      "status": "Open",
      "closed_date": "Not yet",
      "verified_by": "Not verified yet"
    },
    {
      "number": "3",
      "location": "Level 3, WC core, riser cupboard",
      "trade": "Fire stopping",
      "description": "Two cable penetrations through the compartment wall not fire stopped, third penetration stopped but unlabelled",
      "grading": "A",
      "responsible": "Harbor Build Group",
      "raised": "September 29, 2026",
      "target_date": "October 1, 2026",
      "status": "Closed",
      "closed_date": "October 1, 2026",
      "verified_by": "Julia Prentice, with the installer certificate"
    },
    {
      "number": "4",
      "location": "Level 3, open plan office, north elevation",
      "trade": "Glazing",
      "description": "Scratch to the inner pane of window unit W-3-14, 140 mm, visible from the office side",
      "grading": "C",
      "responsible": "Harbor Build Group",
      "raised": "September 29, 2026",
      "target_date": "November 14, 2026",
      "status": "Open",
      "closed_date": "Not yet",
      "verified_by": "Not verified yet"
    },
    {
      "number": "5",
      "location": "Level 4, grid D4, bulkhead",
      "trade": "Mechanical",
      "description": "Access panel to the riser 2 valves fitted 400 mm off the agreed position and now sits over a light fitting",
      "grading": "B",
      "responsible": "Kestrel M&E Ltd",
      "raised": "September 29, 2026",
      "target_date": "October 9, 2026",
      "status": "Open",
      "closed_date": "Not yet",
      "verified_by": "Not verified yet"
    },
    {
      "number": "6",
      "location": "Level 4, plant room",
      "trade": "Mechanical",
      "description": "AHU-03 drain trap not filled and the condensate line falls the wrong way over the last 600 mm",
      "grading": "A",
      "responsible": "Kestrel M&E Ltd",
      "raised": "September 29, 2026",
      "target_date": "October 1, 2026",
      "status": "Closed",
      "closed_date": "October 1, 2026",
      "verified_by": "Julia Prentice, discharge witnessed"
    },
    {
      "number": "7",
      "location": "Level 4, open plan office",
      "trade": "Electrical",
      "description": "Emergency lighting key switch test showed one luminaire in the north bay not switching to emergency mode",
      "grading": "A",
      "responsible": "Kestrel M&E Ltd",
      "raised": "September 29, 2026",
      "target_date": "October 1, 2026",
      "status": "Closed",
      "closed_date": "October 1, 2026",
      "verified_by": "Julia Prentice, retested and logged"
    },
    {
      "number": "8",
      "location": "Level 3 and level 4, all doors on the escape route",
      "trade": "Joinery",
      "description": "Intumescent strip missing from the lock side of two doors, D3-07 and D4-11",
      "grading": "A",
      "responsible": "Harbor Build Group",
      "raised": "September 29, 2026",
      "target_date": "October 1, 2026",
      "status": "Closed",
      "closed_date": "October 1, 2026",
      "verified_by": "Julia Prentice"
    }
  ],
  "items_raised": "8",
  "items_closed": "5",
  "items_open": "3",
  "items_blocking_handover": "None at revision 2. Four items were graded A at revision 1, and all four were closed and verified on October 1, 2026.",
  "disputed": [
    {
      "item": "Item 5, access panel position at grid D4",
      "position": "Kestrel M&E hold that the panel was set out from the position marked on site by the architect on September 23 and that the light fitting was moved afterwards. Harbor Build hold that the panel is not in the position agreed under change order CO-018.",
      "resolution_route": "Joint set out review on site on October 8, 2026. If the panel moves, the cost is to be dealt with under the CO-018 conditions rather than as a new variation."
    },
    {
      "item": "Item 4, scratched glazing unit W-3-14",
      "position": "Harbor Build hold that the scratch is within the manufacturer visual inspection standard viewed from three metres. The client representative holds that it is visible from the working position.",
      "resolution_route": "Manufacturer to inspect on October 15, 2026 and the architect to determine, with the item held open in the meantime."
    }
  ],
  "reinspection_date": "October 1, 2026 for the A graded items, with the next full re-inspection on October 16, 2026",
  "handover_effect": "No item now prevents sectional handover of levels 3 and 4. The section was recommended for handover on October 1, 2026 and handover certificate HC-2026-0031 was issued on October 2, 2026 with the three open items carried onto it.",
  "retention_note": "The three open items carry an agreed value of $4,150.00, which stays in the retention held against this section until each item is verified closed. Release of the first half of retention on this section follows the handover certificate and is reflected in the next interim valuation.",
  "distribution": "Cascade Street Holdings LLC, Harbor Build Group, Kestrel M&E Ltd, Prentice Ward Architects, Marchmont QS",
  "prepared_by": "Julia Prentice, Project Architect, Prentice Ward Architects",
  "prepared_date": "October 1, 2026",
  "acknowledged_by": "Owen Marsh, Site Manager, Harbor Build Group, October 1, 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-punch-list.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 punch-list.pdf \
  --data-binary @- <<'JSON'
{
  "template_id": "tmpl_your_template_id",
  "format": "pdf",
  "data": {
    "company_name": "Harbor Build Group",
    "list_reference": "PL-2026-0079",
    "revision": "2, issued after the re-inspection on October 1, 2026",
    "project_name": "Cascade Street mixed use development",
    "project_number": "PRJ-2026-114",
    "site_address": "Cascade Street, Bristol BS1 6TR, United Kingdom",
    "client": "Cascade Street Holdings LLC",
    "principal_contractor": "Harbor Build Group",
    "contract_administrator": "Prentice Ward Architects",
    "section": "Sectional completion 1, levels 3 and 4 office floors including the level 4 plant room",
    "areas_covered": "Level 3 open plan office, level 3 tea point and WC core, level 4 open plan office, level 4 plant room, and the shared stair and lift lobby serving both floors",
    "inspection_type": "Pre-handover inspection with re-inspection of items raised at revision 1",
    "inspection_date": "September 29, 2026, with re-inspection on October 1, 2026",
    "inspection_attendees": "Julia Prentice (Prentice Ward Architects), Owen Marsh (Harbor Build Group), Priya Raman (Kestrel M&E Ltd), Hana Duarte (client representative)",
    "reference_documents": "Architectural drawings A-3011 to A-3016 at the revisions current on September 25, 2026, specification sections 09, 22, 23 and 26, the level 4 coordination sketch SK-ME-114, and the commissioning records issued on September 28, 2026",
    "grading_key": "A, prevents handover of the section. B, must be cleared within 14 days of handover. C, cosmetic or minor, clear within the defects liability period.",
    "items": [
      {
        "number": "1",
        "location": "Level 3, grid B2, open plan office",
        "trade": "Drylining and decoration",
        "description": "Plasterboard joint cracked over 900 mm above the door head, tape lifting",
        "grading": "C",
        "responsible": "Harbor Build Group",
        "raised": "September 29, 2026",
        "target_date": "October 10, 2026",
        "status": "Closed",
        "closed_date": "October 1, 2026",
        "verified_by": "Julia Prentice"
      },
      {
        "number": "2",
        "location": "Level 3, tea point",
        "trade": "Plumbing",
        "description": "Boiling water tap runs but the isolation valve under the sink is inaccessible behind the waste trap",
        "grading": "B",
        "responsible": "Kestrel M&E Ltd",
        "raised": "September 29, 2026",
        "target_date": "October 9, 2026",
        "status": "Open",
        "closed_date": "Not yet",
        "verified_by": "Not verified yet"
      },
      {
        "number": "3",
        "location": "Level 3, WC core, riser cupboard",
        "trade": "Fire stopping",
        "description": "Two cable penetrations through the compartment wall not fire stopped, third penetration stopped but unlabelled",
        "grading": "A",
        "responsible": "Harbor Build Group",
        "raised": "September 29, 2026",
        "target_date": "October 1, 2026",
        "status": "Closed",
        "closed_date": "October 1, 2026",
        "verified_by": "Julia Prentice, with the installer certificate"
      },
      {
        "number": "4",
        "location": "Level 3, open plan office, north elevation",
        "trade": "Glazing",
        "description": "Scratch to the inner pane of window unit W-3-14, 140 mm, visible from the office side",
        "grading": "C",
        "responsible": "Harbor Build Group",
        "raised": "September 29, 2026",
        "target_date": "November 14, 2026",
        "status": "Open",
        "closed_date": "Not yet",
        "verified_by": "Not verified yet"
      },
      {
        "number": "5",
        "location": "Level 4, grid D4, bulkhead",
        "trade": "Mechanical",
        "description": "Access panel to the riser 2 valves fitted 400 mm off the agreed position and now sits over a light fitting",
        "grading": "B",
        "responsible": "Kestrel M&E Ltd",
        "raised": "September 29, 2026",
        "target_date": "October 9, 2026",
        "status": "Open",
        "closed_date": "Not yet",
        "verified_by": "Not verified yet"
      },
      {
        "number": "6",
        "location": "Level 4, plant room",
        "trade": "Mechanical",
        "description": "AHU-03 drain trap not filled and the condensate line falls the wrong way over the last 600 mm",
        "grading": "A",
        "responsible": "Kestrel M&E Ltd",
        "raised": "September 29, 2026",
        "target_date": "October 1, 2026",
        "status": "Closed",
        "closed_date": "October 1, 2026",
        "verified_by": "Julia Prentice, discharge witnessed"
      },
      {
        "number": "7",
        "location": "Level 4, open plan office",
        "trade": "Electrical",
        "description": "Emergency lighting key switch test showed one luminaire in the north bay not switching to emergency mode",
        "grading": "A",
        "responsible": "Kestrel M&E Ltd",
        "raised": "September 29, 2026",
        "target_date": "October 1, 2026",
        "status": "Closed",
        "closed_date": "October 1, 2026",
        "verified_by": "Julia Prentice, retested and logged"
      },
      {
        "number": "8",
        "location": "Level 3 and level 4, all doors on the escape route",
        "trade": "Joinery",
        "description": "Intumescent strip missing from the lock side of two doors, D3-07 and D4-11",
        "grading": "A",
        "responsible": "Harbor Build Group",
        "raised": "September 29, 2026",
        "target_date": "October 1, 2026",
        "status": "Closed",
        "closed_date": "October 1, 2026",
        "verified_by": "Julia Prentice"
      }
    ],
    "items_raised": "8",
    "items_closed": "5",
    "items_open": "3",
    "items_blocking_handover": "None at revision 2. Four items were graded A at revision 1, and all four were closed and verified on October 1, 2026.",
    "disputed": [
      {
        "item": "Item 5, access panel position at grid D4",
        "position": "Kestrel M&E hold that the panel was set out from the position marked on site by the architect on September 23 and that the light fitting was moved afterwards. Harbor Build hold that the panel is not in the position agreed under change order CO-018.",
        "resolution_route": "Joint set out review on site on October 8, 2026. If the panel moves, the cost is to be dealt with under the CO-018 conditions rather than as a new variation."
      },
      {
        "item": "Item 4, scratched glazing unit W-3-14",
        "position": "Harbor Build hold that the scratch is within the manufacturer visual inspection standard viewed from three metres. The client representative holds that it is visible from the working position.",
        "resolution_route": "Manufacturer to inspect on October 15, 2026 and the architect to determine, with the item held open in the meantime."
      }
    ],
    "reinspection_date": "October 1, 2026 for the A graded items, with the next full re-inspection on October 16, 2026",
    "handover_effect": "No item now prevents sectional handover of levels 3 and 4. The section was recommended for handover on October 1, 2026 and handover certificate HC-2026-0031 was issued on October 2, 2026 with the three open items carried onto it.",
    "retention_note": "The three open items carry an agreed value of $4,150.00, which stays in the retention held against this section until each item is verified closed. Release of the first half of retention on this section follows the handover certificate and is reflected in the next interim valuation.",
    "distribution": "Cascade Street Holdings LLC, Harbor Build Group, Kestrel M&E Ltd, Prentice Ward Architects, Marchmont QS",
    "prepared_by": "Julia Prentice, Project Architect, Prentice Ward Architects",
    "prepared_date": "October 1, 2026",
    "acknowledged_by": "Owen Marsh, Site Manager, Harbor Build Group, October 1, 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 Punch List template with list reference "PL-2026-0079" and project "Cascade Street mixed use development".

How the MCP server works →

More operations templates