Webhook security
Each webhook endpoint has a unique secret Nuvion uses to sign every delivery, so you can verify events actually originate from Nuvion.Rotating a webhook secret
Setrotate_secret: true when calling PATCH /entity-webhooks/:id to rotate a webhook’s secret.
A new webhook secret is generated and displayed once, the same as at creation.
After rotating a secret, update your webhook verification logic to use the new value.
Verifying webhook signatures
Nuvion signs every webhook request using HMAC-SHA256. Each request includes the following headers:How signatures are generated
To generate the signature, Nuvion constructs the following payload:x-nuvion-event-signature header.
How to verify a webhook
- Retrieve your webhook secret.
- Read the
x-nuvion-event-timestampheader. - Construct
{timestamp}.{payload}using the webhook payload and timestamp. - Generate an HMAC-SHA256 signature using your webhook secret.
- Compare the generated signature with the value in
x-nuvion-event-signature. - Process the webhook only if the signatures match.
Registering an endpoint
Register webhook endpoints withPOST /entity-webhooks. You can register multiple endpoints per entity, each subscribing to a different set of events. See the Webhooks API reference for the full lifecycle, and the Nuvion Dashboard if you prefer to manage them there.
Use separate endpoints for sandbox and production. Sandbox events are sent to your sandbox webhook URL; production events go to your production URL.
Child entities
If a child entity doesn’t have its own webhook configured, events triggered on it are sent to its parent entity’s webhook instead. Register a webhook directly on a child entity to override this and receive its events separately. See Managing child entities for how the parent-child relationship works.Delivery
Nuvion sends an HTTPPOST request to your registered endpoint with a JSON body. Your endpoint must return a 2xx status code to acknowledge receipt. Any other response is treated as a failure and triggers a retry.
Request format
Retries
If your endpoint does not return2xx, Nuvion retries up to 5 times with exponential backoff: 1, 2, 4, 8, then 16 minutes, a 31-minute total window. After the final attempt, the event is not redelivered.
Idempotency
Nuvion may deliver the same event more than once, for example if your server acknowledges receipt after a network timeout that already triggered a retry on Nuvion’s side. Your webhook handler must be idempotent. The recommended approach: store processed event IDs using theid field in the event data, and skip any event you have already handled.
Event types
See Event types for full payload schemas and examples for each event.
What’s next
Event types
Full payload schemas and examples for every event.
Webhooks API reference
Create, update, and manage webhook endpoints, plus delivery logs and test events.
