Quote
Quote or estimate for agencies and service businesses: line items grouped into sections with subtotals, discount, tax, terms and a client acceptance block with signature lines. Multi-page with a repeating table header.
quote.pdf2 pages


Rendered by the engine from the sample data below.
Render it
curl "https://api.quirepdf.dev/v1/render?template=quote" \
-H "Authorization: Bearer $QUIRE_API_KEY" \
-H "Content-Type: application/json" \
-d @quote.json -o quote.pdfimport { Quire, type QuoteData } from "quirepdf";
const data: QuoteData = { /* … */ };
const pdf = await new Quire().render(data, { template: "quote" });from quirepdf import Quire
Quire().render(data, template="quote").save("quote.pdf")npx quirepdf-cli templates quote --sample > quote.json
npx quirepdf-cli render quote.json -t quoteEdit the sample in the playground
Fields
Required at the top level: number, issued, valid_until, seller, customer, sections. Everything else is optional.
| Field | Type | Notes |
|---|---|---|
numberRequired | string | Quote number, e.g. Q-2026-0057 |
status | "draft" | "sent" | "accepted" | "expired" | |
issuedRequired | string | Issue date, pre-formatted for display |
valid_untilRequired | string | Expiry date, pre-formatted for display |
currency | string | Currency symbol prefix |
accent | string | Brand colour, e.g. #c2410c |
sellerRequired | object | The business preparing the quote (shown as 'Prepared by') |
seller.nameRequired | string | |
seller.contact | string | Person responsible, e.g. 'Jonas Berg, Account Director' |
seller.email | string | |
seller.phone | string | |
seller.address | string[] | |
customerRequired | object | The client receiving the quote (shown as 'Prepared for') |
customer.nameRequired | string | |
customer.company | string | |
customer.address | string[] | |
customer.email | string | |
project | string | Short project title |
summary | string | One-paragraph project summary |
sectionsRequired | object[] | Line items grouped into sections. Use a single section without a title for an ungrouped quote. Titles and subtotals are shown when there is more than one section. |
sections[].title | string | |
sections[].note | string | Short muted text shown next to the section title |
sections[].itemsRequired | object[] | |
sections[].items[].descriptionRequired | string | |
sections[].items[].detail | string | |
sections[].items[].qtyRequired | number | |
sections[].items[].unit | string | Shown after the quantity, e.g. hrs, days |
sections[].items[].unit_priceRequired | number | |
discount | object | |
discount.labelRequired | string | |
discount.rateRequired | number | |
tax | object | |
tax.labelRequired | string | |
tax.rateRequired | number | |
terms | string[] | |
acceptance_note | string | Text above the signature lines. Defaults to a sign-and-return instruction. |
quote.jsonShow sample data
{
"number": "Q-2026-0057",
"status": "sent",
"issued": "3 Oct 2026",
"valid_until": "2 Nov 2026",
"currency": "£",
"accent": "#c2410c",
"seller": {
"name": "Kestrel Digital",
"contact": "Jonas Berg, Account Director",
"email": "[email protected]",
"phone": "+44 20 7946 0321",
"address": [
"12 Clerkenwell Green",
"London EC1R 0DP"
]
},
"customer": {
"name": "Sofia Marín",
"company": "Greenline Bikes Ltd.",
"address": [
"4 Canal Wharf",
"Bristol BS1 6QH"
],
"email": "[email protected]"
},
"project": "Website redesign and online booking",
"summary": "A refreshed brand website for Greenline Bikes with a new service-booking flow, so customers can book repairs and rentals online and pay a deposit up front. Delivered in three phases over roughly ten weeks.",
"sections": [
{
"title": "Discovery & strategy",
"items": [
{
"description": "Stakeholder workshops",
"detail": "Two half-day sessions with your team",
"qty": 2,
"unit": "sessions",
"unit_price": 850
},
{
"description": "Customer research",
"detail": "8 interviews plus synthesis report",
"qty": 1,
"unit_price": 2400
},
{
"description": "Content audit and sitemap",
"qty": 1,
"unit_price": 950
}
]
},
{
"title": "Design",
"items": [
{
"description": "UX wireframes",
"detail": "Up to 12 key page templates",
"qty": 12,
"unit": "pages",
"unit_price": 180
},
{
"description": "Visual design system",
"detail": "Type, colour, components, Figma library",
"qty": 1,
"unit_price": 3200
},
{
"description": "High-fidelity page designs",
"qty": 12,
"unit": "pages",
"unit_price": 260
}
]
},
{
"title": "Build & launch",
"items": [
{
"description": "Front-end development",
"detail": "Responsive, accessible, CMS-driven",
"qty": 96,
"unit": "hrs",
"unit_price": 95
},
{
"description": "Booking flow integration",
"detail": "Stripe deposits and calendar sync",
"qty": 1,
"unit_price": 2800
},
{
"description": "QA and accessibility testing",
"qty": 24,
"unit": "hrs",
"unit_price": 85
},
{
"description": "Launch support",
"detail": "Two weeks after go-live",
"qty": 1,
"unit_price": 1200
}
]
}
],
"discount": {
"label": "Returning client (5%)",
"rate": 0.05
},
"tax": {
"label": "VAT (20%)",
"rate": 0.2
},
"terms": [
"40% deposit on acceptance, 30% on design sign-off, 30% on launch.",
"Invoices are payable within 14 days.",
"Includes two rounds of revisions per phase; further changes are billed at £95/hr.",
"Third-party costs (hosting, fonts, plugins) are not included and will be passed on at cost.",
"This quote is valid for 30 days from the issue date."
]
}