Statements
Bank statement PDF API
Account statement with opening balance, transaction table, and closing summary. Designed for fintech apps, ledgers, and customer portals. 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 > bank-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": "Acme GmbH",
"number": "**** 2048"
},
"period": "2026-06",
"opening_balance": 18420.11,
"transactions": [
{
"date": "2026-06-04",
"description": "API payout",
"amount": 4200
},
{
"date": "2026-06-12",
"description": "Cloud hosting",
"amount": -812.33
}
],
"closing_balance": 21807.78,
"currency": "EUR"
}
}
JSON
curl -sS -X POST https://api.texify.dev/render \
-H "Content-Type: application/json" \
--data @bank-statement-payload.json \
--output bank-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": "Acme GmbH",
"number": "**** 2048"
},
"period": "2026-06",
"opening_balance": 18420.11,
"transactions": [
{
"date": "2026-06-04",
"description": "API payout",
"amount": 4200
},
{
"date": "2026-06-12",
"description": "Cloud hosting",
"amount": -812.33
}
],
"closing_balance": 21807.78,
"currency": "EUR"
}
}''')
response = requests.post(
"https://api.texify.dev/render",
json=payload,
timeout=90,
)
response.raise_for_status()
with open("bank-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": "Acme GmbH",
"number": "**** 2048"
},
"period": "2026-06",
"opening_balance": 18420.11,
"transactions": [
{
"date": "2026-06-04",
"description": "API payout",
"amount": 4200
},
{
"date": "2026-06-12",
"description": "Cloud hosting",
"amount": -812.33
}
],
"closing_balance": 21807.78,
"currency": "EUR"
}
};
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("bank-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": "Acme GmbH",
"number": "**** 2048"
},
"period": "2026-06",
"opening_balance": 18420.11,
"transactions": [
{
"date": "2026-06-04",
"description": "API payout",
"amount": 4200
},
{
"date": "2026-06-12",
"description": "Cloud hosting",
"amount": -812.33
}
],
"closing_balance": 21807.78,
"currency": "EUR"
}FAQ
FAQ
Can I use Bank statement as a 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
Account statement
Customer account statement for credits, debits, invoices, and payments over a period. Useful for billing portals and finance ops tools.
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.
Reports
Monthly report
Executive monthly report with KPI table, narrative sections, and chart-ready data blocks. Built for customer-facing analytics exports.