Course platforms, event organizers, training providers and HR teams all issue certificates: one design, thousands of names. Designing the certificate as an HTML page lets you use your brand fonts and artwork, change it without touching code that draws text by coordinates, and render it for each recipient on demand.
A landscape A4 certificate
Design the page at the paper size and let the PDF fill it edge to edge with zero margins and printed backgrounds:
curl -X POST "https://shotkit.net/api/take" \
-H "X-Access-Key: YOUR_ACCESS_KEY" \
-H "Content-Type: application/json" \
-d '{"html":"<style>@page{margin:0} body{margin:0} .c{box-sizing:border-box;width:297mm;height:210mm;padding:28mm;border:6mm solid #b45309;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;font-family:Georgia,serif;background:#fffbeb} .n{font-size:44pt;margin:10mm 0;color:#78350f} .m{font:11pt system-ui;color:#57534e}</style><div class=\"c\"><div style=\"font-size:16pt;letter-spacing:.2em\">CERTIFICATE OF COMPLETION</div><div class=\"n\">Grace Hopper</div><div style=\"font-size:14pt\">has completed <b>Advanced TypeScript</b></div><div class=\"m\" style=\"margin-top:14mm\">Issued 29 October 2026 · Certificate ID ACME-2026-00412</div></div>","format":"pdf","pdf_paper_format":"a4","pdf_landscape":true,"pdf_margin":"0","pdf_print_background":true}' \
--fail-with-body -o shot.pdfA shareable PNG version
Recipients like to post certificates on LinkedIn, where an image works better than a PDF. Render the same template as an image by capturing its element at 2×:
curl -X POST "https://shotkit.net/api/take" \
-H "X-Access-Key: YOUR_ACCESS_KEY" \
-H "Content-Type: application/json" \
-d '{"html":"<div class=\"c\" style=\"width:1123px;height:794px;display:grid;place-items:center;background:#fffbeb;border:22px solid #b45309;box-sizing:border-box;font:44px Georgia,serif;color:#78350f\">Grace Hopper</div>","selector":".c","format":"png","device_scale_factor":2}' \
--fail-with-body -o shot.pngIssuing in bulk
- Loop over your recipients and send one request each. Stay within your plan's per-minute limit, or send them with
async=trueand awebhook_url, and useexternal_identifierto match each delivered file to its recipient. - Put a certificate ID and a verification URL on every certificate. A QR code is easy: generate it as an SVG or
data:URL in your template, or load a QR library from a CDN in the HTML, since JavaScript runs before the capture. - Download each file and store it yourself; files on the CDN expire after
cache_ttl.
Frequently asked questions
Can I use my own certificate design and fonts?
Yes. Anything you can build in HTML and CSS works: background artwork, signatures as images, seals as SVG, and any web font loaded from an absolute URL.
PDF or PNG?
PDF for printing and formal records: it keeps text sharp at any size. PNG or JPG for sharing on social media and embedding in emails or web pages.
How many certificates can I generate?
Each certificate is one render. The free plan includes 100 a month; paid plans go much higher, and failed renders don't count.
Can recipients verify a certificate?
Not through shotkit itself, but you can print a unique ID and a QR code linking to a verification page on your site that looks the ID up in your database.