210 × 297 mm
Real estate
Inventory and check-in report
A room-by-room inventory and check-in report for a rented flat: condition counts across all items, meter readings, keys handed over, smoke and CO alarm tests, then each room's items with condition badges, cleanliness, notes and photo numbers, and a declaration with tenant and clerk signatures.
Opens Dynamic Document API with this template preloaded in a free workspace.
Template language features
- Loops
- Conditionals
- Filters
- Date formatting
- QR code
- Grouping
- Repeating table headers
- Header & footer
- Page numbers
- signature
Filters such as format_currency and qrcode are described in the template language reference.
Variables
Derived from the sample data: 8 top-level fields, 43 paths in total. Send the same shape as data.
| Path | Type | Example |
|---|---|---|
| clerk_company | object | |
| clerk_company.name | string | "Tidemark Inventories" |
| clerk_company.email | string | "reports@tidemark.example.com" |
| clerk_company.website | string | "tidemark.example.com" |
| report | object | |
| report.reference | string | "TMI-26-3318" |
| report.type | string | "Inventory and check-in" |
| report.date | date | "2026-09-30T10:00:00+01:00" |
| report.timezone | string | "Europe/London" |
| report.clerk | string | "Joanna Feld" |
| report.photos_url | string | "https://tidemark.example.com/r/TMI-26-3318" |
| report.overall_cleanliness | string | "Professionally cleaned throughout, including c…" |
| report.overall_decoration | string | "Living room redecorated in August 2026; other …" |
| property | object | |
| property.address | string | "Flat 4, 18 Larchfield Road ⏎ Bristol BS6 5XY" |
| property.description | string | "Two-bedroom first-floor flat, furnished" |
| property.landlord | string | "Helen Prescott" |
| property.agent | string | "Kittiwake Lettings, Clifton" |
| tenancy | object | |
| tenancy.start_date | date | "2026-10-01" |
| tenancy.tenants | array<string> · 2 | "Amara Osei" |
| meters | array<object> · 3 | |
| meters[].type | string | "Electricity" |
| meters[].serial | string | "E14Z 093 2271" |
| meters[].reading | string | "48213" |
| meters[].unit | string | "kWh" |
| meters[].location | string | "Hall cupboard" |
| keys | array<object> · 5 | |
| keys[].description | string | "Front door, Yale latch" |
| keys[].count | number | 2 |
| alarms | array<object> · 3 | |
| alarms[].type | string | "Smoke alarm" |
| alarms[].location | string | "Entrance hall" |
| alarms[].result | string | "pass" |
| rooms | array<object> · 6 | |
| rooms[].name | string | "Entrance hall" |
| rooms[].items | array<object> · 5 | |
| rooms[].items[].item | string | "Front door" |
| rooms[].items[].description | string | "White painted timber door with spy hole, chrom…" |
| rooms[].items[].condition | string | "good" |
| rooms[].items[].cleanliness | string | "clean" |
| rooms[].items[].photos? | array<number> · 2 | 1 |
| rooms[].items[].notes? | string | "Light scuff, 3 cm, by the cupboard door" |
Sample data
Fictional records used for previews. Replace them with your own data when you call the API.
{
"clerk_company": {
"name": "Tidemark Inventories",
"email": "reports@tidemark.example.com",
"website": "tidemark.example.com"
},
"report": {
"reference": "TMI-26-3318",
"type": "Inventory and check-in",
"date": "2026-09-30T10:00:00+01:00",
"timezone": "Europe/London",
"clerk": "Joanna Feld",
"photos_url": "https://tidemark.example.com/r/TMI-26-3318",
"overall_cleanliness": "Professionally cleaned throughout, including carpets and oven",
"overall_decoration": "Living room redecorated in August 2026; other rooms in good order"
},
"property": {
"address": "Flat 4, 18 Larchfield Road\nBristol BS6 5XY",
"description": "Two-bedroom first-floor flat, furnished",
"landlord": "Helen Prescott",
"agent": "Kittiwake Lettings, Clifton"
},
"tenancy": {
"start_date": "2026-10-01",
"tenants": [
"Amara Osei",
"Tom Brierley"
]
},
"meters": [
{
"type": "Electricity",
"serial": "E14Z 093 2271",
"reading": "48213",
"unit": "kWh",
"location": "Hall cupboard"
},
{
"type": "Gas",
"serial": "G4A 77 105 662",
"reading": "06521.4",
"unit": "m³",
"location": "External box, front wall"
},
{
"type": "Water",
"serial": "W 19 004 3817",
"reading": "00312.8",
"unit": "m³",
"location": "Under the kitchen sink"
}
],
"keys": [
{
"description": "Front door, Yale latch",
"count": 2
},
{
"description": "Front door, mortice",
"count": 2
},
{
"description": "Window locks",
"count": 1
},
{
"description": "Bike store fob",
"count": 2
},
{
"description": "Post box",
"count": 1
}
],
"alarms": [
{
"type": "Smoke alarm",
"location": "Entrance hall",
"result": "pass"
},
{
"type": "Smoke alarm",
"location": "Living room",
"result": "pass"
},
{
"type": "Carbon monoxide alarm",
"location": "Kitchen, by the boiler",
"result": "pass"
}
],
"rooms": [
{
"name": "Entrance hall",
"items": [
{
"item": "Front door",
"description": "White painted timber door with spy hole, chrome letterbox, Yale latch and 5-lever mortice lock",
"condition": "good",
"cleanliness": "clean",
"photos": [
1,
2
]
},
{
"item": "Walls and ceiling",
"description": "Walls painted off-white, ceiling white emulsion, coving to all sides",
"condition": "good",
"cleanliness": "clean",
"photos": [
3
]
},
{
"item": "Flooring",
"description": "Oak-effect laminate with aluminium threshold strip at front door",
"condition": "good",
"cleanliness": "clean",
"notes": "Light scuff, 3 cm, by the cupboard door",
"photos": [
4
]
},
{
"item": "Lighting",
"description": "Two white ceiling pendants with fabric shades, both working",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Storage cupboard",
"description": "Painted door with ball catch, electricity meter and consumer unit inside",
"condition": "good",
"cleanliness": "clean",
"photos": [
5
]
}
]
},
{
"name": "Living room",
"items": [
{
"item": "Walls and ceiling",
"description": "Walls painted pale grey, ceiling white, picture rail to all walls",
"condition": "new",
"cleanliness": "clean",
"notes": "Redecorated in August 2026",
"photos": [
6
]
},
{
"item": "Flooring",
"description": "Grey twist-pile carpet with underlay",
"condition": "fair",
"cleanliness": "clean",
"notes": "Pile flattened along the route from door to window",
"photos": [
7
]
},
{
"item": "Window",
"description": "Double-glazed uPVC bay window, three opening casements with keys",
"condition": "good",
"cleanliness": "clean",
"photos": [
8
]
},
{
"item": "Radiator",
"description": "Steel panel radiator with thermostatic valve",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Sofa",
"description": "Three-seat sofa, grey woven fabric, two scatter cushions",
"condition": "fair",
"cleanliness": "clean",
"notes": "Light pilling on the seat cushions",
"photos": [
9
]
},
{
"item": "Coffee table",
"description": "Solid oak coffee table with lower shelf",
"condition": "good",
"cleanliness": "clean",
"notes": "Two faint water rings on the top",
"photos": [
10
]
},
{
"item": "Curtains",
"description": "Lined linen-look curtains on a chrome pole",
"condition": "good",
"cleanliness": "professionally cleaned"
}
]
},
{
"name": "Kitchen",
"items": [
{
"item": "Units and worktops",
"description": "Eight white gloss units, laminate worktop in light oak",
"condition": "good",
"cleanliness": "clean",
"photos": [
11
]
},
{
"item": "Oven and hob",
"description": "Built-in electric oven with ceramic hob, manual in the drawer",
"condition": "good",
"cleanliness": "professionally cleaned",
"photos": [
12
]
},
{
"item": "Fridge freezer",
"description": "Freestanding fridge freezer, three drawers and two shelves",
"condition": "good",
"cleanliness": "clean",
"photos": [
13
]
},
{
"item": "Washing machine",
"description": "Integrated 8 kg washing machine, tested on a rinse cycle",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Sink and taps",
"description": "Stainless steel one-and-a-half bowl sink with mixer tap",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Flooring",
"description": "Grey vinyl tiles",
"condition": "worn",
"cleanliness": "clean",
"notes": "Two tiles lifting slightly in front of the sink",
"photos": [
14
]
}
]
},
{
"name": "Bedroom 1",
"items": [
{
"item": "Walls and ceiling",
"description": "Walls painted off-white, ceiling white",
"condition": "fair",
"cleanliness": "clean",
"notes": "Blu-tack marks by the window, about 4 cm square",
"photos": [
15
]
},
{
"item": "Flooring",
"description": "Beige carpet with underlay",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Window",
"description": "Double-glazed uPVC window with two opening casements and roller blind",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Bed and mattress",
"description": "Double bed with oak frame, pocket-sprung mattress with protector",
"condition": "good",
"cleanliness": "clean",
"photos": [
16
]
},
{
"item": "Wardrobe",
"description": "Two-door white wardrobe with hanging rail and shelf",
"condition": "good",
"cleanliness": "clean"
}
]
},
{
"name": "Bedroom 2",
"items": [
{
"item": "Walls and ceiling",
"description": "Walls painted off-white, ceiling white",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Flooring",
"description": "Beige carpet with underlay",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Window",
"description": "Double-glazed uPVC window with one opening casement",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Desk and chair",
"description": "White desk with two drawers, grey upholstered chair",
"condition": "good",
"cleanliness": "clean",
"photos": [
17
]
}
]
},
{
"name": "Bathroom",
"items": [
{
"item": "Bath and shower",
"description": "White acrylic bath, thermostatic shower over with glass screen",
"condition": "good",
"cleanliness": "professionally cleaned",
"photos": [
18
]
},
{
"item": "WC",
"description": "White close-coupled WC with soft-close seat",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Basin and taps",
"description": "White pedestal basin with chrome mixer tap",
"condition": "good",
"cleanliness": "clean"
},
{
"item": "Tiling",
"description": "White ceramic wall tiles to half height, grey grout",
"condition": "damaged",
"cleanliness": "clean",
"notes": "Hairline crack in one tile beside the bath taps",
"photos": [
19
]
},
{
"item": "Extractor fan",
"description": "Ceiling extractor on the light switch, working",
"condition": "good",
"cleanliness": "clean"
}
]
}
]
}Source
The body markup with Jinja, the stylesheet placed in <head> and the header and footer settings.
{#- Inventory and check-in report for a rented property. Rooms hold items with a description, a condition (new, good,
fair, worn or damaged), cleanliness, notes and photo numbers; the condition counts at the top come from all items,
and each room is a group of rows whose heading stays with its first item when the table breaks across pages. -#}
{%- set loc = "en-GB" -%}
{%- set conditions = {
"new": {"label": "New", "color": "#2563a8", "meaning": "unused or as new"},
"good": {"label": "Good", "color": "#2e7d4f", "meaning": "sound, no visible wear"},
"fair": {"label": "Fair", "color": "#b07d12", "meaning": "light wear for its age"},
"worn": {"label": "Worn", "color": "#c0621c", "meaning": "noticeable wear, still usable"},
"damaged": {"label": "Damaged", "color": "#b3261e", "meaning": "needs repair or replacement"}
} -%}
{%- set order = ["new", "good", "fair", "worn", "damaged"] -%}
{%- set ns = namespace(items=[]) -%}
{%- for room in rooms -%}{%- set ns.items = ns.items + room.items -%}{%- endfor -%}
{%- set key_total = keys | sum_by("count") -%}
{%- set alarms_passed = alarms | selectattr("result", "equalto", "pass") | list | length -%}
<header class="top">
<div class="brand">
<svg viewBox="0 0 36 36" aria-hidden="true">
<rect width="36" height="36" rx="8" fill="#3b5b6b"/>
<path d="M10 9h16v20H10z" fill="none" stroke="#ffffff" stroke-width="2.4" stroke-linejoin="round"/>
<path d="M14 15h8M14 20h8M14 25h5" stroke="#a9d3e0" stroke-width="2.4" stroke-linecap="round"/>
</svg>
{{ clerk_company.name }}
</div>
<div class="doc">
<h1>{{ report.type }} report</h1>
<p>Ref. {{ report.reference }} · {{ report.date | format_date("%-d %B %Y, %H:%M", loc, report.timezone) }}</p>
</div>
</header>
<section class="overview">
<div>
<p class="label">Property</p>
<p class="address">{{ property.address | nl2br }}</p>
<p class="muted">{{ property.description }}</p>
</div>
<dl>
<dt>Tenancy starts</dt><dd>{{ tenancy.start_date | format_date("long", loc) }}</dd>
<dt>Tenants</dt><dd>{{ tenancy.tenants | join(" and ") }}</dd>
<dt>Landlord</dt><dd>{{ property.landlord }}</dd>
<dt>Agent</dt><dd>{{ property.agent }}</dd>
<dt>Inspected by</dt><dd>{{ report.clerk }}, {{ clerk_company.name }}</dd>
</dl>
{% if report.photos_url %}
<div class="photos-qr">
{{ report.photos_url | qrcode(size=180, margin=0, ecc="M", alt="QR code linking to the photographs") }}
Photographs referred to by number in this report
</div>
{% endif %}
</section>
<section class="conditions">
{% for key in order %}
{%- set c = conditions[key] %}
<div class="count">
<strong>{{ ns.items | selectattr("condition", "equalto", key) | list | length }}</strong>
<span><span class="dot" style="background: {{ c.color }}"></span>{{ c.label }}</span>
</div>
{% endfor %}
<div class="statements">
<p><strong>Cleanliness:</strong> {{ report.overall_cleanliness }}.</p>
<p><strong>Decoration:</strong> {{ report.overall_decoration }}.</p>
</div>
</section>
<section class="panels">
<div class="panel">
<p class="label">Meter readings</p>
<table class="mini">
{% for meter in meters %}
<tr>
<th scope="row">{{ meter.type }}<span class="sub">{{ meter.location }}</span></th>
<td><span class="mono">{{ meter.serial }}</span></td>
<td class="num"><strong class="mono">{{ meter.reading }}</strong> {{ meter.unit }}</td>
</tr>
{% endfor %}
</table>
</div>
<div class="panel">
<p class="label">Keys handed over · {{ key_total }}</p>
<table class="mini">
{% for key in keys %}<tr><th scope="row">{{ key.description }}</th><td class="num">× {{ key.count }}</td></tr>{% endfor %}
</table>
</div>
<div class="panel">
<p class="label">Alarms tested · {{ alarms_passed }} of {{ alarms | length }} working</p>
<table class="mini">
{% for alarm in alarms %}
<tr>
<th scope="row">{{ alarm.type }}<span class="sub">{{ alarm.location }}</span></th>
<td class="num">{% if alarm.result == "pass" %}<span class="pass">Working</span>{% else %}<span class="fail">Failed</span>{% endif %}</td>
</tr>
{% endfor %}
</table>
</div>
</section>
<p class="legend">
{% for key in order %}<span><strong>{{ conditions[key].label }}</strong> {{ conditions[key].meaning }}</span>{% endfor %}
</p>
<table class="rooms">
<thead>
<tr>
<th class="item" scope="col">Item</th>
<th scope="col">Description</th>
<th class="condition" scope="col">Condition</th>
<th class="notes" scope="col">Notes</th>
<th class="photo-refs" scope="col">Photos</th>
</tr>
</thead>
{% for room in rooms %}
{%- set flagged = room.items | selectattr("notes") | list | length %}
<tbody>
<tr class="room-row">
<td colspan="5"><span class="room-name">{{ room.name }}</span><span class="room-meta">{{ room.items | length }} items{% if flagged %} · {{ flagged }} with notes{% endif %}</span></td>
</tr>
{% for item in room.items %}
{%- set c = conditions[item.condition] %}
<tr>
<th class="item" scope="row">{{ item.item }}</th>
<td>{{ item.description }}</td>
<td class="condition"><span class="badge" style="background: {{ c.color if c else '#5f6a70' }}">{{ c.label if c else item.condition }}</span><span class="clean">{{ item.cleanliness | capitalize }}</span></td>
<td class="notes">{{ item.notes | default("") }}</td>
<td class="photo-refs">{% for photo in item.photos | default([]) %}<span class="photo-ref">#{{ photo }}</span>{% endfor %}</td>
</tr>
{% endfor %}
</tbody>
{% endfor %}
</table>
<section class="declaration">
<h2>Declaration</h2>
<p>
This report records the contents and condition of the property at the start of the tenancy. Please check it
carefully. If you disagree with any entry, tell {{ property.agent }} in writing within seven days of
{{ tenancy.start_date | format_date("long", loc) }}; after that, the report is taken as an accurate record.
Photographs referred to by number form part of this report.
</p>
<div class="signatures">
{% for tenant in tenancy.tenants %}<div class="signature"><strong>{{ tenant }}</strong>Tenant · date</div>{% endfor %}
<div class="signature"><strong>{{ report.clerk }}</strong>Inventory clerk, {{ clerk_company.name }} · date</div>
</div>
</section><title>{{ report.type }} report {{ report.reference }}</title>
<style>
:root {
--ink: #1d2428;
--muted: #5f6a70;
--rule: #dbe0e3;
--soft: #f3f5f6;
--accent: #3b5b6b;
--new: #2563a8;
--good: #2e7d4f;
--fair: #b07d12;
--worn: #c0621c;
--damaged: #b3261e;
}
* { box-sizing: border-box; }
html { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
body {
margin: 0;
color: var(--ink);
font-family: "Open Sans", "Liberation Sans", Arial, sans-serif;
font-size: 8.2pt;
line-height: 1.42;
}
p, h1, h2, h3 { margin: 0; }
.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.muted { color: var(--muted); }
.label { margin-bottom: 1.4mm; font-size: 6.8pt; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); }
/* Header */
.top { display: flex; justify-content: space-between; align-items: center; padding-bottom: 4mm; border-bottom: 0.5mm solid var(--ink); }
.brand { display: flex; align-items: center; gap: 2.6mm; font-size: 10.5pt; font-weight: 700; }
.brand svg { width: 9mm; height: 9mm; }
.doc { text-align: right; }
.doc h1 { font-size: 15pt; font-weight: 700; line-height: 1.15; }
.doc p { font-size: 8pt; color: var(--muted); }
.overview { display: grid; grid-template-columns: 1.1fr 1fr 30mm; gap: 7mm; margin: 5mm 0; }
.address { font-size: 12pt; font-weight: 700; line-height: 1.3; }
.overview dl { display: grid; grid-template-columns: auto 1fr; gap: 0.8mm 3mm; margin: 2mm 0 0; }
.overview dt { color: var(--muted); }
.overview dd { margin: 0; font-weight: 600; }
.photos-qr { text-align: center; font-size: 6.8pt; color: var(--muted); line-height: 1.3; }
.photos-qr img { display: block; width: 24mm; height: 24mm; margin: 0 auto 1mm; }
/* Condition summary */
.conditions { display: grid; grid-template-columns: repeat(5, 1fr) 2.2fr; gap: 2.5mm; margin-bottom: 5mm; break-inside: avoid; page-break-inside: avoid; }
.count { padding: 2.4mm 3mm; border-radius: 1.4mm; background: var(--soft); }
.count strong { display: block; font-size: 15pt; line-height: 1.1; font-variant-numeric: tabular-nums; }
.count span { display: flex; align-items: center; gap: 1.2mm; font-size: 7pt; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; color: var(--muted); }
.dot { display: inline-block; width: 2.2mm; height: 2.2mm; border-radius: 50%; }
.statements { padding: 2.4mm 3.5mm; border: 0.3mm solid var(--rule); border-radius: 1.4mm; font-size: 7.6pt; }
.statements p + p { margin-top: 1mm; }
/* Panels */
.panels { display: grid; grid-template-columns: 1.5fr 1fr 1.1fr; gap: 4mm; margin-bottom: 5mm; break-inside: avoid; page-break-inside: avoid; }
.panel { padding: 3mm 3.5mm; border: 0.3mm solid var(--rule); border-radius: 1.4mm; }
.mini { width: 100%; border-collapse: collapse; font-size: 7.6pt; }
.mini td, .mini th { padding: 0.9mm 0; border-bottom: 0.2mm solid var(--rule); vertical-align: top; }
.mini th { font-weight: inherit; text-align: left; }
.mini tr:last-child td, .mini tr:last-child th { border-bottom: none; }
.mini .sub { display: block; font-size: 6.8pt; color: var(--muted); }
.mono { font-family: "DejaVu Sans Mono", "Liberation Mono", monospace; font-size: 7.4pt; }
.pass { display: inline-block; padding: 0 1.4mm; border-radius: 0.8mm; background: #e3f2e8; color: var(--good); font-size: 6.8pt; font-weight: 700; text-transform: uppercase; }
.fail { display: inline-block; padding: 0 1.4mm; border-radius: 0.8mm; background: #fbe6e4; color: var(--damaged); font-size: 6.8pt; font-weight: 700; text-transform: uppercase; }
.legend { display: flex; flex-wrap: wrap; gap: 1mm 5mm; margin-bottom: 3mm; font-size: 7.2pt; color: var(--muted); }
.legend strong { color: var(--ink); }
/* Rooms */
table.rooms { width: 100%; border-collapse: collapse; }
table.rooms thead { display: table-header-group; }
table.rooms thead th {
padding: 1.6mm 1.8mm; background: var(--accent); color: #ffffff; text-align: left;
font-size: 6.6pt; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
}
table.rooms td, table.rooms tbody th { padding: 1.7mm 1.8mm; border-bottom: 0.2mm solid var(--rule); vertical-align: top; }
table.rooms tbody th { text-align: left; }
/* Cells that may be empty paint white inside their padding, so the tagged PDF keeps them in the table structure (PDF/UA)
without painting over the row edges. */
table.rooms td.notes, table.rooms td.photo-refs { background: #ffffff content-box; }
table.rooms tr { break-inside: avoid; page-break-inside: avoid; }
.room-row { break-after: avoid; page-break-after: avoid; }
.room-row td { padding: 3.2mm 1.8mm 1.4mm; border-bottom: 0.4mm solid var(--ink); }
.room-name { font-size: 9.5pt; font-weight: 700; }
.room-meta { margin-left: 2.5mm; font-size: 7.2pt; color: var(--muted); }
.item { width: 27mm; font-weight: 600; }
.condition { width: 25mm; }
.badge { display: inline-block; min-width: 15mm; padding: 0.2mm 1.4mm; border-radius: 0.8mm; color: #ffffff; text-align: center; font-size: 6.8pt; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; }
.clean { display: block; margin-top: 0.6mm; font-size: 6.8pt; color: var(--muted); }
.notes { width: 44mm; }
.photo-refs { width: 14mm; white-space: nowrap; }
.photo-ref { display: inline-block; margin: 0 0.6mm 0.6mm 0; padding: 0 1mm; border: 0.25mm solid #b9c3c8; border-radius: 0.8mm; font-size: 6.6pt; color: var(--muted); font-variant-numeric: tabular-nums; }
/* Declaration */
.declaration { margin-top: 7mm; break-inside: avoid; page-break-inside: avoid; }
.declaration h2 { margin-bottom: 1.5mm; font-size: 10pt; font-weight: 700; }
.declaration p { max-width: 170mm; }
.signatures { display: grid; grid-template-columns: repeat(3, 1fr); gap: 7mm; margin-top: 10mm; }
.signature { border-top: 0.3mm solid var(--ink); padding-top: 1.2mm; font-size: 7.6pt; }
.signature strong { display: block; font-size: 8.2pt; }
</style>Render it with the API
After adding the template to your workspace, render it by ID and pass your data. Arrays are shortened here.
curl -X POST https://api-eu.dynamicdocumentapi.com/v1/renders \
-H "Authorization: Bearer $DYNAMIC_DOCUMENT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"input": {
"type": "template",
"template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C"
},
"data": {
"clerk_company": {
"name": "Tidemark Inventories",
"email": "reports@tidemark.example.com",
"website": "tidemark.example.com"
},
"report": {
"reference": "TMI-26-3318",
"type": "Inventory and check-in",
"date": "2026-09-30T10:00:00+01:00",
"timezone": "Europe/London",
"clerk": "Joanna Feld",
"photos_url": "https://tidemark.example.com/r/TMI-26-3318",
"overall_cleanliness": "Professionally cleaned throughout, including carpets and oven",
"overall_decoration": "Living room redecorated in August 2026; other rooms in good order"
},
"property": {
"address": "Flat 4, 18 Larchfield Road\nBristol BS6 5XY",
"description": "Two-bedroom first-floor flat, furnished",
"landlord": "Helen Prescott",
"agent": "Kittiwake Lettings, Clifton"
},
"tenancy": {
"start_date": "2026-10-01",
"tenants": [
"Amara Osei",
"Tom Brierley"
]
},
"meters": [
{
"type": "Electricity",
"serial": "E14Z 093 2271",
"reading": "48213",
"unit": "kWh",
"location": "Hall cupboard"
},
{
"type": "Gas",
"serial": "G4A 77 105 662",
"reading": "06521.4",
"unit": "m³",
"location": "External box, front wall"
}
],
"keys": [
{
"description": "Front door, Yale latch",
"count": 2
},
{
"description": "Front door, mortice",
"count": 2
}
],
"alarms": [
{
"type": "Smoke alarm",
"location": "Entrance hall",
"result": "pass"
},
{
"type": "Smoke alarm",
"location": "Living room",
"result": "pass"
}
],
"rooms": [
{
"name": "Entrance hall",
"items": [
{
"item": "Front door",
"description": "White painted timber door with spy hole, chrome letterbox, Yale latch and 5-lever mortice lock",
"condition": "good",
"cleanliness": "clean",
"photos": [
1,
2
]
},
{
"item": "Walls and ceiling",
"description": "Walls painted off-white, ceiling white emulsion, coving to all sides",
"condition": "good",
"cleanliness": "clean",
"photos": [
3
]
}
]
},
{
"name": "Living room",
"items": [
{
"item": "Walls and ceiling",
"description": "Walls painted pale grey, ceiling white, picture rail to all walls",
"condition": "new",
"cleanliness": "clean",
"notes": "Redecorated in August 2026",
"photos": [
6
]
},
{
"item": "Flooring",
"description": "Grey twist-pile carpet with underlay",
"condition": "fair",
"cleanliness": "clean",
"notes": "Pile flattened along the route from door to window",
"photos": [
7
]
}
]
}
]
},
"output": {
"format": "pdf",
"filename": "property-inventory-report.pdf"
}
}'const response = await fetch("https://api-eu.dynamicdocumentapi.com/v1/renders", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DYNAMIC_DOCUMENT_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"input": {
"type": "template",
"template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C"
},
"data": {
"clerk_company": {
"name": "Tidemark Inventories",
"email": "reports@tidemark.example.com",
"website": "tidemark.example.com"
},
"report": {
"reference": "TMI-26-3318",
"type": "Inventory and check-in",
"date": "2026-09-30T10:00:00+01:00",
"timezone": "Europe/London",
"clerk": "Joanna Feld",
"photos_url": "https://tidemark.example.com/r/TMI-26-3318",
"overall_cleanliness": "Professionally cleaned throughout, including carpets and oven",
"overall_decoration": "Living room redecorated in August 2026; other rooms in good order"
},
"property": {
"address": "Flat 4, 18 Larchfield Road\nBristol BS6 5XY",
"description": "Two-bedroom first-floor flat, furnished",
"landlord": "Helen Prescott",
"agent": "Kittiwake Lettings, Clifton"
},
"tenancy": {
"start_date": "2026-10-01",
"tenants": [
"Amara Osei",
"Tom Brierley"
]
},
"meters": [
{
"type": "Electricity",
"serial": "E14Z 093 2271",
"reading": "48213",
"unit": "kWh",
"location": "Hall cupboard"
},
{
"type": "Gas",
"serial": "G4A 77 105 662",
"reading": "06521.4",
"unit": "m³",
"location": "External box, front wall"
}
],
"keys": [
{
"description": "Front door, Yale latch",
"count": 2
},
{
"description": "Front door, mortice",
"count": 2
}
],
"alarms": [
{
"type": "Smoke alarm",
"location": "Entrance hall",
"result": "pass"
},
{
"type": "Smoke alarm",
"location": "Living room",
"result": "pass"
}
],
"rooms": [
{
"name": "Entrance hall",
"items": [
{
"item": "Front door",
"description": "White painted timber door with spy hole, chrome letterbox, Yale latch and 5-lever mortice lock",
"condition": "good",
"cleanliness": "clean",
"photos": [
1,
2
]
},
{
"item": "Walls and ceiling",
"description": "Walls painted off-white, ceiling white emulsion, coving to all sides",
"condition": "good",
"cleanliness": "clean",
"photos": [
3
]
}
]
},
{
"name": "Living room",
"items": [
{
"item": "Walls and ceiling",
"description": "Walls painted pale grey, ceiling white, picture rail to all walls",
"condition": "new",
"cleanliness": "clean",
"notes": "Redecorated in August 2026",
"photos": [
6
]
},
{
"item": "Flooring",
"description": "Grey twist-pile carpet with underlay",
"condition": "fair",
"cleanliness": "clean",
"notes": "Pile flattened along the route from door to window",
"photos": [
7
]
}
]
}
]
},
"output": {
"format": "pdf",
"filename": "property-inventory-report.pdf"
}
}),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const result = await response.json();
console.log(result);import os
import uuid
import requests
response = requests.post(
"https://api-eu.dynamicdocumentapi.com/v1/renders",
headers={
"Authorization": f"Bearer {os.environ['DYNAMIC_DOCUMENT_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"input": {
"type": "template",
"template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C",
},
"data": {
"clerk_company": {
"name": "Tidemark Inventories",
"email": "reports@tidemark.example.com",
"website": "tidemark.example.com",
},
"report": {
"reference": "TMI-26-3318",
"type": "Inventory and check-in",
"date": "2026-09-30T10:00:00+01:00",
"timezone": "Europe/London",
"clerk": "Joanna Feld",
"photos_url": "https://tidemark.example.com/r/TMI-26-3318",
"overall_cleanliness": "Professionally cleaned throughout, including carpets and oven",
"overall_decoration": "Living room redecorated in August 2026; other rooms in good order",
},
"property": {
"address": "Flat 4, 18 Larchfield Road\nBristol BS6 5XY",
"description": "Two-bedroom first-floor flat, furnished",
"landlord": "Helen Prescott",
"agent": "Kittiwake Lettings, Clifton",
},
"tenancy": {
"start_date": "2026-10-01",
"tenants": ["Amara Osei", "Tom Brierley"],
},
"meters": [
{
"type": "Electricity",
"serial": "E14Z 093 2271",
"reading": "48213",
"unit": "kWh",
"location": "Hall cupboard",
},
{
"type": "Gas",
"serial": "G4A 77 105 662",
"reading": "06521.4",
"unit": "m³",
"location": "External box, front wall",
},
],
"keys": [
{
"description": "Front door, Yale latch",
"count": 2,
},
{
"description": "Front door, mortice",
"count": 2,
},
],
"alarms": [
{
"type": "Smoke alarm",
"location": "Entrance hall",
"result": "pass",
},
{
"type": "Smoke alarm",
"location": "Living room",
"result": "pass",
},
],
"rooms": [
{
"name": "Entrance hall",
"items": [
{
"item": "Front door",
"description": "White painted timber door with spy hole, chrome letterbox, Yale latch and 5-lever mortice lock",
"condition": "good",
"cleanliness": "clean",
"photos": [1, 2],
},
{
"item": "Walls and ceiling",
"description": "Walls painted off-white, ceiling white emulsion, coving to all sides",
"condition": "good",
"cleanliness": "clean",
"photos": [3],
},
],
},
{
"name": "Living room",
"items": [
{
"item": "Walls and ceiling",
"description": "Walls painted pale grey, ceiling white, picture rail to all walls",
"condition": "new",
"cleanliness": "clean",
"notes": "Redecorated in August 2026",
"photos": [6],
},
{
"item": "Flooring",
"description": "Grey twist-pile carpet with underlay",
"condition": "fair",
"cleanliness": "clean",
"notes": "Pile flattened along the route from door to window",
"photos": [7],
},
],
},
],
},
"output": {
"format": "pdf",
"filename": "property-inventory-report.pdf",
},
},
timeout=90,
)
response.raise_for_status()
print(response.json())More real estate templates
- 210 × 297 mm
Immobilien-Exposé (property listing)
A4A three-page German property exposé for a flat for sale: cover photo, key facts with the price per m², description, features, the energy certificate with its efficiency class on the A+ to H scale, location, floor plan with room areas, purchase costs and an agent card with a QR code to the online listing.
- 210 × 297 mm
Betriebskostenabrechnung (utility cost statement)
A4A German annual utility cost statement for one flat in a DIN 5008 letter layout: each cost type is split by its allocation key (floor area, water meter, persons, units), heating costs come from the metering service, and the balance against the prepayments shows as a payment due or a refund.