Texify

Certificates

Course certificate PDF API

Elegant completion certificate for online courses, LMS products, and developer education platforms. Designed to print well while keeping verification ids visible. Send this LaTeX template and JSON data to Texify in one /render request.

Course certificate PDF preview

JSON schema

Fields this template expects.

FieldTypeRequiredDescription
recipient_namestringYesName printed on the certificate.
titlestringYesAward, course, or credential title.
issued_onstringYesIssue date.
issuerobjectYesIssuer organization and signer details.
certificate_idstringNoVerification id or public credential code.

API examples

POST LaTeX and JSON. Receive PDF bytes.

curl
cat > course-certificate-payload.json <<'JSON'
{
  "entrypoint": "main.tex",
  "resources": {
    "main.tex": "\\documentclass[12pt]{article}\n\\usepackage[margin=0.7in,landscape]{geometry}\n\\usepackage{xcolor}\n\\pagestyle{empty}\n\\begin{document}\n\\pagecolor{white}\n\\begin{center}\n\\vspace*{0.35in}\n{\\color{black}\\rule{0.92\\linewidth}{1pt}}\\\\[0.45in]\n{\\Huge\\bfseries Certificate of Achievement}\\\\[0.35in]\n{\\large This certifies that}\\\\[0.18in]\n{\\Huge\\bfseries [[ .recipient_name ]]}\\\\[0.22in]\n{\\large has successfully completed}\\\\[0.15in]\n{\\LARGE\\bfseries [[ .title ]]}\\\\[0.35in]\nIssued on [[ .issued_on ]] by [[ .issuer.organization ]]\\\\[0.5in]\n\\begin{tabular}{cc}\n\\rule{2.3in}{0.4pt} & \\rule{2.3in}{0.4pt}\\\\\n[[ .issuer.signer ]] & [[ .issuer.role ]]\\\\\n\\end{tabular}\\\\[0.3in]\n[[ with .certificate_id ]]Verification ID: \\texttt{[[ . ]]}[[ end ]]\\\\[0.35in]\n{\\color{black}\\rule{0.92\\linewidth}{1pt}}\n\\end{center}\n\\end{document}"
  },
  "data": {
    "recipient_name": "Mina Chen",
    "title": "Advanced TypeScript Systems",
    "issued_on": "2026-07-01",
    "issuer": {
      "organization": "Compile School",
      "signer": "Elena Park",
      "role": "Program Director"
    },
    "certificate_id": "CERT-TS-2026-00941"
  }
}
JSON

curl -sS -X POST https://api.texify.dev/render \
  -H "Content-Type: application/json" \
  --data @course-certificate-payload.json \
  --output course-certificate.pdf
Python
import json
import requests

payload = json.loads(r'''{
  "entrypoint": "main.tex",
  "resources": {
    "main.tex": "\\documentclass[12pt]{article}\n\\usepackage[margin=0.7in,landscape]{geometry}\n\\usepackage{xcolor}\n\\pagestyle{empty}\n\\begin{document}\n\\pagecolor{white}\n\\begin{center}\n\\vspace*{0.35in}\n{\\color{black}\\rule{0.92\\linewidth}{1pt}}\\\\[0.45in]\n{\\Huge\\bfseries Certificate of Achievement}\\\\[0.35in]\n{\\large This certifies that}\\\\[0.18in]\n{\\Huge\\bfseries [[ .recipient_name ]]}\\\\[0.22in]\n{\\large has successfully completed}\\\\[0.15in]\n{\\LARGE\\bfseries [[ .title ]]}\\\\[0.35in]\nIssued on [[ .issued_on ]] by [[ .issuer.organization ]]\\\\[0.5in]\n\\begin{tabular}{cc}\n\\rule{2.3in}{0.4pt} & \\rule{2.3in}{0.4pt}\\\\\n[[ .issuer.signer ]] & [[ .issuer.role ]]\\\\\n\\end{tabular}\\\\[0.3in]\n[[ with .certificate_id ]]Verification ID: \\texttt{[[ . ]]}[[ end ]]\\\\[0.35in]\n{\\color{black}\\rule{0.92\\linewidth}{1pt}}\n\\end{center}\n\\end{document}"
  },
  "data": {
    "recipient_name": "Mina Chen",
    "title": "Advanced TypeScript Systems",
    "issued_on": "2026-07-01",
    "issuer": {
      "organization": "Compile School",
      "signer": "Elena Park",
      "role": "Program Director"
    },
    "certificate_id": "CERT-TS-2026-00941"
  }
}''')
response = requests.post(
    "https://api.texify.dev/render",
    json=payload,
    timeout=90,
)
response.raise_for_status()

with open("course-certificate.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[12pt]{article}\n\\usepackage[margin=0.7in,landscape]{geometry}\n\\usepackage{xcolor}\n\\pagestyle{empty}\n\\begin{document}\n\\pagecolor{white}\n\\begin{center}\n\\vspace*{0.35in}\n{\\color{black}\\rule{0.92\\linewidth}{1pt}}\\\\[0.45in]\n{\\Huge\\bfseries Certificate of Achievement}\\\\[0.35in]\n{\\large This certifies that}\\\\[0.18in]\n{\\Huge\\bfseries [[ .recipient_name ]]}\\\\[0.22in]\n{\\large has successfully completed}\\\\[0.15in]\n{\\LARGE\\bfseries [[ .title ]]}\\\\[0.35in]\nIssued on [[ .issued_on ]] by [[ .issuer.organization ]]\\\\[0.5in]\n\\begin{tabular}{cc}\n\\rule{2.3in}{0.4pt} & \\rule{2.3in}{0.4pt}\\\\\n[[ .issuer.signer ]] & [[ .issuer.role ]]\\\\\n\\end{tabular}\\\\[0.3in]\n[[ with .certificate_id ]]Verification ID: \\texttt{[[ . ]]}[[ end ]]\\\\[0.35in]\n{\\color{black}\\rule{0.92\\linewidth}{1pt}}\n\\end{center}\n\\end{document}"
  },
  "data": {
    "recipient_name": "Mina Chen",
    "title": "Advanced TypeScript Systems",
    "issued_on": "2026-07-01",
    "issuer": {
      "organization": "Compile School",
      "signer": "Elena Park",
      "role": "Program Director"
    },
    "certificate_id": "CERT-TS-2026-00941"
  }
};

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("course-certificate.pdf", pdf);

The template

LaTeX source sent as resources["main.tex"].

main.tex
\documentclass[12pt]{article}
\usepackage[margin=0.7in,landscape]{geometry}
\usepackage{xcolor}
\pagestyle{empty}
\begin{document}
\pagecolor{white}
\begin{center}
\vspace*{0.35in}
{\color{black}\rule{0.92\linewidth}{1pt}}\\[0.45in]
{\Huge\bfseries Certificate of Achievement}\\[0.35in]
{\large This certifies that}\\[0.18in]
{\Huge\bfseries [[ .recipient_name ]]}\\[0.22in]
{\large has successfully completed}\\[0.15in]
{\LARGE\bfseries [[ .title ]]}\\[0.35in]
Issued on [[ .issued_on ]] by [[ .issuer.organization ]]\\[0.5in]
\begin{tabular}{cc}
\rule{2.3in}{0.4pt} & \rule{2.3in}{0.4pt}\\
[[ .issuer.signer ]] & [[ .issuer.role ]]\\
\end{tabular}\\[0.3in]
[[ with .certificate_id ]]Verification ID: \texttt{[[ . ]]}[[ end ]]\\[0.35in]
{\color{black}\rule{0.92\linewidth}{1pt}}
\end{center}
\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
{
  "recipient_name": "Mina Chen",
  "title": "Advanced TypeScript Systems",
  "issued_on": "2026-07-01",
  "issuer": {
    "organization": "Compile School",
    "signer": "Elena Park",
    "role": "Program Director"
  },
  "certificate_id": "CERT-TS-2026-00941"
}

FAQ

FAQ

Can I use Course certificate as a certificate 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.