The monthly quota reached a threshold
Posted to the subscriptions to quota.threshold_reached at 50, 80, 95 and 100% of the monthly quota, once a month per threshold. Signed and retried like every event. The test event (POST /api/v1/webhooks/{id}/test) arrives under this type too, with data: { test: true, message } and none of the fields of the real event: check data.test first.
Headers
t=<unix timestamp>,v1=<hex>: v1 is the HMAC-SHA256 of "<t>.<raw body>" keyed with the subscription's secret. Reject a t more than 300 seconds away from your clock.
The same t, in seconds.
The event's id — the same on every attempt and every replay: the deduplication key.
The event's type.
This delivery. A manual replay gets a new one.
The attempt number, starting at 1.
Payload
Example payload
{
"id": "evt_3kT9xQ2mV7aB1cD4",
"type": "quota.threshold_reached",
"created_at": "2026-09-24T16:02:11.000Z",
"data": {
"threshold": 80,
"plan": "free",
"quota": 3000,
"sent": 2400,
"in_flight": 35,
"remaining": 565,
"resets_at": "2026-10-01T00:00:00.000Z",
"period": "2026-09"
}
}Response
Any 2xx within 15 seconds acknowledges receipt. Anything else — another status, a redirect (not followed), no answer, a network error — is retried: 5 attempts in all, the next ones 30 s, 2 min, 10 min and 1 h after the previous failure.
Changes
Webhooks have no change history: a webhook is keyed by its event name rather than a path and method, so no recorded change can name it.