Resumes
Developer resume PDF API
Dedicated JSON to resume PDF template for software engineers, with projects, skills, links, and measurable impact bullets. Designed for LaTeX resume API searches and developer tooling workflows. Send this LaTeX template and JSON data to Texify in one /render request.
LaTeX resume API for developer products and AI agents.
Developer resumes are dense: links, skills, projects, dates, and impact bullets must fit without looking cramped. LaTeX handles that typography better than browser print CSS and keeps output deterministic across deploys.
Send this LaTeX template plus JSON data to /render and get a classic LaTeX resume PDF back. Texify keeps text selectable for ATS parsing, preserves alignment, and avoids screenshot-style PDF generation.
This template fits career copilots, GitHub profile exporters, applicant tracking products, and any app that needs repeatable resume PDFs from structured data.
JSON schema
Fields this template expects.
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Candidate full name. |
| headline | string | Yes | Short professional summary. |
| contact | object | Yes | Email, phone, location, website, and profiles. |
| experience | array | Yes | Roles with company, dates, bullets, and impact metrics. |
| skills | array | Yes | Grouped technical or professional skills. |
API examples
POST LaTeX and JSON. Receive PDF bytes.
cat > resume-developer-payload.json <<'JSON'
{
"entrypoint": "main.tex",
"resources": {
"main.tex": "\\documentclass[10pt]{article}\n\\usepackage[margin=0.65in]{geometry}\n\\usepackage{array}\n\\pagestyle{empty}\n\\begin{document}\n\\begin{center}\n{\\LARGE\\bfseries [[ .name ]]}\\\\\n[[ .headline ]]\\\\[3pt]\n[[ .contact.email ]] \\quad [[ with .contact.phone ]][[ . ]] \\quad[[ end ]] [[ with .contact.location ]][[ . ]] \\quad[[ end ]] [[ with .contact.website ]][[ . ]][[ end ]]\n[[ with .contact.github ]]\\\\[[ . ]][[ end ]][[ with .contact.linkedin ]] \\quad [[ . ]][[ end ]]\n\\end{center}\n\\section*{Experience}\n[[ range .experience ]]\\noindent\\textbf{[[ .role ]]} --- [[ .company ]]\\hfill [[ .dates ]]\\\\\n\\begin{itemize}\n[[ range .bullets ]]\\item [[ . ]]\n[[ end ]]\\end{itemize}\n[[ end ]]\n[[ with .projects ]]\\section*{Projects}\n[[ range . ]]\\noindent\\textbf{[[ .name ]]} --- [[ .description ]]\\\\\n\\textit{[[ range .stack ]][[ . ]] [[ end ]]}\\\\[4pt]\n[[ end ]][[ end ]]\n\\section*{Skills}\n[[ range .skills ]]\\noindent\\textbf{[[ .group ]]}: [[ range .items ]][[ . ]] [[ end ]]\\\\\n[[ end ]]\\end{document}"
},
"data": {
"name": "Riley Stone",
"headline": "Full-stack engineer building AI workflow tools",
"contact": {
"email": "riley@example.com",
"phone": "",
"location": "",
"website": "",
"github": "github.com/rileystone",
"linkedin": "linkedin.com/in/rileystone"
},
"experience": [
{
"company": "AgentWorks",
"role": "Staff Engineer",
"dates": "2022-2026",
"bullets": [
"Designed a render pipeline handling 2.4M PDFs/month",
"Reduced cold starts by 37% with queued workers"
]
}
],
"projects": [
{
"name": "OpenInvoice",
"description": "LaTeX invoice templates rendered from JSON",
"stack": [
"Next.js",
"Rust",
"Postgres"
]
}
],
"skills": [
{
"group": "Languages",
"items": [
"TypeScript",
"Rust",
"Python"
]
},
{
"group": "Systems",
"items": [
"Queues",
"Observability",
"PDF generation"
]
}
]
}
}
JSON
curl -sS -X POST https://api.texify.dev/render \
-H "Content-Type: application/json" \
--data @resume-developer-payload.json \
--output resume-developer.pdfimport json
import requests
payload = json.loads(r'''{
"entrypoint": "main.tex",
"resources": {
"main.tex": "\\documentclass[10pt]{article}\n\\usepackage[margin=0.65in]{geometry}\n\\usepackage{array}\n\\pagestyle{empty}\n\\begin{document}\n\\begin{center}\n{\\LARGE\\bfseries [[ .name ]]}\\\\\n[[ .headline ]]\\\\[3pt]\n[[ .contact.email ]] \\quad [[ with .contact.phone ]][[ . ]] \\quad[[ end ]] [[ with .contact.location ]][[ . ]] \\quad[[ end ]] [[ with .contact.website ]][[ . ]][[ end ]]\n[[ with .contact.github ]]\\\\[[ . ]][[ end ]][[ with .contact.linkedin ]] \\quad [[ . ]][[ end ]]\n\\end{center}\n\\section*{Experience}\n[[ range .experience ]]\\noindent\\textbf{[[ .role ]]} --- [[ .company ]]\\hfill [[ .dates ]]\\\\\n\\begin{itemize}\n[[ range .bullets ]]\\item [[ . ]]\n[[ end ]]\\end{itemize}\n[[ end ]]\n[[ with .projects ]]\\section*{Projects}\n[[ range . ]]\\noindent\\textbf{[[ .name ]]} --- [[ .description ]]\\\\\n\\textit{[[ range .stack ]][[ . ]] [[ end ]]}\\\\[4pt]\n[[ end ]][[ end ]]\n\\section*{Skills}\n[[ range .skills ]]\\noindent\\textbf{[[ .group ]]}: [[ range .items ]][[ . ]] [[ end ]]\\\\\n[[ end ]]\\end{document}"
},
"data": {
"name": "Riley Stone",
"headline": "Full-stack engineer building AI workflow tools",
"contact": {
"email": "riley@example.com",
"phone": "",
"location": "",
"website": "",
"github": "github.com/rileystone",
"linkedin": "linkedin.com/in/rileystone"
},
"experience": [
{
"company": "AgentWorks",
"role": "Staff Engineer",
"dates": "2022-2026",
"bullets": [
"Designed a render pipeline handling 2.4M PDFs/month",
"Reduced cold starts by 37% with queued workers"
]
}
],
"projects": [
{
"name": "OpenInvoice",
"description": "LaTeX invoice templates rendered from JSON",
"stack": [
"Next.js",
"Rust",
"Postgres"
]
}
],
"skills": [
{
"group": "Languages",
"items": [
"TypeScript",
"Rust",
"Python"
]
},
{
"group": "Systems",
"items": [
"Queues",
"Observability",
"PDF generation"
]
}
]
}
}''')
response = requests.post(
"https://api.texify.dev/render",
json=payload,
timeout=90,
)
response.raise_for_status()
with open("resume-developer.pdf", "wb") as pdf:
pdf.write(response.content)import { writeFile } from "node:fs/promises";
const payload = {
"entrypoint": "main.tex",
"resources": {
"main.tex": "\\documentclass[10pt]{article}\n\\usepackage[margin=0.65in]{geometry}\n\\usepackage{array}\n\\pagestyle{empty}\n\\begin{document}\n\\begin{center}\n{\\LARGE\\bfseries [[ .name ]]}\\\\\n[[ .headline ]]\\\\[3pt]\n[[ .contact.email ]] \\quad [[ with .contact.phone ]][[ . ]] \\quad[[ end ]] [[ with .contact.location ]][[ . ]] \\quad[[ end ]] [[ with .contact.website ]][[ . ]][[ end ]]\n[[ with .contact.github ]]\\\\[[ . ]][[ end ]][[ with .contact.linkedin ]] \\quad [[ . ]][[ end ]]\n\\end{center}\n\\section*{Experience}\n[[ range .experience ]]\\noindent\\textbf{[[ .role ]]} --- [[ .company ]]\\hfill [[ .dates ]]\\\\\n\\begin{itemize}\n[[ range .bullets ]]\\item [[ . ]]\n[[ end ]]\\end{itemize}\n[[ end ]]\n[[ with .projects ]]\\section*{Projects}\n[[ range . ]]\\noindent\\textbf{[[ .name ]]} --- [[ .description ]]\\\\\n\\textit{[[ range .stack ]][[ . ]] [[ end ]]}\\\\[4pt]\n[[ end ]][[ end ]]\n\\section*{Skills}\n[[ range .skills ]]\\noindent\\textbf{[[ .group ]]}: [[ range .items ]][[ . ]] [[ end ]]\\\\\n[[ end ]]\\end{document}"
},
"data": {
"name": "Riley Stone",
"headline": "Full-stack engineer building AI workflow tools",
"contact": {
"email": "riley@example.com",
"phone": "",
"location": "",
"website": "",
"github": "github.com/rileystone",
"linkedin": "linkedin.com/in/rileystone"
},
"experience": [
{
"company": "AgentWorks",
"role": "Staff Engineer",
"dates": "2022-2026",
"bullets": [
"Designed a render pipeline handling 2.4M PDFs/month",
"Reduced cold starts by 37% with queued workers"
]
}
],
"projects": [
{
"name": "OpenInvoice",
"description": "LaTeX invoice templates rendered from JSON",
"stack": [
"Next.js",
"Rust",
"Postgres"
]
}
],
"skills": [
{
"group": "Languages",
"items": [
"TypeScript",
"Rust",
"Python"
]
},
{
"group": "Systems",
"items": [
"Queues",
"Observability",
"PDF generation"
]
}
]
}
};
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("resume-developer.pdf", pdf);The template
LaTeX source sent as resources["main.tex"].
\documentclass[10pt]{article}
\usepackage[margin=0.65in]{geometry}
\usepackage{array}
\pagestyle{empty}
\begin{document}
\begin{center}
{\LARGE\bfseries [[ .name ]]}\\
[[ .headline ]]\\[3pt]
[[ .contact.email ]] \quad [[ with .contact.phone ]][[ . ]] \quad[[ end ]] [[ with .contact.location ]][[ . ]] \quad[[ end ]] [[ with .contact.website ]][[ . ]][[ end ]]
[[ with .contact.github ]]\\[[ . ]][[ end ]][[ with .contact.linkedin ]] \quad [[ . ]][[ end ]]
\end{center}
\section*{Experience}
[[ range .experience ]]\noindent\textbf{[[ .role ]]} --- [[ .company ]]\hfill [[ .dates ]]\\
\begin{itemize}
[[ range .bullets ]]\item [[ . ]]
[[ end ]]\end{itemize}
[[ end ]]
[[ with .projects ]]\section*{Projects}
[[ range . ]]\noindent\textbf{[[ .name ]]} --- [[ .description ]]\\
\textit{[[ range .stack ]][[ . ]] [[ end ]]}\\[4pt]
[[ end ]][[ end ]]
\section*{Skills}
[[ range .skills ]]\noindent\textbf{[[ .group ]]}: [[ range .items ]][[ . ]] [[ end ]]\\
[[ end ]]\end{document}Live render
Try sample data now.
Posts this LaTeX template and sample JSON to /render, then opens the returned PDF bytes.
{
"name": "Riley Stone",
"headline": "Full-stack engineer building AI workflow tools",
"contact": {
"email": "riley@example.com",
"phone": "",
"location": "",
"website": "",
"github": "github.com/rileystone",
"linkedin": "linkedin.com/in/rileystone"
},
"experience": [
{
"company": "AgentWorks",
"role": "Staff Engineer",
"dates": "2022-2026",
"bullets": [
"Designed a render pipeline handling 2.4M PDFs/month",
"Reduced cold starts by 37% with queued workers"
]
}
],
"projects": [
{
"name": "OpenInvoice",
"description": "LaTeX invoice templates rendered from JSON",
"stack": [
"Next.js",
"Rust",
"Postgres"
]
}
],
"skills": [
{
"group": "Languages",
"items": [
"TypeScript",
"Rust",
"Python"
]
},
{
"group": "Systems",
"items": [
"Queues",
"Observability",
"PDF generation"
]
}
]
}FAQ
FAQ
Can I generate developer resumes from JSON?
Yes. Send this LaTeX resume source in resources with profile, experience, projects, and skills as JSON data to /render.
Is the PDF ATS-friendly?
The template produces normal selectable PDF text, clear headings, and a deterministic reading order rather than image-only output.
Why use LaTeX for resumes?
LaTeX gives crisp typography, stable spacing, and predictable one-page layout without headless browser drift.
Can an AI agent call this resume API?
Yes. The endpoint accepts structured JSON, making it practical for agents that draft, revise, and export resumes.
Related templates
More LaTeX PDF templates.
Resumes
Classic resume
A LaTeX resume API template for polished, ATS-friendly one-page resumes generated from JSON. Best for job boards, career tools, and profile export features.
Certificates
Course certificate
Elegant completion certificate for online courses, LMS products, and developer education platforms. Designed to print well while keeping verification ids visible.
Letters
Formal letter
Business letter template with sender block, recipient block, subject, body paragraphs, and signature. Good for notices, approvals, and generated correspondence.