Issuing 5,000 course certificates in one afternoon
A spreadsheet of names, one landscape template, batch requests of 100, and signed links per student. The full workflow including naming, verification codes and delivery.
Updated 31 August 2026
Training platforms hit this once a cohort: hundreds or thousands of certificates, each with a name, a course, a date and a unique code, due by Friday.
Data first
One row per certificate: recipient, course, completion date, a verification code you generate (random, not sequential — sequential codes let anyone enumerate other students' certificates), and an email.
The template
A landscape A4 with the recipient's name as the largest element, the issuer, the course, the date, a signatory and the code. PDFGeny's `certificate` template is exactly that; or send your own HTML with your branding.
Batching
Send batches of 100:
POST /api/v1/batch
{"documents":[{"template":"certificate","data":{"recipient":"Ada Lovelace","course":"…","cert_id":"NA-7K2M"},"filename":"NA-7K2M.pdf"}, … ]}
Fifty batches for 5,000 certificates; each job returns a signed link when done. Poll the batch or receive a webhook per document.
Verification page
Publish `/verify/` on your site that shows the certificate's holder and course. The code on the PDF becomes proof, and employers check it without emailing you.
Delivery
Email each student their signed link (valid seven days) and keep a copy in your storage for re-issue. Attachments of 5,000 emails will trip spam filters; links will not.
Try it: convert HTML to PDF in the browser, or get a free API key — 50 documents a month.
More guides
Writing HTML templates for PDF: a style guide (Jinja, Django, Handlebars)
Templates that render well as PDFs follow a few rules: fixed page geometry, no external state, defensive filters, print CSS. Examples in Jinja and Django syntax.
Generating receipts at checkout without slowing the checkout
The receipt PDF should never sit between the customer and the order confirmation. A pattern: confirm first, render asynchronously, attach when ready.
URL-to-PDF and SSRF: how a PDF renderer becomes an attack surface
A renderer that fetches URLs can be pointed at your internal network. The attacks, the defences, and what to demand from a PDF API vendor.
Why the PDF from headless Chromium differs from Print to PDF in the browser
Same engine, different output: viewport, print media, backgrounds, default margins, headless font rendering. A list of the differences and the option that fixes each.