Texify

Reports

Technical report PDF API

Structured technical report for research notes, incident reviews, and engineering summaries. Supports code-like tables, figures, numbered sections, and appendices. Send this LaTeX template and JSON data to Texify in one /render request.

Technical 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 > technical-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": "Render Pipeline Review",
    "period": "Q2 2026",
    "summary": "Queue isolation improved throughput under burst traffic.",
    "metrics": [
      {
        "label": "Throughput",
        "value": "920/min",
        "delta": "+31%"
      }
    ],
    "sections": [
      {
        "heading": "Architecture",
        "body": "Workers compile templates in isolated pools."
      },
      {
        "heading": "Findings",
        "body": "Cold starts dominate p99 under low traffic."
      }
    ]
  }
}
JSON

curl -sS -X POST https://api.texify.dev/render \
  -H "Content-Type: application/json" \
  --data @technical-report-payload.json \
  --output technical-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": "Render Pipeline Review",
    "period": "Q2 2026",
    "summary": "Queue isolation improved throughput under burst traffic.",
    "metrics": [
      {
        "label": "Throughput",
        "value": "920/min",
        "delta": "+31%"
      }
    ],
    "sections": [
      {
        "heading": "Architecture",
        "body": "Workers compile templates in isolated pools."
      },
      {
        "heading": "Findings",
        "body": "Cold starts dominate p99 under low traffic."
      }
    ]
  }
}''')
response = requests.post(
    "https://api.texify.dev/render",
    json=payload,
    timeout=90,
)
response.raise_for_status()

with open("technical-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": "Render Pipeline Review",
    "period": "Q2 2026",
    "summary": "Queue isolation improved throughput under burst traffic.",
    "metrics": [
      {
        "label": "Throughput",
        "value": "920/min",
        "delta": "+31%"
      }
    ],
    "sections": [
      {
        "heading": "Architecture",
        "body": "Workers compile templates in isolated pools."
      },
      {
        "heading": "Findings",
        "body": "Cold starts dominate p99 under low traffic."
      }
    ]
  }
};

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("technical-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": "Render Pipeline Review",
  "period": "Q2 2026",
  "summary": "Queue isolation improved throughput under burst traffic.",
  "metrics": [
    {
      "label": "Throughput",
      "value": "920/min",
      "delta": "+31%"
    }
  ],
  "sections": [
    {
      "heading": "Architecture",
      "body": "Workers compile templates in isolated pools."
    },
    {
      "heading": "Findings",
      "body": "Cold starts dominate p99 under low traffic."
    }
  ]
}

FAQ

FAQ

Can I use Technical report as a technical 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.