Skip to content

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.

A4 portraitLocale en-GBHTML + JinjaHeader & footer

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.

PathTypeExample
clerk_companyobject
clerk_company.namestring"Tidemark Inventories"
clerk_company.emailstring"reports@tidemark.example.com"
clerk_company.websitestring"tidemark.example.com"
reportobject
report.referencestring"TMI-26-3318"
report.typestring"Inventory and check-in"
report.datedate"2026-09-30T10:00:00+01:00"
report.timezonestring"Europe/London"
report.clerkstring"Joanna Feld"
report.photos_urlstring"https://tidemark.example.com/r/TMI-26-3318"
report.overall_cleanlinessstring"Professionally cleaned throughout, including c…"
report.overall_decorationstring"Living room redecorated in August 2026; other …"
propertyobject
property.addressstring"Flat 4, 18 Larchfield Road ⏎ Bristol BS6 5XY"
property.descriptionstring"Two-bedroom first-floor flat, furnished"
property.landlordstring"Helen Prescott"
property.agentstring"Kittiwake Lettings, Clifton"
tenancyobject
tenancy.start_datedate"2026-10-01"
tenancy.tenantsarray<string> · 2"Amara Osei"
metersarray<object> · 3
meters[].typestring"Electricity"
meters[].serialstring"E14Z 093 2271"
meters[].readingstring"48213"
meters[].unitstring"kWh"
meters[].locationstring"Hall cupboard"
keysarray<object> · 5
keys[].descriptionstring"Front door, Yale latch"
keys[].countnumber2
alarmsarray<object> · 3
alarms[].typestring"Smoke alarm"
alarms[].locationstring"Entrance hall"
alarms[].resultstring"pass"
roomsarray<object> · 6
rooms[].namestring"Entrance hall"
rooms[].itemsarray<object> · 5
rooms[].items[].itemstring"Front door"
rooms[].items[].descriptionstring"White painted timber door with spy hole, chrom…"
rooms[].items[].conditionstring"good"
rooms[].items[].cleanlinessstring"clean"
rooms[].items[].photos?array<number> · 21
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.

data.json
{
  "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>

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"
  }
}'