Webhooks & events
Subscribe to events instead of polling. A Webhook is a tenant-scoped endpoint + subscribed event set + signing secret; a Delivery is a signed, replay-protected, retried attempt to reach it.
Event catalogue
Subscribe only to catalogue events (the dispatcher’s WEBHOOK_EVENT_TYPES, nothing else is ever delivered); an unknown name returns 422 UNKNOWN_EVENT_TYPE. The AutoID print-cycle trio closes the print loop event-driven: carrier.generated ("codes ready, pull carriers/export"), then print.confirmed / print.failed fan out the print layer's POST /carriers/print-status reports (one aggregate event per outcome class with the serial list), full walkthrough in AutoID print loop.
Envelope
External events use the platform envelope, the WebhookEvent value object. Field names are exactly these; there is no Stripe-style created/livemode/data.object nesting:
{ "id": "<uuid>", "type": "product.published",
"timestamp": "2026-07-20T12:00:00.000Z", "apiVersion": "2024-12-05",
"data": { /* event-specific fields */ } }Delivery contract
- Signatures:
X-Norruva-Signature(V1) plusX-Norruva-TimestampandX-Norruva-Signature-V2(timestamped HMAC). - Replay window: 5 minutes, a stale timestamp is rejected.
- Dedup: the delivery id is stable across retries; use it for receiver-side idempotency.
- Retries:
4xx→ no retry;5xx/timeout → backoff retries. Manual redelivery is available. - Delivery durability varies by event type:
print.confirmed,print.failed, andcarrier.generatedride the durable outbox → event bus → dispatch path, with a persisted delivery record and retry cron backing the signature/replay/dedup/retry guarantees above.product.created,product.updated,product.published,import.completed, andimport.failedare emitted best-effort (non-outbox), if the emitting process fails between the domain action and dispatch, the webhook is simply not sent, with no queued retry of the emission itself. A durable-emission upgrade for these types is tracked as a follow-up.
POST /webhooks/{id}/rotate-secret with a 24 h overlap window. See the receiver guide.