Issue verifiable certificates programmatically. Create an API key in your Profile (Pro and Enterprise plans), then authenticate every request with a Bearer token. Limit: 120 requests per minute per key.
Base URL & authentication
Base URL: https://certtrigger.com/api/v1
Header: Authorization: Bearer ct_your_api_key
POST /certificates
Issues one verifiable certificate from a template you own. Data keys fill {{Placeholder}} fields; {{VerifyURL}} and {{CertificateID}} are added automatically (use them in QR elements).
curl -X POST https://certtrigger.com/api/v1/certificates \
-H "Authorization: Bearer ct_..." \
-H "Content-Type: application/json" \
-d '{
"templateId": "8b1e...uuid",
"data": { "Name": "Layla Hassan", "Course": "Data Analysis", "Date": "July 2026" },
"recipientEmail": "layla@example.com",
"expiresAt": "2027-07-23T00:00:00Z"
}'Response (201):
{
"certificateId": "VbXUxI-Wdts",
"verifyUrl": "https://certtrigger.com/verify/VbXUxI-Wdts",
"pdfUrl": "https://certtrigger.com/api/public/verify/VbXUxI-Wdts/pdf",
"issuedAt": "2026-07-23T12:00:00.000Z"
}GET /certificates/:certificateId
Returns status (valid / revoked / expired), recipient, view count and links for a certificate you issued.
GET /templates
Lists your templates (id, name, category) for integration pickers.
Error codes
| Code | Meaning |
|---|
| API_KEY_REQUIRED | Missing/malformed Authorization header |
| API_KEY_INVALID | Unknown or disabled key |
| FEATURE_NOT_IN_PLAN | Your plan does not include API access |
| VALIDATION_ERROR | Request body failed validation (details included) |
| NOT_FOUND | Template or certificate not found |
| 429 | Rate limit exceeded — retry after the window resets |
Outbound webhooks
Batches with webhooks enabled POST each recipient's data plus the certificate PDF (base64) to your endpoint — ideal for n8n or Zapier. Every request is signed: verify the X-CertTrigger-Signature header (sha256= HMAC of the raw body) using your signing secret from GET /api/webhooks/signing-secret.
REST hooks (event subscriptions)
Subscribe a URL to platform events and get called the moment they happen — this is what Zapier, Make and n8n use. Events: certificate.issued, claim.received (live event forms), batch.completed. Up to 10 subscriptions per account; URLs must be public https endpoints. Deliveries carry X-CertTrigger-Signature (same HMAC as webhooks) and X-CertTrigger-Event headers.
# subscribe
curl -X POST https://certtrigger.com/api/v1/hooks \
-H "Authorization: Bearer ct_..." \
-H "Content-Type: application/json" \
-d '{ "url": "https://hooks.example.com/certs", "event": "certificate.issued" }'
# list GET /api/v1/hooks
# unsubscribe DELETE /api/v1/hooks/:idDelivery payload:
{
"event": "certificate.issued",
"data": {
"certificateId": "VbXUxI-Wdts",
"recipientEmail": "layla@example.com",
"templateName": "Workshop Certificate",
"verifyUrl": "https://certtrigger.com/verify/VbXUxI-Wdts",
"source": "batch"
},
"timestamp": "2026-07-25T12:00:00.000Z"
}Recipient lists
List your recipient lists and push recipients into them from external systems — form tools, CRMs or automation platforms. New recipients are immediately available to batches and live event forms.
# your lists GET /api/v1/lists
# add a contact
curl -X POST https://certtrigger.com/api/v1/lists/LIST_ID/contacts \
-H "Authorization: Bearer ct_..." \
-H "Content-Type: application/json" \
-d '{ "data": { "Name": "Layla Hassan", "Email": "layla@example.com" } }'