Account Summary Statement
SaaS / subscription account summary on A4: customer + billing period header, charges table, credits applied, usage breakdown (included vs used vs overage) and a totals card with balance due. Suitable for monthly platform billing.

DSL source
The whole template. Learn the language in the template DSL guide.
const chargesCols = [["Description", "1fr"], ["Period", "auto"], ["Amount", "auto", "right"]];
const creditsCols = [["Description", "1fr"], ["Amount", "auto", "right"]];
const usageCols = [["Metric", "1fr"], ["Included", "auto", "right"], ["Used", "auto", "right"], ["Overage", "auto", "right"]];
const template = doc(
{ size: "A4", title: "Statement {{statementNumber}}", padding: [28, 32, 28, 32],
styles: {
".brand-bar": { "background-color": "#0B3A5B", color: "#ffffff", padding: [14, 16, 14, 16], "border-radius": 4 },
".brand-title": { "font-size": 18, "font-weight": 700, color: "#ffffff" },
".brand-sub": { "font-size": 9, color: "#BBD3E4" },
".meta-card": { "background-color": "#F4F7FA", padding: [10, 12, 10, 12], "border-radius": 4 },
".meta-label": { "font-size": 7.5, color: "#6B7A87", "font-weight": 600 },
".meta-value": { "font-size": 10, color: "#0B3A5B", "font-weight": 600 },
".section-title": { "font-size": 11, "font-weight": 700, color: "#0B3A5B", margin: [0, 0, 4, 0] },
".stat-box": { "background-color": "#F4F7FA", padding: [8, 10, 8, 10], "border-radius": 4 },
".stat-label": { "font-size": 7.5, color: "#6B7A87", "font-weight": 600 },
".stat-value": { "font-size": 11, color: "#0B3A5B", "font-weight": 700 },
".due-card": { "background-color": "#0B3A5B", color: "#ffffff", padding: [14, 16, 14, 16], "border-radius": 4 },
".due-label": { "font-size": 8, color: "#BBD3E4", "font-weight": 600 },
".due-amount": { "font-size": 22, color: "#ffffff", "font-weight": 700 },
".due-sub": { "font-size": 9, color: "#BBD3E4" },
".sum-row-label": { "font-size": 9.5, color: "#3B4A58" },
".sum-row-value": { "font-size": 9.5, color: "#0B3A5B", "font-weight": 600 },
".note": { "font-size": 8.5, color: "#3B4A58", "line-height": 1.35 },
".disc": { "font-size": 7.5, color: "#6B7A87", "line-height": 1.3 },
}
},
// Brand header bar
r(".brand-bar",
col("60%",
s(".brand-title", "{{institution.name}}"),
s(".brand-sub", "{{institution.address1}} · {{institution.address2}}"),
s(".brand-sub", "{{institution.phone}} · {{institution.website}}"),
),
col("40%", { align: "right" },
s({ "font-size": 13, "font-weight": 700, color: "#ffffff" }, "Account Statement"),
s(".brand-sub", "{{statementNumber}}"),
s(".brand-sub", "Issued {{issuedOn}}"),
),
),
gap(10),
// Account + period meta
r(
col("49%", { class: "meta-card" },
s(".meta-label", "ACCOUNT HOLDER"),
s(".meta-value", "{{account.holder}}"),
gap(3),
s(".meta-label", "ACCOUNT"),
s(".meta-value", "{{account.number}} · {{account.type}}"),
gap(3),
r(
col("50%",
s(".meta-label", "BRANCH"),
s({ "font-size": 9, color: "#0B3A5B" }, "{{account.branch}}"),
),
col("25%",
s(".meta-label", "CURRENCY"),
s({ "font-size": 9, color: "#0B3A5B" }, "{{account.currency}}"),
),
col("25%",
s(".meta-label", "BSB"),
s({ "font-size": 9, color: "#0B3A5B" }, "{{account.bsb}}"),
),
),
),
col("2%", s(" ")),
col("49%", { class: "meta-card" },
s(".meta-label", "STATEMENT PERIOD"),
s(".meta-value", "{{period.label}}"),
gap(3),
r(
col("50%",
s(".meta-label", "PERIOD START"),
s({ "font-size": 9, color: "#0B3A5B" }, "{{period.start}}"),
),
col("50%",
s(".meta-label", "PERIOD END"),
s({ "font-size": 9, color: "#0B3A5B" }, "{{period.end}}"),
),
),
gap(3),
r(
col("50%",
s(".meta-label", "ROUTING"),
s({ "font-size": 9, color: "#0B3A5B" }, "{{institution.routingNumber}}"),
),
col("50%",
s(".meta-label", "SWIFT"),
s({ "font-size": 9, color: "#0B3A5B" }, "{{institution.swift}}"),
),
),
),
),
gap(10),
// Balance / activity stats row
r(
col("19.2%", { class: "stat-box" },
s(".stat-label", "OPENING BALANCE"),
s(".stat-value", "${{openingBalance}}"),
),
col("1%", s(" ")),
col("19.2%", { class: "stat-box" },
s(".stat-label", "TOTAL CREDITS"),
s({ "font-size": 11, color: "#2E7D4F", "font-weight": 700 }, "${{totalCredits}}"),
),
col("1%", s(" ")),
col("19.2%", { class: "stat-box" },
s(".stat-label", "TOTAL DEBITS"),
s({ "font-size": 11, color: "#A0342C", "font-weight": 700 }, "${{totalDebits}}"),
),
col("1%", s(" ")),
col("19.2%", { class: "stat-box" },
s(".stat-label", "TRANSACTIONS"),
s(".stat-value", "{{transactionCount}}"),
),
col("1%", s(" ")),
col("19.2%", { class: "stat-box" },
s(".stat-label", "CLOSING BALANCE"),
s(".stat-value", "${{closingBalance}}"),
),
),
gap(12),
// Charges
s(".section-title", "Charges"),
table(chargesCols, "c in charges",
[["{{c.description}}", "1fr"], ["{{c.period}}", "auto"], ["${{c.amount}}", "auto", "right"]],
),
gap(8),
// Credits
s(".section-title", "Credits Applied"),
table(creditsCols, "cr in credits",
[["{{cr.description}}", "1fr"], ["−${{cr.amount}}", "auto", "right"]],
),
gap(8),
// Usage
s(".section-title", "Usage This Period"),
table(usageCols, "u in usage",
[["{{u.metric}}", "1fr"], ["{{u.included}}", "auto", "right"], ["{{u.used}}", "auto", "right"], ["{{u.overage}}", "auto", "right"]],
),
gap(12),
// Summary + Balance Due
r(
col("55%",
s(".section-title", "Payment Instructions"),
s(".note", "{{paymentInstructions}}"),
gap(6),
s(".section-title", "Support"),
s(".note", "{{institution.supportHours}}"),
s(".note", "{{institution.phone}} · {{institution.website}}"),
),
col("3%", s(" ")),
col("42%",
r(
col("60%", s(".sum-row-label", "Subtotal")),
col("40%", { align: "right" }, s(".sum-row-value", "${{summary.subtotal}}")),
),
gap(2),
r(
col("60%", s(".sum-row-label", "Credits applied")),
col("40%", { align: "right" }, s({ "font-size": 9.5, color: "#2E7D4F", "font-weight": 600 }, "−${{summary.creditsApplied}}")),
),
gap(2),
r(
col("60%", s(".sum-row-label", "{{summary.taxLabel}}")),
col("40%", { align: "right" }, s(".sum-row-value", "${{summary.taxAmount}}")),
),
gap(6),
r(".due-card",
col("60%",
s(".due-label", "BALANCE DUE"),
s(".due-sub", "Due {{summary.dueDate}}"),
),
col("40%", { align: "right" },
s(".due-amount", "${{summary.balanceDue}}"),
s(".due-sub", "{{account.currency}}"),
),
),
),
),
gap(10),
hr(4, "#E1E7ED"),
s(".disc", "{{disclosures}}"),
ftrPages("Cascadia FCU · Statement STMT-2026-03-0048271"),
);
const sampleData = {
statementNumber: "STMT-2026-03-0048271",
account: {
number: "**** **** **** 4829",
holder: "Harriet Okonkwo-Salazar",
type: "Everyday Chequing — Gold",
branch: "Northline Seattle — 0412",
currency: "USD",
bsb: "104-827",
},
institution: {
name: "Cascadia Federal Credit Union",
address1: "200 Pike Street, Suite 1800",
address2: "Seattle, WA 98101",
phone: "+1 (206) 555-0137",
website: "www.cascadiafcu.com",
supportHours: "Mon–Fri 07:00–19:00 PT · Sat 08:00–14:00 PT",
routingNumber: "325070760",
swift: "CASCUS33",
},
period: {
start: "1 March 2026",
end: "31 March 2026",
label: "1 March 2026 – 31 March 2026",
},
issuedOn: "2 April 2026",
openingBalance: "8,421.74",
closingBalance: "6,984.55",
totalDebits: "9,284.17",
totalCredits: "7,846.98",
transactionCount: 47,
transactions: [],
charges: [
{ description: "Platform subscription — Automation Suite (seat × 24)", period: "1–31 Mar 2026", amount: "2,880.00" },
{ description: "Usage overage — API renders beyond plan allowance", period: "1–31 Mar 2026", amount: "184.60" },
{ description: "Premium Support — Tier 2 SLA", period: "1–31 Mar 2026", amount: "299.00" },
{ description: "Custom fonts add-on", period: "1–31 Mar 2026", amount: "49.00" },
{ description: "Data egress — EU region transfer", period: "1–31 Mar 2026", amount: "27.18" },
],
credits: [
{ description: "Annual prepay discount (pro-rated March portion)", amount: "120.00" },
{ description: "Service credit — 2026-03-14 incident (SEV-2, 42 min)", amount: "48.00" },
],
usage: [
{ metric: "PDF renders", included: "50,000", used: "58,420", overage: "8,420" },
{ metric: "API credits", included: "12,000", used: "11,764", overage: "0" },
{ metric: "Storage (GB)", included: "25", used: "18.4", overage: "0" },
{ metric: "Custom fonts", included: "2 families", used: "3 families", overage: "1 family" },
{ metric: "Egress (GB)", included: "200", used: "213.6", overage: "13.6" },
],
summary: {
subtotal: "3,439.78",
creditsApplied: "168.00",
taxRate: 0.088,
taxLabel: "Sales Tax (WA 8.8%)",
taxAmount: "288.00",
balanceDue: "3,559.78",
dueDate: "20 April 2026",
},
paymentInstructions: "Automatic payment scheduled for 20 April 2026 from the account ending in 4829. To update payment method or dispute a charge, contact billing@northline.studio within 30 days of statement date.",
disclosures: "This statement is provided for informational purposes. Review all entries carefully. Report any unauthorized transactions to Cascadia FCU within 60 days of the statement date. Member FDIC. Equal Housing Lender.",
};Sample data
{
"statementNumber": "STMT-2026-03-0048271",
"account": {
"number": "**** **** **** 4829",
"holder": "Harriet Okonkwo-Salazar",
"type": "Everyday Chequing — Gold",
"branch": "Northline Seattle — 0412",
"currency": "USD",
"bsb": "104-827"
},
"institution": {
"name": "Cascadia Federal Credit Union",
"address1": "200 Pike Street, Suite 1800",
"address2": "Seattle, WA 98101",
"phone": "+1 (206) 555-0137",
"website": "www.cascadiafcu.com",
"supportHours": "Mon–Fri 07:00–19:00 PT · Sat 08:00–14:00 PT",
"routingNumber": "325070760",
"swift": "CASCUS33"
},
"period": {
"start": "1 March 2026",
"end": "31 March 2026",
"label": "1 March 2026 – 31 March 2026"
},
"issuedOn": "2 April 2026",
"openingBalance": "8,421.74",
"closingBalance": "6,984.55",
"totalDebits": "9,284.17",
"totalCredits": "7,846.98",
"transactionCount": 47,
"transactions": [],
"charges": [
{
"description": "Platform subscription — Automation Suite (seat × 24)",
"period": "1–31 Mar 2026",
"amount": "2,880.00"
},
{
"description": "Usage overage — API renders beyond plan allowance",
"period": "1–31 Mar 2026",
"amount": "184.60"
},
{
"description": "Premium Support — Tier 2 SLA",
"period": "1–31 Mar 2026",
"amount": "299.00"
},
{
"description": "Custom fonts add-on",
"period": "1–31 Mar 2026",
"amount": "49.00"
},
{
"description": "Data egress — EU region transfer",
"period": "1–31 Mar 2026",
"amount": "27.18"
}
],
"credits": [
{
"description": "Annual prepay discount (pro-rated March portion)",
"amount": "120.00"
},
{
"description": "Service credit — 2026-03-14 incident (SEV-2, 42 min)",
"amount": "48.00"
}
],
"usage": [
{
"metric": "PDF renders",
"included": "50,000",
"used": "58,420",
"overage": "8,420"
},
{
"metric": "API credits",
"included": "12,000",
"used": "11,764",
"overage": "0"
},
{
"metric": "Storage (GB)",
"included": "25",
"used": "18.4",
"overage": "0"
},
{
"metric": "Custom fonts",
"included": "2 families",
"used": "3 families",
"overage": "1 family"
},
{
"metric": "Egress (GB)",
"included": "200",
"used": "213.6",
"overage": "13.6"
}
],
"summary": {
"subtotal": "3,439.78",
"creditsApplied": "168.00",
"taxRate": 0.088,
"taxLabel": "Sales Tax (WA 8.8%)",
"taxAmount": "288.00",
"balanceDue": "3,559.78",
"dueDate": "20 April 2026"
},
"paymentInstructions": "Automatic payment scheduled for 20 April 2026 from the account ending in 4829. To update payment method or dispute a charge, contact billing@northline.studio within 30 days of statement date.",
"disclosures": "This statement is provided for informational purposes. Review all entries carefully. Report any unauthorized transactions to Cascadia FCU within 60 days of the statement date. Member FDIC. Equal Housing Lender."
}Render it with your data
Any API key can render this template by its ID. This call uses the sample data; add a data object to use your own. See the API reference.
curl -X POST https://makespdf.com/api/v1/render \
-H "Authorization: Bearer $MAKESPDF_API_KEY" \
-H "Content-Type: application/json" \
-d '{"templateId": "statement-account-summary"}' \
-o output.pdf