Statements
Account statement PDF API
Customer account statement for credits, debits, invoices, and payments over a period. Useful for billing portals and finance ops tools. Send this LaTeX template and JSON data to Texify in one /render request.
JSON schema
Fields this template expects.
| Field | Type | Required | Description |
|---|---|---|---|
| account | object | Yes | Account name, number, and address. |
| period | string | Yes | Statement period. |
| opening_balance | number | Yes | Opening balance. |
| transactions | array | Yes | Dated transaction rows. |
| closing_balance | number | Yes | Closing balance. |
API examples
POST LaTeX and JSON. Receive PDF bytes.
cat > account-statement-payload.json <<'JSON'
{
"entrypoint": "main.tex",
"resources": {
"main.tex": "\\documentclass[11pt]{article}\n\\usepackage[margin=0.7in]{geometry}\n\\usepackage{array,booktabs}\n\\pagestyle{empty}\n\\begin{document}\n{\\Huge\\bfseries Account Statement}\\\\[4pt]\nPeriod: [[ .period ]]\\\\[0.2in]\n\\noindent\\textbf{Account}\\\\\n[[ .account.holder ]]\\\\\n[[ .account.number ]]\\\\[0.25in]\nOpening balance: [[ .opening_balance ]] [[ .currency ]]\\\\[0.18in]\n\\begin{tabular}{p{0.22\\textwidth}p{0.5\\textwidth}r}\n\\toprule\nDate & Description & Amount\\\\\n\\midrule\n[[ range .transactions ]][[ .date ]] & [[ .description ]] & [[ .amount ]]\\\\\n[[ end ]]\\bottomrule\n\\end{tabular}\n\\vspace{0.25in}\n\\begin{flushright}\n{\\Large\\bfseries Closing balance: [[ .closing_balance ]] [[ .currency ]]}\n\\end{flushright}\n\\end{document}"
},
"data": {
"account": {
"holder": "River Analytics",
"number": "CUST-1049"
},
"period": "Q2 2026",
"opening_balance": 1200,
"transactions": [
{
"date": "2026-04-01",
"description": "Invoice INV-104",
"amount": 499
},
{
"date": "2026-04-12",
"description": "Payment",
"amount": -499
}
],
"closing_balance": 1200,
"currency": "USD"
}
}
JSON
curl -sS -X POST https://api.texify.dev/render \
-H "Content-Type: application/json" \
--data @account-statement-payload.json \
--output account-statement.pdfimport json
import requests
payload = json.loads(r'''{
"entrypoint": "main.tex",
"resources": {
"main.tex": "\\documentclass[11pt]{article}\n\\usepackage[margin=0.7in]{geometry}\n\\usepackage{array,booktabs}\n\\pagestyle{empty}\n\\begin{document}\n{\\Huge\\bfseries Account Statement}\\\\[4pt]\nPeriod: [[ .period ]]\\\\[0.2in]\n\\noindent\\textbf{Account}\\\\\n[[ .account.holder ]]\\\\\n[[ .account.number ]]\\\\[0.25in]\nOpening balance: [[ .opening_balance ]] [[ .currency ]]\\\\[0.18in]\n\\begin{tabular}{p{0.22\\textwidth}p{0.5\\textwidth}r}\n\\toprule\nDate & Description & Amount\\\\\n\\midrule\n[[ range .transactions ]][[ .date ]] & [[ .description ]] & [[ .amount ]]\\\\\n[[ end ]]\\bottomrule\n\\end{tabular}\n\\vspace{0.25in}\n\\begin{flushright}\n{\\Large\\bfseries Closing balance: [[ .closing_balance ]] [[ .currency ]]}\n\\end{flushright}\n\\end{document}"
},
"data": {
"account": {
"holder": "River Analytics",
"number": "CUST-1049"
},
"period": "Q2 2026",
"opening_balance": 1200,
"transactions": [
{
"date": "2026-04-01",
"description": "Invoice INV-104",
"amount": 499
},
{
"date": "2026-04-12",
"description": "Payment",
"amount": -499
}
],
"closing_balance": 1200,
"currency": "USD"
}
}''')
response = requests.post(
"https://api.texify.dev/render",
json=payload,
timeout=90,
)
response.raise_for_status()
with open("account-statement.pdf", "wb") as pdf:
pdf.write(response.content)import { writeFile } from "node:fs/promises";
const payload = {
"entrypoint": "main.tex",
"resources": {
"main.tex": "\\documentclass[11pt]{article}\n\\usepackage[margin=0.7in]{geometry}\n\\usepackage{array,booktabs}\n\\pagestyle{empty}\n\\begin{document}\n{\\Huge\\bfseries Account Statement}\\\\[4pt]\nPeriod: [[ .period ]]\\\\[0.2in]\n\\noindent\\textbf{Account}\\\\\n[[ .account.holder ]]\\\\\n[[ .account.number ]]\\\\[0.25in]\nOpening balance: [[ .opening_balance ]] [[ .currency ]]\\\\[0.18in]\n\\begin{tabular}{p{0.22\\textwidth}p{0.5\\textwidth}r}\n\\toprule\nDate & Description & Amount\\\\\n\\midrule\n[[ range .transactions ]][[ .date ]] & [[ .description ]] & [[ .amount ]]\\\\\n[[ end ]]\\bottomrule\n\\end{tabular}\n\\vspace{0.25in}\n\\begin{flushright}\n{\\Large\\bfseries Closing balance: [[ .closing_balance ]] [[ .currency ]]}\n\\end{flushright}\n\\end{document}"
},
"data": {
"account": {
"holder": "River Analytics",
"number": "CUST-1049"
},
"period": "Q2 2026",
"opening_balance": 1200,
"transactions": [
{
"date": "2026-04-01",
"description": "Invoice INV-104",
"amount": 499
},
{
"date": "2026-04-12",
"description": "Payment",
"amount": -499
}
],
"closing_balance": 1200,
"currency": "USD"
}
};
const response = await fetch("https://api.texify.dev/render", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
signal: AbortSignal.timeout(90_000),
});
if (!response.ok) throw new Error(await response.text());
const pdf = Buffer.from(await response.arrayBuffer());
await writeFile("account-statement.pdf", pdf);The template
LaTeX source sent as resources["main.tex"].
\documentclass[11pt]{article}
\usepackage[margin=0.7in]{geometry}
\usepackage{array,booktabs}
\pagestyle{empty}
\begin{document}
{\Huge\bfseries Account Statement}\\[4pt]
Period: [[ .period ]]\\[0.2in]
\noindent\textbf{Account}\\
[[ .account.holder ]]\\
[[ .account.number ]]\\[0.25in]
Opening balance: [[ .opening_balance ]] [[ .currency ]]\\[0.18in]
\begin{tabular}{p{0.22\textwidth}p{0.5\textwidth}r}
\toprule
Date & Description & Amount\\
\midrule
[[ range .transactions ]][[ .date ]] & [[ .description ]] & [[ .amount ]]\\
[[ end ]]\bottomrule
\end{tabular}
\vspace{0.25in}
\begin{flushright}
{\Large\bfseries Closing balance: [[ .closing_balance ]] [[ .currency ]]}
\end{flushright}
\end{document}Live render
Try sample data now.
Posts this LaTeX template and sample JSON to /render, then opens the returned PDF bytes.
{
"account": {
"holder": "River Analytics",
"number": "CUST-1049"
},
"period": "Q2 2026",
"opening_balance": 1200,
"transactions": [
{
"date": "2026-04-01",
"description": "Invoice INV-104",
"amount": 499
},
{
"date": "2026-04-12",
"description": "Payment",
"amount": -499
}
],
"closing_balance": 1200,
"currency": "USD"
}FAQ
FAQ
Can I use Account statement as a account statement PDF API?
Yes. Copy the LaTeX template, send it in resources with your data to /render, and Texify returns PDF bytes.
Can I change colors, copy, or field names?
Yes. Edit the LaTeX source and JSON placeholders to match your data model and brand before posting to /render.
Does this render real PDF text?
Yes. Texify compiles LaTeX to PDF, so text remains selectable, searchable, and stable across environments.
Related templates
More LaTeX PDF templates.
Statements
Bank statement
Account statement with opening balance, transaction table, and closing summary. Designed for fintech apps, ledgers, and customer portals.
Invoices
Subscription invoice
Subscription invoice for renewals, seat counts, credits, and prorated adjustments. Useful for product-led SaaS apps that need dependable customer PDFs.
Invoices
Classic invoice
A clean multi-page invoice template for SaaS billing, agency work, and usage-based charges. Repeating table headers and stable totals make it safe for long line-item lists.