webhooks
Webhooks
Subscribe to events, handle them in your backend, verify signatures with our SDK helpers.
Signature header
SnapPDF-Signature: t=1745000000,v1=aa11bb22cc33...
Compute HMAC-SHA256(secret, "{timestamp}.{rawBody}") and compare with constant-time equality. SDKs do this for you — see snap.webhooks.verifySignature(...).
Event types
| Event | Fires when |
|---|---|
| operation.completed | Async job finished successfully. Payload includes the output URL. |
| operation.failed | Async job errored. Payload includes the error envelope. |
| usage.warning_80 | You have used 80% of your monthly quota. |
| usage.limit_reached | 100% usage — subsequent calls return 429 quota_exceeded. |
| key.created | A new API key was issued via the dashboard or API. |
| key.revoked | An API key was revoked. |
| billing.subscription_updated | Plan changed — new limits in effect immediately. |
| billing.payment_failed | Stripe charge failed. Access may be suspended in 3 days. |
Retry policy
We deliver once, then retry on non-2xx responses at 5s, 1m, 5m, 30m, 2h, 12h — six attempts over 24 hours. After that we stop and emit a webhook.delivery_failed event you can inspect in the dashboard.