Texify

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.

Monthly report PDF preview

JSON schema

Fields this template expects.

FieldTypeRequiredDescription
titlestringYesReport title.
periodstringYesReporting period.
summarystringYesExecutive summary paragraph.
metricsarrayYesMetric rows with labels, values, and deltas.
sectionsarrayYesNarrative sections, tables, and chart data.

API examples

POST LaTeX and JSON. Receive PDF bytes.

curl
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.pdf
Python
import 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)
Node fetch
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"].

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.

Sample 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."
    }
  ]
}

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.