Skip to main content

Inspection Reports

The inspection template turns photographs collected over chat into a finished property inspection PDF. It is not an ordinary PDF Generator render: your flow does not build the report body. The server keeps the photographs, groups them into areas, and lays out the document. Your flow sends only the property details and the exceptions.

Use this page when you build or change an inspection flow.

How a flow talks to it

An inspection uses two endpoints:

StepEndpointWhat it does
During the inspectionPOST /api/v1/inspection/captureRecords each batch of photographs against the current area
At the endPOST /api/v1/pdf/renderClaims the recorded photographs and renders the report

Photographs are recorded as they arrive, so a long inspection is never held in memory. The render step claims them once — a second render of the same session does not repeat photographs, and a render for a session with nothing pending produces no file at all.

What you send

The render call carries a source object:

{
"templateId": "inspection",
"source": {
"type": "inspection",
"sessionId": "whatsapp-447700900000-447700900001",
"meta": {
"address": "12 Elm Road, Flat 3, London HA12 3NF",
"assessor": "Jane Doe",
"company": "Inspection Experts",
"reportType": "checkin",
"guided": false,
"propertyNo": "12",
"postcode": "HA12 3NF"
}
}
}

meta fields

FieldDescription
addressProperty address, printed on the cover
assessorInspector name — cover, and the clerk signature line
tenantTenant name — the tenant signature line. Omit to leave it blank
companyOperator company name on the cover
reportTypeinterim, checkin or checkout. Anything else falls back to a neutral title
guidedtrue only for a tenant-led self inspection — prints Guided Self Inspection on the cover
propertyNo, postcodeUsed for the emailed filename <YYYYMMDD> <propertyNo> <postcode>.pdf
logoAsset reference for the cover logo
geo{ latitude, longitude } — printed as a coordinate plus a map link
areaComments{ "Bedroom 1": ["remark", …] } — printed under that area as Additional Comment
keyDetails{ numberOfKeys, takenFrom, handedTo } — printed in the Keys section
skippedAreasService areas the inspector reported absent — see below

Every field is optional. Anything the server does not recognise is dropped rather than printed — with one exception worth knowing: address, assessor, tenant and company are printed on the cover exactly as you send them, with no length cap. Nothing can be injected through them (every value is escaped), but nothing tidies them up either, so send them already correct.

Areas the property does not have

A check-in or check-out report expects five service areas: the electricity, gas and water meters, the keys, and the detectors. Not every property has all five.

Send skippedAreas as a pipe-separated list drawn from this set:

electricity-meter | gas-meter | water-meter | keys | detectors

Each one prints a short note instead of vanishing from the report:

Detectors
Not available — reported by the inspector.

The note matters: without it a reader cannot tell "this property has no detectors" from "somebody forgot the detectors". An area you list but photograph anyway keeps its photographs and gets no note.

Prefer this over force-finishing

Force-finishing an inspection waives every outstanding area at once, so a genuinely forgotten one passes unnoticed. Listing the single absent area keeps the rest of the check in place.

Where comments appear

Free-text remarks are recorded against the area being inspected at that moment and close that area — they print after the photographs, not between the area table and the images.

Every part of the report accepts them, not just numbered rooms:

SectionKey to use
A roomIts label — "Bedroom 1"
External AreasThe pooled heading, or any room inside it ("Garden") — all are merged
Meters & KeysThe area name — "Gas Meter", "Keys"
An area reported absentIts name. The remark prints under the note, recording why it was skipped

Capitalisation, extra spaces and - or / separators do not affect the match: bedroom-1 and Bedroom 1 are the same area. A remark whose area appears nowhere in the report is dropped rather than printed without a heading.

When each photograph was taken

Every photograph prints its own timestamp in UK civil time, with the zone named — 14 Aug 2026, 18:02 BST. The zone matters: on the October clock change two photographs an hour apart both read 01:30, and only BST vs GMT tells them apart.

The time comes from captureTs on the capture call, which is when WhatsApp says the message was sent. Send it every time. If you leave it out, the report falls back to when the server received the photograph instead — usually close, but a retry, a queue backlog or a phone with no signal in a basement can move it by hours, and the report gives the reader no hint that it happened.

Troubleshooting

The report has no photographs

The capture calls did not reach the same environment the flow is running in. A 404 from /api/v1/inspection/capture means the flow id does not exist on that host. The render then produces nothing at all rather than an empty report.

The report keeps asking for an area the property does not have

The area is one of the five service areas and has neither photographs nor a skippedAreas entry. Add its slug to skippedAreas.

The cover title is wrong

reportType did not match interim, checkin or checkout — a misspelling falls back to the neutral title. A mistyped type also changes which areas are required, so check it before the inspection starts.

The cover says "Guided Self Inspection" for an inspector

guided was sent as true. Send false whenever the session belongs to an inspector rather than a tenant walking through the property themselves.