Reports
Monthly report PDF API
Executive monthly report with KPI table, narrative sections, and chart-ready data blocks. Built for customer-facing analytics exports. Send this LaTeX template and JSON data to Texify in one /render request.
JSON schema
Fields this template expects.
| Field | Type | Required | Description |
|---|---|---|---|
| title | string | Yes | Report title. |
| period | string | Yes | Reporting period. |
| summary | string | Yes | Executive summary paragraph. |
| metrics | array | Yes | Metric rows with labels, values, and deltas. |
| sections | array | Yes | Narrative sections, tables, and chart data. |
API examples
POST LaTeX and JSON. Receive PDF bytes.
cat > monthly-report-payload.json <<'JSON'
{
"entrypoint": "main.tex",
"resources": {
"main.tex": "\\documentclass[11pt]{article}\n\\usepackage[margin=0.75in]{geometry}\n\\usepackage{array,booktabs,xcolor}\n\\pagestyle{empty}\n\\begin{document}\n{\\Huge\\bfseries [[ .title ]]}\\\\[4pt]\n{\\large [[ .period ]]}\\\\[0.2in]\n\\noindent\\textbf{Executive summary}\\\\\n[[ .summary ]]\n\\vspace{0.25in}\n\\begin{tabular}{>{\\raggedright\\arraybackslash}p{0.45\\textwidth}rr}\n\\toprule\nMetric & Value & Delta\\\\\n\\midrule\n[[ range .metrics ]][[ .label ]] & [[ .value ]] & [[ .delta ]]\\\\\n[[ end ]]\\bottomrule\n\\end{tabular}\n\\vspace{0.25in}\n[[ range .sections ]]\\section*{[[ .heading ]]}\n[[ .body ]]\n[[ end ]]\\end{document}"
},
"data": {
"title": "July Platform Report",
"period": "2026-07",
"summary": "Usage grew while p95 latency stayed below target.",
"metrics": [
{
"label": "Renders",
"value": "842,120",
"delta": "+18%"
},
{
"label": "p95 latency",
"value": "1.1s",
"delta": "-9%"
}
],
"sections": [
{
"heading": "Usage",
"body": "PDF volume increased across enterprise accounts."
}
]
}
}
JSON
curl -sS -X POST https://api.texify.dev/render \
-H "Content-Type: application/json" \
--data @monthly-report-payload.json \
--output monthly-report.pdfimport json
import requests
payload = json.loads(r'''{
"entrypoint": "main.tex",
"resources": {
"main.tex": "\\documentclass[11pt]{article}\n\\usepackage[margin=0.75in]{geometry}\n\\usepackage{array,booktabs,xcolor}\n\\pagestyle{empty}\n\\begin{document}\n{\\Huge\\bfseries [[ .title ]]}\\\\[4pt]\n{\\large [[ .period ]]}\\\\[0.2in]\n\\noindent\\textbf{Executive summary}\\\\\n[[ .summary ]]\n\\vspace{0.25in}\n\\begin{tabular}{>{\\raggedright\\arraybackslash}p{0.45\\textwidth}rr}\n\\toprule\nMetric & Value & Delta\\\\\n\\midrule\n[[ range .metrics ]][[ .label ]] & [[ .value ]] & [[ .delta ]]\\\\\n[[ end ]]\\bottomrule\n\\end{tabular}\n\\vspace{0.25in}\n[[ range .sections ]]\\section*{[[ .heading ]]}\n[[ .body ]]\n[[ end ]]\\end{document}"
},
"data": {
"title": "July Platform Report",
"period": "2026-07",
"summary": "Usage grew while p95 latency stayed below target.",
"metrics": [
{
"label": "Renders",
"value": "842,120",
"delta": "+18%"
},
{
"label": "p95 latency",
"value": "1.1s",
"delta": "-9%"
}
],
"sections": [
{
"heading": "Usage",
"body": "PDF volume increased across enterprise accounts."
}
]
}
}''')
response = requests.post(
"https://api.texify.dev/render",
json=payload,
timeout=90,
)
response.raise_for_status()
with open("monthly-report.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.75in]{geometry}\n\\usepackage{array,booktabs,xcolor}\n\\pagestyle{empty}\n\\begin{document}\n{\\Huge\\bfseries [[ .title ]]}\\\\[4pt]\n{\\large [[ .period ]]}\\\\[0.2in]\n\\noindent\\textbf{Executive summary}\\\\\n[[ .summary ]]\n\\vspace{0.25in}\n\\begin{tabular}{>{\\raggedright\\arraybackslash}p{0.45\\textwidth}rr}\n\\toprule\nMetric & Value & Delta\\\\\n\\midrule\n[[ range .metrics ]][[ .label ]] & [[ .value ]] & [[ .delta ]]\\\\\n[[ end ]]\\bottomrule\n\\end{tabular}\n\\vspace{0.25in}\n[[ range .sections ]]\\section*{[[ .heading ]]}\n[[ .body ]]\n[[ end ]]\\end{document}"
},
"data": {
"title": "July Platform Report",
"period": "2026-07",
"summary": "Usage grew while p95 latency stayed below target.",
"metrics": [
{
"label": "Renders",
"value": "842,120",
"delta": "+18%"
},
{
"label": "p95 latency",
"value": "1.1s",
"delta": "-9%"
}
],
"sections": [
{
"heading": "Usage",
"body": "PDF volume increased across enterprise accounts."
}
]
}
};
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("monthly-report.pdf", pdf);The template
LaTeX source sent as resources["main.tex"].
\documentclass[11pt]{article}
\usepackage[margin=0.75in]{geometry}
\usepackage{array,booktabs,xcolor}
\pagestyle{empty}
\begin{document}
{\Huge\bfseries [[ .title ]]}\\[4pt]
{\large [[ .period ]]}\\[0.2in]
\noindent\textbf{Executive summary}\\
[[ .summary ]]
\vspace{0.25in}
\begin{tabular}{>{\raggedright\arraybackslash}p{0.45\textwidth}rr}
\toprule
Metric & Value & Delta\\
\midrule
[[ range .metrics ]][[ .label ]] & [[ .value ]] & [[ .delta ]]\\
[[ end ]]\bottomrule
\end{tabular}
\vspace{0.25in}
[[ range .sections ]]\section*{[[ .heading ]]}
[[ .body ]]
[[ end ]]\end{document}Live render
Try sample data now.
Posts this LaTeX template and sample JSON to /render, then opens the returned PDF bytes.
{
"title": "July Platform Report",
"period": "2026-07",
"summary": "Usage grew while p95 latency stayed below target.",
"metrics": [
{
"label": "Renders",
"value": "842,120",
"delta": "+18%"
},
{
"label": "p95 latency",
"value": "1.1s",
"delta": "-9%"
}
],
"sections": [
{
"heading": "Usage",
"body": "PDF volume increased across enterprise accounts."
}
]
}FAQ
FAQ
Can I use Monthly report as a report 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.
Reports
Technical report
Structured technical report for research notes, incident reviews, and engineering summaries. Supports code-like tables, figures, numbered sections, and appendices.
Invoices
Subscription invoice
Subscription invoice for renewals, seat counts, credits, and prorated adjustments. Useful for product-led SaaS apps that need dependable customer PDFs.
Statements
Bank statement
Account statement with opening balance, transaction table, and closing summary. Designed for fintech apps, ledgers, and customer portals.