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.
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.
| Path | Type | Example |
|---|---|---|
| agreement | object | |
| agreement.number | string | "RA-26-10582" |
| agreement.date | date | "2026-09-17" |
| agreement.branch | string | "Eastgate Yard" |
| agreement.currency | string | "USD" |
| agreement.sample_notice | string | "Sample wording for demonstration only, not leg…" |
| owner | object | |
| owner.name | string | "Ridgeback Tool & Lift Rentals" |
| owner.address | string | "4410 Foundry Row ⏎ Columbus, OH 43219" |
| owner.phone | string | "+1 202-555-0147" |
| owner.email | string | "rentals@ridgeback.example.com" |
| owner.representative | string | "Marcus Tenbrook" |
| owner.representative_title | string | "Branch Manager" |
| renter | object | |
| renter.name | string | "Calloway Street Builders LLC" |
| renter.account | string | "CUST-20931" |
| renter.po_number | string | "CSB-PO-5561" |
| renter.contact | string | "Denise Farraday" |
| renter.contact_title | string | "Site Superintendent" |
| renter.address | string | "1277 Kessler Park Dr, Suite 300 ⏎ Columbus, OH…" |
| renter.phone | string | "+1 202-555-0183" |
| renter.email | string | "dfarraday@callowaystreet.example.com" |
| renter.jobsite | string | "Riverside Library renovation ⏎ 915 Wexley Ave …" |
| rental | object | |
| rental.start_date | date | "2026-09-21" |
| rental.days | number | 7 |
| rental.handover | string | "Delivered to jobsite by 7:00 AM" |
| rental.return_method | string | "Collected from jobsite" |
| charges | object | |
| charges.damage_waiver_rate | number | 0.12 |
| charges.delivery_fee | number | 150 |
| charges.sales_tax_rate | number | 0.0625 |
| charges.security_deposit | number | 750 |
| equipment | array<object> · 7 | |
| equipment[].description | string | "Electric scissor lift, 19 ft platform" |
| equipment[].serial | string | "SL19-48213" |
| equipment[].asset_tag | string | "RB-1042" |
| equipment[].daily_rate | number | 145 |
| equipment[].days | number | 7 |
| equipment[].amount | number | 1015 |
| checklist | array<string> · 6 | "Hour meter or run-time reading recorded" |
| terms | array<object> · 7 | |
| terms[].title | string | "Use" |
| terms[].text | string | "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.
{
"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><title>Equipment rental agreement {{ agreement.number }}</title>
<style>
:root {
--ink: #24282d;
--charcoal: #2b3035;
--muted: #646b73;
--rule: #d9dcdf;
--soft: #f5f2ec;
--amber: #e38b06;
--amber-soft: #fdf1dc;
}
* { 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.8pt;
line-height: 1.45;
}
p { margin: 0; }
.muted { color: var(--muted); }
.strong { font-weight: 700; }
.mono { font-family: "Liberation Mono", "DejaVu Sans Mono", monospace; font-size: 8pt; }
.label {
display: block;
margin-bottom: 1mm;
font-size: 6.8pt;
font-weight: 700;
letter-spacing: 0.1em;
text-transform: uppercase;
color: var(--muted);
}
.section-title {
margin: 0 0 2.5mm;
padding-left: 2.5mm;
border-left: 1.2mm solid var(--amber);
font-size: 10.5pt;
font-weight: 700;
line-height: 1.2;
break-after: avoid;
page-break-after: avoid;
}
/* Masthead */
.masthead {
display: flex;
justify-content: space-between;
align-items: center;
padding: 5mm 6mm;
border-bottom: 1.2mm solid var(--amber);
background: var(--charcoal);
color: #ffffff;
}
.brand { display: flex; align-items: center; gap: 3.5mm; }
.logo { width: 12mm; height: 12mm; }
.brand-name { font-size: 13pt; font-weight: 700; line-height: 1.2; }
.brand-meta { font-size: 7.6pt; color: #c9cdd1; }
.doc-id { text-align: right; }
.doc-type { margin: 0; font-size: 7pt; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: var(--amber); }
.doc-number { font-size: 15pt; font-weight: 700; line-height: 1.2; }
.doc-date { font-size: 7.6pt; color: #c9cdd1; }
.sample { margin: 2.5mm 0 5mm; font-size: 7.4pt; font-style: italic; color: var(--muted); }
.parties { display: grid; grid-template-columns: 1fr 1.35fr 1fr; gap: 7mm; }
/* Rental period */
.period {
display: grid;
grid-template-columns: 1fr 34mm 1fr;
align-items: center;
margin: 5mm 0 6mm;
padding: 3.5mm 5mm;
border-radius: 2mm;
background: var(--amber-soft);
}
.period-cell strong { display: block; font-size: 11pt; }
.period-cell .muted { display: block; font-size: 7.8pt; }
.period-cell:last-child { text-align: right; }
.arrow { position: relative; height: 8mm; }
.arrow::before {
content: "";
position: absolute;
top: 50%;
left: 2mm;
right: 3mm;
border-top: 0.5mm solid var(--amber);
}
.arrow::after {
content: "";
position: absolute;
top: 50%;
right: 2mm;
width: 2.4mm;
height: 2.4mm;
margin-top: -1.2mm;
border-top: 0.5mm solid var(--amber);
border-right: 0.5mm solid var(--amber);
transform: rotate(45deg);
}
.days {
position: absolute;
top: 50%;
left: 50%;
padding: 0.3mm 2mm;
border-radius: 3mm;
background: var(--charcoal);
color: #ffffff;
font-size: 7.4pt;
font-weight: 700;
white-space: nowrap;
transform: translate(-50%, -50%);
}
/* Tables */
table { width: 100%; border-collapse: collapse; }
thead { display: table-header-group; }
th {
padding: 1.8mm 2mm;
border-bottom: 0.4mm solid var(--charcoal);
font-size: 6.8pt;
font-weight: 700;
letter-spacing: 0.08em;
text-align: left;
text-transform: uppercase;
color: var(--muted);
}
td { padding: 2.2mm 2mm; border-bottom: 0.2mm solid var(--rule); vertical-align: top; }
tr { break-inside: avoid; page-break-inside: avoid; }
.num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
th.num { text-align: right; }
.idx { width: 6mm; color: var(--muted); }
.date { white-space: nowrap; }
.asset { display: block; font-size: 7.4pt; color: var(--muted); }
/* Charges */
.charges {
display: grid;
grid-template-columns: 1fr 84mm;
gap: 9mm;
margin-top: 5mm;
break-inside: avoid;
page-break-inside: avoid;
}
.deposit-note { align-self: end; padding: 3.5mm 4mm; border: 0.3mm dashed #c3c7cb; border-radius: 2mm; font-size: 8pt; color: var(--muted); }
.deposit-note strong { color: var(--ink); }
.totals th { font-size: inherit; font-weight: inherit; letter-spacing: normal; text-transform: none; color: inherit; vertical-align: top; }
.totals td, .totals th { padding: 1.3mm 2mm; border-bottom: none; }
.totals .subtotal td, .totals .subtotal th { border-top: 0.3mm solid var(--charcoal); font-weight: 700; }
.totals .grand td, .totals .grand th {
padding: 2.4mm 2mm;
background: var(--charcoal);
color: #ffffff;
font-size: 11pt;
font-weight: 700;
}
.totals .grand th { border-left: 1.2mm solid var(--amber); }
/* Checklist */
.checklist { margin-top: 8mm; break-inside: avoid; page-break-inside: avoid; }
.check-table td { padding: 2mm; vertical-align: middle; }
.check-table .tick { width: 24mm; text-align: center; }
.check-table .notes { width: 62mm; }
/* Empty cells paint white inside their padding, so the tagged PDF keeps them in the table structure (PDF/UA)
without painting over the row edges. */
.check-table .blank { background: #ffffff content-box; }
.box { display: inline-block; width: 4.2mm; height: 4.2mm; border: 0.35mm solid var(--charcoal); border-radius: 0.6mm; }
/* Terms */
.terms { margin-top: 7mm; }
.terms ol { columns: 2; column-gap: 9mm; margin: 0; padding: 0; list-style: none; }
.terms li {
display: grid;
grid-template-columns: 6mm 1fr;
margin-bottom: 2.2mm;
font-size: 8pt;
line-height: 1.45;
break-inside: avoid;
page-break-inside: avoid;
}
.term-no { font-weight: 700; color: var(--amber); }
/* Signatures */
.signatures { margin-top: 6mm; break-inside: avoid; page-break-inside: avoid; }
.agree { margin-bottom: 4mm; font-size: 8.4pt; }
.sign-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10mm; }
.sign { padding: 4mm; border: 0.3mm solid var(--rule); border-top: 1mm solid var(--charcoal); }
.sign-org { font-weight: 700; }
.sign-row { display: grid; grid-template-columns: 1.6fr 1fr; gap: 4mm; }
.sign-line { display: flex; align-items: flex-end; gap: 2mm; height: 10mm; border-bottom: 0.3mm solid var(--ink); }
.sign-line.tall { height: 16mm; }
.sign-line span { padding-bottom: 0.8mm; font-size: 6.4pt; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); white-space: nowrap; }
.sign-line em { padding-bottom: 0.8mm; font-style: normal; }
.sign-title { margin-top: 1.2mm; font-size: 7.6pt; color: var(--muted); }
</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": {
"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"
}
}'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": {
"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"
}
}),
});
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": {
"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",
},
},
timeout=90,
)
response.raise_for_status()
print(response.json())