Authentication
All requests to /api/v1/* (except /verify/:code) require a valid API key sent as a bearer token:
Authorization: Bearer certify_live_...
Key format
Keys are prefixed with certify_live_ followed by 32 alphanumeric characters. Only the first few characters of the prefix are shown back to you in the dashboard — the full key is only visible once at creation time.
Scopes
Each key is issued with one or more scopes. Requests outside a key's scopes return 403 insufficient_scope.
| Scope | Grants |
|---|---|
| templates:read | GET /templates, GET /templates/:id |
| certificates:read | GET /certificates, GET /certificates/:id |
| certificates:write | POST /certificates, POST /certificates/:id/revoke |
Rotation
Keys have no expiry. To rotate:
- Create a new key with the same scopes.
- Deploy the new key to your integration.
- Once traffic has shifted, revoke the old key in Settings → API Keys.
Revoked keys stop working immediately — there is no grace period.
Security
- Never commit keys to source control. Use environment variables or a secret manager.
- Never ship keys to the browser. Keys act on your behalf — anyone holding one can issue certificates against your quota.
- Scope aggressively. If an integration only reads, issue a key with just
:readscopes. - Monitor usage.
last_used_atupdates on every request; surprising activity is a rotation signal.