Certificates of completion from data
Issue a certificate PDF for each learner, attendee or member from a single API call. The hosted certificate template takes the recipient's name, the achievement, the date and the issuer, and lays them out on a single landscape page with a signature line. For your own design, send HTML and CSS to the same endpoint.
The hosted certificate template
POST https://docpress.dev/v1/pdf
Authorization: Bearer dp_your_key
Content-Type: application/json
{
"template": "certificate",
"data": {
"title": "Certificate of Completion",
"recipient": "Jordan Example",
"statement": "has successfully completed",
"achievement": "Introduction to Paged Media",
"description": "A 6-hour course on print layout with CSS.",
"date": "2026-10-18",
"issuer": "Example Training Co.",
"signer": "A. Instructor",
"signer_title": "Lead Trainer",
"certificate_id": "CERT-2026-00417",
"logo": "data:image/png;base64,iVBORw0KGgo..."
},
"filename": "certificate-jordan-example.pdf"
}Required: recipient, achievement, date (YYYY-MM-DD) and issuer; the rest is optional, including an accent colour. Full field list at /templates/certificate. Names are printed as sent; the API does not check them.
Your own design in HTML
A certificate is one page with a border, a few lines of centred text and a logo. That is a short HTML document:
{
"html": "<div class=\"cert\"><img src=\"data:image/svg+xml;base64,...\"><h1>Certificate of Completion</h1><p>awarded to</p><h2>Jordan Example</h2><p>for completing <em>Introduction to Paged Media</em></p><p class=\"date\">18 October 2026</p></div>",
"css": "@page { size: A4 landscape; margin: 0 } .cert { height: 100%; padding: 20mm; border: 6pt double #1f4f8f; text-align: center; font-family: Caladea, serif } h2 { font-size: 36pt }",
"theme": "none"
}Set the page size and orientation in @page; the engine handles the rest. Embed your font with @font-face and a data: URI if the installed set is not what you want.
Issuing in bulk
- One request per certificate keeps each PDF independent and lets you store it against the recipient's record.
- 2 renders run concurrently per account; a worker pool of 2 is the right shape for a batch.
- Store the PDF yourself. The API keeps no copy, which also means no learner data stays on our side after the response.
- Put a unique identifier on each certificate so it can be checked against your records later.
Pricing
Plans are capped. When a plan's monthly document count is reached the API returns 429 until you upgrade or the month rolls over; there is no overage billing.
- Free: 50 documents/month, footer mark on output, no card required.
- Starter: $9/month, 500 documents, no mark.
- Pro: $29/month, 3,000 documents.
- Scale: $79/month, 15,000 documents.
Every response includes X-Quota-Used and X-Quota-Limit headers so you can watch usage without polling. Details on the pricing page.
Questions
Can I use a landscape page?
Yes. The hosted certificate template is landscape. For your own HTML, set @page { size: A4 landscape } (or Letter landscape) in the css field.
Does the certificate include a verification feature?
No. Print a unique identifier from your own system on the certificate and verify it against your records. The API only renders what you send.
Can I add a signature image?
Yes, as a data: URI image (PNG, JPEG or SVG). External images are never fetched.
Is learner data stored?
No. The request is rendered and the PDF returned; the source and output are not kept. Only a usage count and page count are logged.
What does the free plan look like?
50 certificates a month with a small docpress.dev footer mark, suitable for testing the layout. Paid plans from $9/month remove the mark.
Related
Free previews carry a watermark and are deleted after 24 hours. Free API output carries a footer mark. The renderer runs no JavaScript and never fetches external URLs. Privacy · Terms · Refunds