Invoice
Clean, modern invoice with line items, discount, tax, amount-due panel and payment details. Multi-page with a repeating table header.
invoice.pdf1 page

Rendered by the engine from the sample data below.
Render it
curl "https://api.quirepdf.dev/v1/render?template=invoice" \
-H "Authorization: Bearer $QUIRE_API_KEY" \
-H "Content-Type: application/json" \
-d @invoice.json -o invoice.pdfimport { Quire, type InvoiceData } from "quirepdf";
const data: InvoiceData = { /* … */ };
const pdf = await new Quire().render(data, { template: "invoice" });from quirepdf import Quire
Quire().render(data, template="invoice").save("invoice.pdf")npx quirepdf-cli templates invoice --sample > invoice.json
npx quirepdf-cli render invoice.json -t invoiceEdit the sample in the playground
Fields
Required at the top level: number, issued, due, seller, customer, items. Everything else is optional.
| Field | Type | Notes |
|---|---|---|
numberRequired | string | Invoice number, e.g. INV-2026-0142 |
status | "draft" | "due" | "paid" | "overdue" | "void" | |
issuedRequired | string | Issue date, pre-formatted for display |
dueRequired | string | Due date, pre-formatted for display |
currency | string | Currency symbol prefix |
accent | string | Brand colour, e.g. #3b5bdb |
sellerRequired | object | |
seller.nameRequired | string | |
seller.addressRequired | string[] | |
seller.email | string | |
seller.tax_id | string | |
customerRequired | object | |
customer.nameRequired | string | |
customer.company | string | |
customer.addressRequired | string[] | |
customer.email | string | |
itemsRequired | object[] | |
items[].descriptionRequired | string | |
items[].detail | string | |
items[].qtyRequired | number | |
items[].unit_priceRequired | number | |
discount | object | |
discount.labelRequired | string | |
discount.rateRequired | number | |
tax | object | |
tax.labelRequired | string | |
tax.rateRequired | number | |
payment | object | |
payment.method | string | |
payment.link | string | |
payment.bank | string | |
notes | string |
invoice.jsonShow sample data
{
"number": "INV-2026-0142",
"status": "due",
"issued": "1 Oct 2026",
"due": "15 Oct 2026",
"currency": "$",
"accent": "#3b5bdb",
"seller": {
"name": "Northwind Studio",
"address": [
"221 Market Street, Suite 400",
"San Francisco, CA 94105",
"United States"
],
"email": "[email protected]",
"tax_id": "EIN 84-1234567"
},
"customer": {
"name": "Ravi Kumar",
"company": "Lumen Fitness Pvt. Ltd.",
"address": [
"14 Residency Road",
"Bengaluru, KA 560025",
"India"
],
"email": "[email protected]"
},
"items": [
{
"description": "Pro plan — monthly subscription",
"detail": "1 Oct – 31 Oct 2026",
"qty": 1,
"unit_price": 49
},
{
"description": "Additional seats",
"detail": "4 seats × $12",
"qty": 4,
"unit_price": 12
},
{
"description": "Booking SMS credits",
"detail": "Pack of 1,000",
"qty": 3,
"unit_price": 18.5
},
{
"description": "Custom domain",
"detail": "lumenfit.in",
"qty": 1,
"unit_price": 5
},
{
"description": "Priority support add-on",
"qty": 1,
"unit_price": 29
},
{
"description": "Data export (one-time)",
"detail": "Full CSV + attachments",
"qty": 1,
"unit_price": 150
},
{
"description": "Onboarding workshop",
"detail": "2 hours, remote",
"qty": 2,
"unit_price": 120
},
{
"description": "Payment processing pass-through",
"qty": 1,
"unit_price": 1284.37
}
],
"discount": {
"label": "Annual partner discount (10%)",
"rate": 0.1
},
"tax": {
"label": "GST (18%)",
"rate": 0.18
},
"payment": {
"method": "Bank transfer or card",
"link": "pay.northwind.studio/INV-2026-0142",
"bank": "Northwind Studio LLC · Acct 0042 7781 · Routing 121000358"
},
"notes": "Thank you for your business. Payment is due within 14 days. Questions? Reply to this email or reach us at [email protected]."
}