Webhooks
Zillo POSTs signed JSON to your URL whenever events happen. Each delivery is HMAC-SHA256 signed; failures retry on an exponential schedule.
Lifecycle
- You register an HTTPS URL + which events you care about (or
*). - An event happens (order paid, gift card redeemed, etc.).
- We enqueue one delivery per matching endpoint.
- Our worker POSTs the payload with a
Zillo-Signatureheader. - Your endpoint returns 2xx within 10 seconds to confirm receipt.
- Non-2xx / timeout → retry at 30s, 5m, 30m, 2h, 12h, 24h (7 total attempts).
- 5 consecutive failures → endpoint auto-disabled + email to merchant.
Headers
POST /your-webhook-endpoint HTTP/1.1 Content-Type: application/json User-Agent: Zillo-Webhooks/1.0 Zillo-Signature: t=1717592400,v1=3a1b...c9f Zillo-Event-Id: 8f9d... Zillo-Event-Type: order.completed
Payload shape
{
"id": "evt_8f9d...", // unique event id
"type": "order.completed", // event type
"created": 1717592400, // unix seconds
"data": { ... } // the serialized resource
}datamatches the resource's shape from the REST API — for order.completed, it's the same payload you'd get from GET /v1/orders/{id}.
Idempotency
Each event has a stable id. We may retry deliveries (Stripe re-delivery, your endpoint returned 5xx). Track received ids in your system so duplicates are no-ops.