To issue certificates automatically, design one template, then send each recipient's name, course and date to the API — one request when a learner finishes, or one batch for a whole class from a spreadsheet. Shareglint returns a printable one-page PDF and, from the same template, a shareable image for email or LinkedIn. Four certificate templates are built in (certificate, certification-earned, award-achievement, graduation), or you bring your own HTML and CSS at a paper size.
For a handful of certificates with no code, the free certificate generator fills in a template in the browser and downloads the file.
The templates
| Template | Fields | Use it for |
|---|---|---|
certificate |
name, course, date, issuer, issuer_role, seal, logo… | Course completion |
certification-earned |
credential, name, issuer, issued, expires, credential_id, verify_url, skills, badge | Professional credentials with an ID |
award-achievement |
recipient, award_name, placement, category, issuer, year, photo | Competitions and awards |
graduation |
name, degree, school, class_year, honors, photo, school_logo | Graduates and cohorts |
Each built-in template renders in every size preset (og 1200×630, square 1080×1080, portrait 1080×1350, story 1080×1920, pinterest 1000×1500, youtube 1280×720) and takes accent and theme (dark or light) on top of its fields, so the same certificate comes out in your brand colour as a 1200×630 share card or a square post. See them in the template gallery. For print, copy a template and set it to a paper size: 1123×794 px is A4 landscape, 1056×816 px US Letter landscape. The PDF page is exactly the template's size, as the PDF generation API page explains.
One certificate when a learner finishes
Most LMS and course platforms can call a webhook on completion. Your handler sends one request:
const res = await fetch('https://shareglint.com/v1/images?wait=true', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.CERT_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
template: 'certificate',
format: 'pdf',
modifications: {
name: learner.fullName,
course: course.title,
date: new Date().toLocaleDateString('en-GB', { dateStyle: 'long' }),
issuer: course.instructor,
logo: 'https://example.com/logo.png',
},
}),
});
const { url } = await res.json(); // https://…/img_….pdf
Store the url with the enrollment and put it in your completion email. Ask again with "format": "png" for the image people post. Long names shrink to fit rather than wrapping; images such as logo are fetched from public URLs when the certificate renders. Do not call the API from browser code: the key would be public.
A whole class from a spreadsheet
After a bootcamp or a conference, export the attendees and send one batch:
curl -X POST "https://shareglint.com/v1/batches" \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"template": "certificate",
"format": "pdf",
"csv_url": "https://docs.google.com/spreadsheets/d/…/edit?usp=sharing"
}'
Columns named like the fields (name, course, date, issuer) map by themselves; columns maps any others. A filename column names each PDF in the ZIP (amelia-novak.pdf), and id comes back with each row's result so you can match certificates to people. GET /v1/batches/{id} reports progress and, when done, every URL and one ZIP. Rows per batch by plan: Free 50, Starter 500, Pro 1,000, Scale 2,000, Business 5,000. If you fix a typo and run the batch again, only the changed rows are new renders; unchanged ones return the existing files for free.
The dashboard's Bulk page does the same without code — upload the CSV or paste the sheet link, map columns, preview the first certificates for free, download the ZIP. An AI assistant connected to the MCP server can run it from a chat with create_batch.
Links in an email instead of files
You do not have to render certificates before sending them. A signed URL (/i/…/certificate.pdf?name=…&course=…&s=…, signed with your signing secret) is a complete link that renders the PDF the first time it is opened and serves the cached file after that. Put it in the email template of your mailing tool with the recipient's fields filled in, and only the certificates people open use quota. The signature covers every field, so a recipient cannot change the name in the link. The docs show how to sign in each language.
Verification and sharing
For credentials people list on a CV, use certification-earned: its credential_id and verify_url print on the certificate, pointing at a page on your site that confirms the credential. We render that link; the verification page and the record behind it are yours. For LinkedIn, the PNG of the same template is what people attach to a post. The Licenses & certifications entry on a profile is the member's to add; as a certification provider you can offer LinkedIn's Add to Profile button, which pre-fills it — credential ID and URL included, so your verification page goes there (LinkedIn Help).
What it costs
Each certificate is one render per format: a class of 300 as PDF is 300 renders, and the PNG versions another 300. The Free plan has 100 renders a month with a watermark — enough to design and test, not to issue real certificates. Starter is $9 a month for 2,000 renders without a watermark ($4.50 per 1,000), and a one-off pack of 1,000 for $8 covers a graduation month without changing plan. The pricing page compares this with certificate tools from Bannerbear, Placid and others.
What it does not do
- It does not send email or host a certificate portal; your LMS or mailing tool delivers the URL.
- PDFs are one page each. A certificate with a transcript on a second page needs a document tool.
- Fonts are the installed families; you cannot upload a custom font file. Pick a template font from
GET /v1/fonts. - We do not store or verify credentials —
verify_urlis printed, not checked.