Skip to content

8.5 × 11 in

Contracts

Equipment rental agreement

A US Letter equipment rental agreement: an equipment schedule with serial numbers, daily rates, days and return dates, a damage waiver, sales tax and refundable deposit calculated from the schedule, a condition checklist, short rental terms and signature blocks. Sample wording only.

Letter portraitLocale en-USHTML + JinjaHeader & footer

Opens Dynamic Document API with this template preloaded in a free workspace.

Template language features

  • Loops
  • Conditionals
  • Macros
  • Filters
  • Currency formatting
  • Date formatting
  • Repeating table headers
  • Header & footer
  • Page numbers

Filters such as format_currency and qrcode are described in the template language reference.

Variables

Derived from the sample data: 8 top-level fields, 44 paths in total. Send the same shape as data.

PathTypeExample
agreementobject
agreement.numberstring"RA-26-10582"
agreement.datedate"2026-09-17"
agreement.branchstring"Eastgate Yard"
agreement.currencystring"USD"
agreement.sample_noticestring"Sample wording for demonstration only, not leg…"
ownerobject
owner.namestring"Ridgeback Tool & Lift Rentals"
owner.addressstring"4410 Foundry Row ⏎ Columbus, OH 43219"
owner.phonestring"+1 202-555-0147"
owner.emailstring"rentals@ridgeback.example.com"
owner.representativestring"Marcus Tenbrook"
owner.representative_titlestring"Branch Manager"
renterobject
renter.namestring"Calloway Street Builders LLC"
renter.accountstring"CUST-20931"
renter.po_numberstring"CSB-PO-5561"
renter.contactstring"Denise Farraday"
renter.contact_titlestring"Site Superintendent"
renter.addressstring"1277 Kessler Park Dr, Suite 300 ⏎ Columbus, OH…"
renter.phonestring"+1 202-555-0183"
renter.emailstring"dfarraday@callowaystreet.example.com"
renter.jobsitestring"Riverside Library renovation ⏎ 915 Wexley Ave …"
rentalobject
rental.start_datedate"2026-09-21"
rental.daysnumber7
rental.handoverstring"Delivered to jobsite by 7:00 AM"
rental.return_methodstring"Collected from jobsite"
chargesobject
charges.damage_waiver_ratenumber0.12
charges.delivery_feenumber150
charges.sales_tax_ratenumber0.0625
charges.security_depositnumber750
equipmentarray<object> · 7
equipment[].descriptionstring"Electric scissor lift, 19 ft platform"
equipment[].serialstring"SL19-48213"
equipment[].asset_tagstring"RB-1042"
equipment[].daily_ratenumber145
equipment[].daysnumber7
equipment[].amountnumber1015
checklistarray<string> · 6"Hour meter or run-time reading recorded"
termsarray<object> · 7
terms[].titlestring"Use"
terms[].textstring"The Renter uses the equipment only at the jobs…"

Sample data

Fictional records used for previews. Replace them with your own data when you call the API.

data.json
{
  "agreement": {
    "number": "RA-26-10582",
    "date": "2026-09-17",
    "branch": "Eastgate Yard",
    "currency": "USD",
    "sample_notice": "Sample wording for demonstration only, not legal advice. Rental terms depend on state law and on your insurance, so have them reviewed before use."
  },
  "owner": {
    "name": "Ridgeback Tool & Lift Rentals",
    "address": "4410 Foundry Row\nColumbus, OH 43219",
    "phone": "+1 202-555-0147",
    "email": "rentals@ridgeback.example.com",
    "representative": "Marcus Tenbrook",
    "representative_title": "Branch Manager"
  },
  "renter": {
    "name": "Calloway Street Builders LLC",
    "account": "CUST-20931",
    "po_number": "CSB-PO-5561",
    "contact": "Denise Farraday",
    "contact_title": "Site Superintendent",
    "address": "1277 Kessler Park Dr, Suite 300\nColumbus, OH 43215",
    "phone": "+1 202-555-0183",
    "email": "dfarraday@callowaystreet.example.com",
    "jobsite": "Riverside Library renovation\n915 Wexley Ave\nColumbus, OH 43215"
  },
  "rental": {
    "start_date": "2026-09-21",
    "days": 7,
    "handover": "Delivered to jobsite by 7:00 AM",
    "return_method": "Collected from jobsite"
  },
  "charges": {
    "damage_waiver_rate": 0.12,
    "delivery_fee": 150.0,
    "sales_tax_rate": 0.0625,
    "security_deposit": 750.0
  },
  "equipment": [
    { "description": "Electric scissor lift, 19 ft platform", "serial": "SL19-48213", "asset_tag": "RB-1042", "daily_rate": 145.0, "days": 7, "amount": 1015.0 },
    { "description": "Towable air compressor, 185 CFM", "serial": "AC185-77120", "asset_tag": "RB-2210", "daily_rate": 118.0, "days": 5, "amount": 590.0 },
    { "description": "Walk-behind concrete saw, 14 in blade", "serial": "CS14-30981", "asset_tag": "RB-3307", "daily_rate": 89.0, "days": 3, "amount": 267.0 },
    { "description": "Portable generator, 7.5 kW", "serial": "GN75-11642", "asset_tag": "RB-1188", "daily_rate": 96.0, "days": 7, "amount": 672.0 },
    { "description": "Commercial dehumidifier, 150 pint", "serial": "DH150-66204", "asset_tag": "RB-4051", "daily_rate": 42.0, "days": 7, "amount": 294.0 },
    { "description": "Rotary laser level kit with tripod", "serial": "LL-58817", "asset_tag": "RB-5173", "daily_rate": 38.0, "days": 7, "amount": 266.0 },
    { "description": "Aluminum scaffold tower, 6 ft", "serial": "SC6-20436", "asset_tag": "RB-6014", "daily_rate": 27.5, "days": 7, "amount": 192.5 }
  ],
  "checklist": [
    "Hour meter or run-time reading recorded",
    "Fuel or battery charge level recorded",
    "No visible damage to body, guards, cables or tires",
    "Safety decals, manuals and operator guide present",
    "Keys, chargers and accessories accounted for",
    "Cleaned of concrete, mud and debris"
  ],
  "terms": [
    { "title": "Use", "text": "The Renter uses the equipment only at the jobsite shown above, for its intended purpose and in line with the manufacturer's instructions, and only lets trained people operate it." },
    { "title": "Care", "text": "The Renter keeps the equipment clean, secure and protected from the weather when it is not in use, and does not repair or modify it without the Owner's approval." },
    { "title": "Breakdowns", "text": "If equipment stops working safely, the Renter stops using it and tells the Owner the same day. Charges for that item pause until a repair or replacement is available." },
    { "title": "Return", "text": "Each item is due back on the date in the equipment schedule. Items returned late are charged at their daily rate for each extra day or part day." },
    { "title": "Damage waiver", "text": "The damage waiver covers accidental damage during normal use, less the first $250 of each repair. It does not cover loss, theft or misuse." },
    { "title": "Deposit", "text": "The security deposit is returned within 10 business days after all equipment is back in the condition recorded at handover, less any unpaid charges." },
    { "title": "Insurance", "text": "The Renter keeps general liability insurance in place for the rental period and provides a certificate to the Owner on request." }
  ]
}

Source

The body markup with Jinja, the stylesheet placed in <head> and the header and footer settings.

{#- Equipment rental agreement (US Letter). Charges are derived from the schedule; sample wording only. -#}
{%- set locale = "en-US" -%}
{%- set currency = agreement.currency -%}
{%- set subtotal = equipment | sum_by("amount") -%}
{%- set waiver = (subtotal * charges.damage_waiver_rate) | round(2) -%}
{%- set taxable = subtotal + waiver + charges.delivery_fee -%}
{%- set sales_tax = (taxable * charges.sales_tax_rate) | round(2) -%}
{%- set rental_total = taxable + sales_tax -%}
{%- set due_at_start = rental_total + charges.security_deposit -%}
{%- set return_by = rental.start_date | date_add(days=rental.days) -%}

{%- macro money(value) -%}{{ value | format_currency(currency, locale) }}{%- endmacro -%}

{%- macro signature_block(label, organisation, name, title) -%}
<div class="sign">
  <p class="label">{{ label }}</p>
  <p class="sign-org">{{ organisation }}</p>
  <div class="sign-line tall"><span>Signature</span></div>
  <div class="sign-row">
    <div class="sign-line"><span>Printed name</span><em>{{ name }}</em></div>
    <div class="sign-line"><span>Date</span></div>
  </div>
  <p class="sign-title">{{ title }}</p>
</div>
{%- endmacro %}

<header class="masthead">
  <div class="brand">
    <svg class="logo" viewBox="0 0 44 44" aria-hidden="true">
      <rect width="44" height="44" rx="6" fill="#e38b06"/>
      <path d="M9 32h26M13 32V20l9-8 9 8v12" fill="none" stroke="#2b3035" stroke-width="3.2" stroke-linejoin="round"/>
      <path d="M19 32v-7h6v7" fill="none" stroke="#2b3035" stroke-width="3.2" stroke-linejoin="round"/>
    </svg>
    <div>
      <p class="brand-name">{{ owner.name }}</p>
      <p class="brand-meta">{{ agreement.branch }} · {{ owner.phone }} · {{ owner.email }}</p>
    </div>
  </div>
  <div class="doc-id">
    <h1 class="doc-type">Equipment rental agreement</h1>
    <p class="doc-number">{{ agreement.number }}</p>
    <p class="doc-date">{{ agreement.date | format_date("long", locale) }}</p>
  </div>
</header>

<p class="sample">{{ agreement.sample_notice }}</p>

<section class="parties">
  <div>
    <p class="label">Owner</p>
    <p class="strong">{{ owner.name }}</p>
    <p>{{ owner.address | nl2br }}</p>
  </div>
  <div>
    <p class="label">Renter</p>
    <p class="strong">{{ renter.name }}</p>
    <p>{{ renter.address | nl2br }}</p>
    <p class="muted">{{ renter.contact }}, {{ renter.contact_title }} · {{ renter.phone }}</p>
    <p class="muted">Account {{ renter.account }}{% if renter.po_number %} · PO {{ renter.po_number }}{% endif %}</p>
  </div>
  <div>
    <p class="label">Jobsite</p>
    <p>{{ renter.jobsite | nl2br }}</p>
  </div>
</section>

<section class="period">
  <div class="period-cell">
    <span class="label">Rental starts</span>
    <strong>{{ rental.start_date | format_date("%a, %b %d, %Y", locale) }}</strong>
    <span class="muted">{{ rental.handover }}</span>
  </div>
  <div class="arrow">
    <span class="days">{{ rental.days }} days</span>
  </div>
  <div class="period-cell">
    <span class="label">Return by</span>
    <strong>{{ return_by | format_date("%a, %b %d, %Y", locale) }}</strong>
    <span class="muted">{{ rental.return_method }}</span>
  </div>
</section>

<h2 class="section-title">Equipment schedule</h2>
<table class="schedule">
  <thead>
    <tr>
      <th class="idx" scope="col">#</th>
      <th scope="col">Equipment</th>
      <th scope="col">Serial no.</th>
      <th class="num" scope="col">Daily rate</th>
      <th class="num" scope="col">Days</th>
      <th scope="col">Due back</th>
      <th class="num" scope="col">Amount</th>
    </tr>
  </thead>
  <tbody>
    {%- for item in equipment %}
    <tr>
      <td class="idx">{{ loop.index }}</td>
      <td><strong>{{ item.description }}</strong><span class="asset">Asset tag {{ item.asset_tag }}</span></td>
      <td class="mono">{{ item.serial }}</td>
      <td class="num">{{ money(item.daily_rate) }}</td>
      <td class="num">{{ item.days }}</td>
      <td class="date">{{ rental.start_date | date_add(days=item.days) | format_date("%b %d", locale) }}</td>
      <td class="num">{{ money(item.amount) }}</td>
    </tr>
    {%- endfor %}
  </tbody>
</table>

<section class="charges">
  <div class="deposit-note">
    <p class="label">Payment at handover</p>
    <p>The rental charges and the refundable security deposit of <strong>{{ money(charges.security_deposit) }}</strong> are collected before the equipment leaves {{ agreement.branch }}. The deposit is held separately and returned as described in the Deposit term below.</p>
  </div>
  <table class="totals">
    <tr><th scope="row">Equipment rental</th><td class="num">{{ money(subtotal) }}</td></tr>
    <tr><th scope="row">Damage waiver ({{ charges.damage_waiver_rate | format_percent(locale) }} of rental)</th><td class="num">{{ money(waiver) }}</td></tr>
    <tr><th scope="row">Delivery and collection</th><td class="num">{{ money(charges.delivery_fee) }}</td></tr>
    <tr><th scope="row">Sales tax ({{ charges.sales_tax_rate | format_percent(locale, 2) }})</th><td class="num">{{ money(sales_tax) }}</td></tr>
    <tr class="subtotal"><th scope="row">Rental charges</th><td class="num">{{ money(rental_total) }}</td></tr>
    <tr><th scope="row">Security deposit (refundable)</th><td class="num">{{ money(charges.security_deposit) }}</td></tr>
    <tr class="grand"><th scope="row">Due at handover</th><td class="num">{{ money(due_at_start) }}</td></tr>
  </table>
</section>

<section class="checklist">
  <h2 class="section-title">Condition checklist</h2>
  <table class="check-table">
    <thead>
      <tr>
        <th scope="col">Check for every item</th>
        <th class="tick" scope="col">At handover</th>
        <th class="tick" scope="col">At return</th>
        <th scope="col">Notes</th>
      </tr>
    </thead>
    <tbody>
      {%- for check in checklist %}
      <tr>
        <td>{{ check }}</td>
        <td class="tick"><span class="box" role="img" aria-label="Checkbox"></span></td>
        <td class="tick"><span class="box" role="img" aria-label="Checkbox"></span></td>
        <td class="notes blank"></td>
      </tr>
      {%- endfor %}
    </tbody>
  </table>
</section>

<section class="terms">
  <h2 class="section-title">Rental terms</h2>
  <ol>
    {%- for term in terms %}
    <li><span class="term-no">{{ loop.index }}</span><p><strong>{{ term.title }}.</strong> {{ term.text }}</p></li>
    {%- endfor %}
  </ol>
</section>

<section class="signatures">
  <p class="agree">By signing, both parties agree to the equipment schedule, charges and rental terms in agreement {{ agreement.number }}.</p>
  <div class="sign-grid">
    {{ signature_block("For the owner", owner.name, owner.representative, owner.representative_title) }}
    {{ signature_block("For the renter", renter.name, renter.contact, renter.contact_title) }}
  </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": {
    "agreement": {
      "number": "RA-26-10582",
      "date": "2026-09-17",
      "branch": "Eastgate Yard",
      "currency": "USD",
      "sample_notice": "Sample wording for demonstration only, not legal advice. Rental terms depend on state law and on your insurance, so have them reviewed before use."
    },
    "owner": {
      "name": "Ridgeback Tool & Lift Rentals",
      "address": "4410 Foundry Row\nColumbus, OH 43219",
      "phone": "+1 202-555-0147",
      "email": "rentals@ridgeback.example.com",
      "representative": "Marcus Tenbrook",
      "representative_title": "Branch Manager"
    },
    "renter": {
      "name": "Calloway Street Builders LLC",
      "account": "CUST-20931",
      "po_number": "CSB-PO-5561",
      "contact": "Denise Farraday",
      "contact_title": "Site Superintendent",
      "address": "1277 Kessler Park Dr, Suite 300\nColumbus, OH 43215",
      "phone": "+1 202-555-0183",
      "email": "dfarraday@callowaystreet.example.com",
      "jobsite": "Riverside Library renovation\n915 Wexley Ave\nColumbus, OH 43215"
    },
    "rental": {
      "start_date": "2026-09-21",
      "days": 7,
      "handover": "Delivered to jobsite by 7:00 AM",
      "return_method": "Collected from jobsite"
    },
    "charges": {
      "damage_waiver_rate": 0.12,
      "delivery_fee": 150,
      "sales_tax_rate": 0.0625,
      "security_deposit": 750
    },
    "equipment": [
      {
        "description": "Electric scissor lift, 19 ft platform",
        "serial": "SL19-48213",
        "asset_tag": "RB-1042",
        "daily_rate": 145,
        "days": 7,
        "amount": 1015
      },
      {
        "description": "Towable air compressor, 185 CFM",
        "serial": "AC185-77120",
        "asset_tag": "RB-2210",
        "daily_rate": 118,
        "days": 5,
        "amount": 590
      }
    ],
    "checklist": [
      "Hour meter or run-time reading recorded",
      "Fuel or battery charge level recorded"
    ],
    "terms": [
      {
        "title": "Use",
        "text": "The Renter uses the equipment only at the jobsite shown above, for its intended purpose and in line with the manufacturer'\''s instructions, and only lets trained people operate it."
      },
      {
        "title": "Care",
        "text": "The Renter keeps the equipment clean, secure and protected from the weather when it is not in use, and does not repair or modify it without the Owner'\''s approval."
      }
    ]
  },
  "output": {
    "format": "pdf",
    "filename": "contract-equipment-rental.pdf"
  }
}'