210 × 297 mm
Quotes & estimates
Project proposal
An A4 project proposal that is easy to edit visually: a letterhead header, key facts, a phase table that repeats per phase, an optional early-signature discount, terms, two signature lines and page numbers.
Opens Dynamic Document API with this template preloaded in a free workspace.
Template language features
- Loops
- Conditionals
- Currency formatting
- Date formatting
- Header & footer
- Page numbers
- Repeating table headers
- signature
- columns
Filters such as format_currency and qrcode are described in the template language reference.
Variables
Derived from the sample data: 6 top-level fields, 27 paths in total. Send the same shape as data.
| Path | Type | Example |
|---|---|---|
| agency | object | |
| agency.name | string | "Northlight Studio" |
| agency.lead | string | "Ines Marlow" |
| agency.lead_title | string | "Creative Director" |
| agency.email | string | "hello@northlight.example.com" |
| agency.website | string | "northlight.example.com" |
| client | object | |
| client.name | string | "Brightwater Cycles Ltd." |
| client.contact | string | "Tom Aldridge" |
| proposal | object | |
| proposal.number | string | "P-2026-031" |
| proposal.title | string | "Website relaunch and booking flow" |
| proposal.issued_on | date | "2026-09-14" |
| proposal.valid_until | date | "2026-10-14" |
| proposal.summary | string | "Brightwater Cycles wants its rental bookings o…" |
| proposal.note | string | "Hosting and third-party licences are not inclu…" |
| phases | array<object> · 4 | |
| phases[].name | string | "Discovery" |
| phases[].description | string | "Interviews with shop staff and 8 customers, an…" |
| phases[].weeks | number | 2 |
| phases[].fee | number | 4800 |
| totals | object | |
| totals.weeks | number | 14 |
| totals.subtotal | number | 41000 |
| totals.discount | number | 2050 |
| totals.total | number | 38950 |
| terms | array<string> · 4 | "40 % is invoiced on signature, 30 % after the …" |
Sample data
Fictional records used for previews. Replace them with your own data when you call the API.
{
"agency": {
"name": "Northlight Studio",
"lead": "Ines Marlow",
"lead_title": "Creative Director",
"email": "hello@northlight.example.com",
"website": "northlight.example.com"
},
"client": {
"name": "Brightwater Cycles Ltd.",
"contact": "Tom Aldridge"
},
"proposal": {
"number": "P-2026-031",
"title": "Website relaunch and booking flow",
"issued_on": "2026-09-14",
"valid_until": "2026-10-14",
"summary": "Brightwater Cycles wants its rental bookings online. We propose a four-phase project: research with your shop staff, a new visual design, a booking flow connected to your stock system, and a supported launch. Every phase ends with a review, so you can stop after any phase and keep the results.",
"note": "Hosting and third-party licences are not included and are billed at cost after written approval."
},
"phases": [
{
"name": "Discovery",
"description": "Interviews with shop staff and 8 customers, analytics review, booking journey map.",
"weeks": 2,
"fee": 4800.0
},
{
"name": "Design",
"description": "Design system, 12 key screens, clickable prototype, two feedback rounds.",
"weeks": 4,
"fee": 11200.0
},
{
"name": "Build",
"description": "Responsive site, booking flow with stock sync, CMS set-up, accessibility check.",
"weeks": 6,
"fee": 21600.0
},
{
"name": "Launch and support",
"description": "Migration, staff training, 30 days of priority support.",
"weeks": 2,
"fee": 3400.0
}
],
"totals": {
"weeks": 14,
"subtotal": 41000.0,
"discount": 2050.0,
"total": 38950.0
},
"terms": [
"40 % is invoiced on signature, 30 % after the design phase and 30 % at launch; invoices are due within 14 days.",
"Two feedback rounds per phase are included; further rounds are billed at €95 per hour.",
"You own all designs and source code once the final invoice is paid.",
"Either party can end the project after any phase review with 10 days' written notice."
]
}Source
The body markup with Jinja, the stylesheet placed in <head> and the header and footer settings.
<h1>{{ proposal.title }}</h1>
<p>Prepared for <strong>{{ client.name }}</strong> · {{ client.contact }}</p>
<table class="facts">
<tbody>
<tr>
<th scope="row">Proposal no.</th>
<td>{{ proposal.number }}</td>
<th scope="row">Issued</th>
<td>{{ proposal.issued_on | format_date("long", "en-GB") }}</td>
</tr>
<tr>
<th scope="row">Valid until</th>
<td>{{ proposal.valid_until | format_date("long", "en-GB") }}</td>
<th scope="row">Project lead</th>
<td>{{ agency.lead }}</td>
</tr>
</tbody>
</table>
<h2>Summary</h2>
<p>{{ proposal.summary }}</p>
<h2>Scope and fees</h2>
<table class="phases">
<thead>
<tr>
<th scope="col">Phase</th>
<th class="duration" scope="col">Duration</th>
<th class="fee" scope="col">Fee</th>
</tr>
</thead>
<tbody>
{% for phase in phases %}
<tr>
<td>
<p class="phase-name">{{ phase.name }}</p>
<p class="phase-note">{{ phase.description }}</p>
</td>
<td class="duration">{{ phase.weeks }} weeks</td>
<td class="fee">{{ phase.fee | format_currency("EUR", "en-GB") }}</td>
</tr>
{% endfor %}
<tr class="subtotal">
<td>Subtotal</td>
<td class="duration">{{ totals.weeks }} weeks</td>
<td class="fee">{{ totals.subtotal | format_currency("EUR", "en-GB") }}</td>
</tr>
</tbody>
</table>
{% if totals.discount %}<p class="right">Early-signature discount: {{ totals.discount | format_currency("EUR", "en-GB") }} when signed by {{ proposal.valid_until | format_date("long", "en-GB") }}.</p>{% endif %}
<p class="total">Total excl. VAT: {{ totals.total | format_currency("EUR", "en-GB") }}</p>
{% if proposal.note %}<p class="note">{{ proposal.note }}</p>{% endif %}
<h2>Terms</h2>
<ul class="terms">
{% for term in terms %}
<li>{{ term }}</li>
{% endfor %}
</ul>
<div class="acceptance">
<h2>Acceptance</h2>
<p>Signing below confirms the scope, fees and terms of this proposal.</p>
<div class="signatures">
<div>
<p class="signature">For the agency</p>
<p class="signature date">Date</p>
<p>{{ agency.lead }}<br><span class="muted">{{ agency.lead_title }}</span></p>
</div>
<div>
<p class="signature">For the client</p>
<p class="signature date">Date</p>
<p>{{ client.contact }}</p>
</div>
</div>
</div><title>Proposal {{ proposal.number }}: {{ proposal.title }}</title>
<style>
* { box-sizing: border-box; }
body {
margin: 0;
font-family: "Inter", "Liberation Sans", Arial, sans-serif;
font-size: 10pt;
line-height: 1.5;
color: #1f2937;
-webkit-print-color-adjust: exact;
print-color-adjust: exact;
}
h1, h2 {
margin: 17pt 0 5pt;
font-weight: 700;
line-height: 1.25;
color: #111827;
break-after: avoid;
}
h1 { margin-top: 0; font-size: 20pt; letter-spacing: -0.01em; }
h2 { font-size: 17.5pt; }
p { margin: 0 0 5pt; }
table { width: 100%; border-collapse: collapse; margin-bottom: 10pt; }
th, td { padding: 0; text-align: left; vertical-align: top; }
.muted { color: #6b7280; }
.right { text-align: right; }
/* Proposal number, dates and project lead */
.facts th { width: 1%; padding: 0 1.2em 0.3em 0; font-weight: 400; color: #6b7280; white-space: nowrap; }
.facts td { width: 49%; padding: 0 1.2em 0.3em 0; }
/* Phases with duration and fee */
.phases thead { display: table-header-group; }
.phases th, .phases td { padding: 0.45em 0.6em; border-bottom: 0.75pt solid #e5e7eb; }
.phases th { background: #eef2ff; font-weight: 600; color: #111827; }
.phases tbody tr:nth-child(even) td { background: #f8f9ff; }
.phases tr { break-inside: avoid; }
.phases .duration, .phases .fee { text-align: right; white-space: nowrap; }
.phase-name { font-weight: 700; }
.phase-note { margin: 0; font-size: 9pt; color: #6b7280; }
.phases .subtotal td:first-child, .phases .subtotal .fee { font-weight: 700; }
.total { margin-top: 2mm; text-align: right; font-size: 12pt; font-weight: 700; }
.note {
margin: 0 0 10pt;
padding: 0.75em 1em;
border-left: 3pt solid #2f6fde;
border-radius: 2pt;
background: #eef3fd;
}
/* Terms as a dashed list */
.terms { margin: 0; padding: 0; list-style: none; }
.terms li { margin-bottom: 5pt; }
.terms li::before { content: "— "; }
/* Acceptance and signature lines */
.acceptance { break-inside: avoid; }
.acceptance h2 { margin-top: 8mm; }
.signatures { display: grid; grid-template-columns: 1fr 1fr; gap: 12mm; margin-top: 11.5mm; }
.signature {
width: 70mm;
margin: 11mm 0 0;
padding-top: 0.35em;
border-top: 0.75pt solid #1f2937;
font-size: 8.5pt;
color: #6b7280;
}
.signature.date { width: 38mm; margin: 14.5mm 0 4mm; }
</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": {
"agency": {
"name": "Northlight Studio",
"lead": "Ines Marlow",
"lead_title": "Creative Director",
"email": "hello@northlight.example.com",
"website": "northlight.example.com"
},
"client": {
"name": "Brightwater Cycles Ltd.",
"contact": "Tom Aldridge"
},
"proposal": {
"number": "P-2026-031",
"title": "Website relaunch and booking flow",
"issued_on": "2026-09-14",
"valid_until": "2026-10-14",
"summary": "Brightwater Cycles wants its rental bookings online. We propose a four-phase project: research with your shop staff, a new visual design, a booking flow connected to your stock system, and a supported launch. Every phase ends with a review, so you can stop after any phase and keep the results.",
"note": "Hosting and third-party licences are not included and are billed at cost after written approval."
},
"phases": [
{
"name": "Discovery",
"description": "Interviews with shop staff and 8 customers, analytics review, booking journey map.",
"weeks": 2,
"fee": 4800
},
{
"name": "Design",
"description": "Design system, 12 key screens, clickable prototype, two feedback rounds.",
"weeks": 4,
"fee": 11200
}
],
"totals": {
"weeks": 14,
"subtotal": 41000,
"discount": 2050,
"total": 38950
},
"terms": [
"40 % is invoiced on signature, 30 % after the design phase and 30 % at launch; invoices are due within 14 days.",
"Two feedback rounds per phase are included; further rounds are billed at €95 per hour."
]
},
"output": {
"format": "pdf",
"filename": "quote-project-proposal.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": {
"agency": {
"name": "Northlight Studio",
"lead": "Ines Marlow",
"lead_title": "Creative Director",
"email": "hello@northlight.example.com",
"website": "northlight.example.com"
},
"client": {
"name": "Brightwater Cycles Ltd.",
"contact": "Tom Aldridge"
},
"proposal": {
"number": "P-2026-031",
"title": "Website relaunch and booking flow",
"issued_on": "2026-09-14",
"valid_until": "2026-10-14",
"summary": "Brightwater Cycles wants its rental bookings online. We propose a four-phase project: research with your shop staff, a new visual design, a booking flow connected to your stock system, and a supported launch. Every phase ends with a review, so you can stop after any phase and keep the results.",
"note": "Hosting and third-party licences are not included and are billed at cost after written approval."
},
"phases": [
{
"name": "Discovery",
"description": "Interviews with shop staff and 8 customers, analytics review, booking journey map.",
"weeks": 2,
"fee": 4800
},
{
"name": "Design",
"description": "Design system, 12 key screens, clickable prototype, two feedback rounds.",
"weeks": 4,
"fee": 11200
}
],
"totals": {
"weeks": 14,
"subtotal": 41000,
"discount": 2050,
"total": 38950
},
"terms": [
"40 % is invoiced on signature, 30 % after the design phase and 30 % at launch; invoices are due within 14 days.",
"Two feedback rounds per phase are included; further rounds are billed at €95 per hour."
]
},
"output": {
"format": "pdf",
"filename": "quote-project-proposal.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": {
"agency": {
"name": "Northlight Studio",
"lead": "Ines Marlow",
"lead_title": "Creative Director",
"email": "hello@northlight.example.com",
"website": "northlight.example.com",
},
"client": {
"name": "Brightwater Cycles Ltd.",
"contact": "Tom Aldridge",
},
"proposal": {
"number": "P-2026-031",
"title": "Website relaunch and booking flow",
"issued_on": "2026-09-14",
"valid_until": "2026-10-14",
"summary": "Brightwater Cycles wants its rental bookings online. We propose a four-phase project: research with your shop staff, a new visual design, a booking flow connected to your stock system, and a supported launch. Every phase ends with a review, so you can stop after any phase and keep the results.",
"note": "Hosting and third-party licences are not included and are billed at cost after written approval.",
},
"phases": [
{
"name": "Discovery",
"description": "Interviews with shop staff and 8 customers, analytics review, booking journey map.",
"weeks": 2,
"fee": 4800,
},
{
"name": "Design",
"description": "Design system, 12 key screens, clickable prototype, two feedback rounds.",
"weeks": 4,
"fee": 11200,
},
],
"totals": {
"weeks": 14,
"subtotal": 41000,
"discount": 2050,
"total": 38950,
},
"terms": ["40 % is invoiced on signature, 30 % after the design phase and 30 % at launch; invoices are due within 14 days.", "Two feedback rounds per phase are included; further rounds are billed at €95 per hour."],
},
"output": {
"format": "pdf",
"filename": "quote-project-proposal.pdf",
},
},
timeout=90,
)
response.raise_for_status()
print(response.json())More quotes & estimates templates
- 8.5 × 11 in
Product bundle quote
LetterA US Letter sales quote for hardware bundles with SKUs, services and volume discount lines shown as negative amounts. Totals include a shipping estimate and optional tax exemption, and a QR code links to the online acceptance page.
- 210 × 297 mm
Phased project estimate
A4An A4 estimate for agencies and studios that plan work in phases. Tasks sit inside each phase with days and day rates, optional extras are listed separately and left out of the total, and it adds a timeline, payment schedule, assumptions and a signature block.