DocPress

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