POST notifications when events happen in Vanta instead of polling the API. You’ll register an endpoint, implement a handler that verifies signatures, and confirm an event end to end.
Before you begin
This guide is for developers building a server that receives Vanta webhooks. You’ll need:- A publicly accessible HTTPS endpoint on your server to receive webhook
POSTrequests. - Access to Settings → Webhooks in the Vanta dashboard, to register the endpoint and copy its signing secret.
- The official Svix library for your language — recommended for signature verification.
Webhooks are powered by Svix, an enterprise webhook delivery platform, so you get automatic retries, delivery guarantees, and signature verification out of the box. For the full event catalog, payloads, and schemas, see the Webhook event reference.
Register your endpoint
In the Vanta dashboard, register the URL that will receive events. An endpoint is a URL on your server that receives webhook
POST requests from Vanta.- Navigate to Settings → Webhooks.
- Click Add Endpoint.
- Enter your endpoint URL (must be HTTPS).
- Browse the available event types and select the ones relevant to your integration — see the Webhook event reference for the full catalog of events, payloads, and schemas. Leave the selection blank to receive all events.
- Click Create to register the endpoint.
whsec_) from the Signing Secret section — you’ll use it to verify signatures in the next steps.Implement your handler
Implement a server-side handler that can receive the webhook request you just configured.Keep the following in mind as you build:
Expose your endpoint over HTTPS
Expose your endpoint over HTTPS
Your endpoint must be publicly accessible over HTTPS.
Respond with a 2xx within 15 seconds
Respond with a 2xx within 15 seconds
Return a
2xx status code within 15 seconds to acknowledge receipt. If you don’t, the delivery is marked as failed and retried.Disable CSRF protection on the webhook route
Disable CSRF protection on the webhook route
Webhook requests won’t include CSRF tokens, so CSRF protection must be disabled for the webhook endpoint.
Process payloads asynchronously
Process payloads asynchronously
Return a
2xx immediately, then handle the event in a background job or queue. This prevents timeouts on long-running operations.Implement idempotent handling
Implement idempotent handling
Webhook delivery is “at least once,” so your endpoint may receive the same event more than once. Use the
svix-id header to deduplicate events.Verify webhook signatures
Webhook signatures let you confirm that messages are actually sent by Vanta and not a malicious third party. Verification isn’t strictly required, but always verify signatures in production.Each webhook message includes If you prefer not to use a library, you can verify signatures manually:
svix-id, svix-timestamp, and svix-signature headers used for verification — see Delivery format in the event reference for what each header contains.The simplest way to verify signatures is to use the official Svix libraries. Install the library for your language and use the Webhook.verify method.- Extract the
svix-id,svix-timestamp, andsvix-signatureheaders. - Concatenate
{svix-id}.{svix-timestamp}.{body}(the raw request body as a string). - Base64-decode the signing secret (remove the
whsec_prefix first). - Compute an HMAC-SHA256 of the signed content using the decoded secret.
- Base64-encode the result and compare it against the signature(s) in the
svix-signatureheader (split by space, each prefixed withv1,).
Test your endpoint
Before going to production, confirm your endpoint can receive and process webhooks correctly.
- Go to Settings → Webhooks in the Vanta dashboard.
- Select the endpoint you want to test.
- Navigate to the Testing tab.
- Choose an event type and click Send Example.
Webhook requests are failing with 4xx errors
Webhook requests are failing with 4xx errors
- Verify that your endpoint URL is correct and publicly accessible over HTTPS.
- Ensure that CSRF protection is disabled for the webhook endpoint.
- Check that your server is returning a
2xxstatus code.
Signature verification is failing
Signature verification is failing
- Make sure you are using the raw request body (not a parsed JSON object) when verifying the signature.
- Confirm that the signing secret matches the one displayed in the webhook dashboard.
- Check that you haven’t accidentally modified or re-serialized the request body before verification.
Webhook requests are timing out
Webhook requests are timing out
Your endpoint must respond within 15 seconds. If your processing takes longer, acknowledge the webhook immediately with a
200 response and handle the event asynchronously in a background job or queue.Recovering missed events
Recovering missed events
If your endpoint was down for an extended period, recover missed events through the webhook dashboard:
- Go to Settings → Webhooks.
- Select the affected endpoint.
- Browse the message history to find failed deliveries.
- Click Retry on individual messages, or use Bulk Retry to replay all failed messages within a time range.
Congratulations
You’ve built a webhook integration. Your endpoint now receives verified, real-time events from Vanta, acknowledges them within the retry window, and processes them idempotently — no polling required. As you add event types to your subscription, consult the Webhook event reference for each one’s payload and schema.Next steps
Webhook event reference
Browse every event type, with payloads, schemas, and examples.
Manage Vanta
Use webhooks alongside the Manage Vanta API to react to events in real time.
Build an Integration
Become a Vanta partner and push resources into customers’ Vanta accounts.