# Generate certificates automatically: PDF and image from one template

> Issue course, event and award certificates from one template: one per completion over the API or hundreds from a CSV, as a PDF and a shareable image.

Published 2026-11-04 · https://shareglint.com/en/use-cases/certificates

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](https://shareglint.com/en/tools/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](https://shareglint.com/en/templates/certificate). 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](https://shareglint.com/en/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:

```javascript
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:

```bash
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](https://shareglint.com/en/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](https://shareglint.com/en/docs#signed) 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](https://addtoprofile.linkedin.com/) button, which pre-fills it — credential ID and URL included, so your verification page goes there ([LinkedIn Help](https://www.linkedin.com/help/linkedin/answer/a528030/linkedin-add-to-profile-feature-faqs)).

## 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](https://shareglint.com/en/pricing) 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_url` is printed, not checked.

## FAQ

### Can I generate certificates in bulk from a spreadsheet?

Yes. POST /v1/batches takes a certificate template, a CSV or Google Sheets link and a format such as pdf, renders one certificate per row and returns each file's URL plus a ZIP of all of them. The dashboard's Bulk page does the same from an uploaded CSV.

### Are the certificates PDFs or images?

Either, from the same template: format pdf gives a one-page vector PDF the size of the template, png or jpeg an image for email and social posts. Each format is a separate render.

### Do you email the certificates to recipients?

No. The API returns a URL for each certificate; your LMS, mailing tool or a short script sends it. A signed URL can go straight into an email template, so nothing is rendered until the recipient opens it.

### How much does a certificate cost?

One render of the monthly quota per certificate and format. The Free plan includes a monthly allowance with a watermark; paid plans have no watermark. Re-rendering the same certificate with the same values is free.

### Can a certificate show a verification link or ID?

The certification-earned template has credential_id and verify_url fields that print on the certificate. The verification page itself is yours: we render the link, we do not host or check credentials.
