Course completions on a learning platform, attendance after a workshop, employee recognition, professional certifications with an expiry date. Different occasions, identical shape of problem: one design, many names.
## A certificate that looks like one
```html <div style="text-align: center; padding: 60px; border: 3px solid #B8860B; font-family: Georgia, serif;"> <h2 style="color: #8B7355; letter-spacing: 3px;">CERTIFICATE OF COMPLETION</h2> <p style="font-size: 14px; color: #666;">This certifies that</p> <h1 style="font-size: 32px; color: #333; margin: 20px 0;">{{recipient_name}}</h1> <p>has successfully completed the course</p> <h3 style="color: #555;">"{{course_name}}"</h3> <p>on {{completion_date}}</p> <p style="margin-top: 40px; font-size: 12px;">Certificate ID: {{cert_id}}</p> </div> ```
A border, the organisation's name somewhere visible, the recipient's name as the largest thing on the page, and a certificate ID for anyone who later needs to verify it existed. That last field matters more than it looks: a certificate with no unique identifier is a certificate nobody can confirm is genuine.
## The batch math, correctly this time
The cap is five certificates per request, not ten. That number used to be wrong on this page.
```json { "documents": [ { "title": "Cert_Rahul_Kumar", "content": "<certificate HTML for Rahul>" }, { "title": "Cert_Priya_Singh", "content": "<certificate HTML for Priya>" } ], "template": "elegant", "pageSize": "Presentation" } ```
For 200 recipients, that is 40 calls of five each, not 20 calls of ten. At 60 requests a minute, 40 calls comfortably fits inside two minutes, so the actual throughput ceiling is around 300 certificates a minute, not the 600 an earlier version of this page claimed based on the wrong batch size.
## Template choice
"Elegant" carries a thin gold border accent and reads as considered rather than efficient, which is the right register for a certificate. "Classic" is a formal alternative with a double-line header, closer to what a professional certification body would send. "Professional" and "Corporate" work if the certificate is meant to look like it came from an organisation with a brand book rather than a course platform. Avoid "Bold" or "Vibrant" here; both are built to grab attention, which is the opposite of what a certificate of achievement should be doing.
## Non-Latin recipient names
The API now embeds a matching Noto font automatically for Devanagari text, so a recipient name in Hindi renders correctly in the certificate body without any extra step on your side. This is new as of this year; if you built against an older version of this integration that routed Hindi names through the browser tool separately, that workaround is no longer necessary.
Field-by-field detail on the generate endpoint, including what the response looks like when object storage is configured, is on the [docs page](/docs#generate).