Register an HTTPS endpoint to receive Novala events, verify request authenticity with HMAC-SHA256 signatures, and understand retry and auto-disable behavior.
Webhooks let Novala push real-time event notifications to your server whenever something happens in the platform — a lead is created, a deal changes stage, a booking is confirmed, and more. You register an endpoint URL in the dashboard, and Novala sends a POST request to that URL with a JSON payload each time a matching event occurs.
In the Novala dashboard, navigate to Settings → Webhooks.
2
Add your endpoint
Click Add Endpoint, enter your publicly accessible HTTPS URL, and select the event types you want to receive. To receive all events, select All events or subscribe to *.
3
Save the signing secret
After saving, copy the signing secret shown in the dialog. You will use it to verify incoming requests. It is not shown again after you close the dialog.
Webhook endpoints must be reachable over HTTPS. HTTP endpoints are not supported.
Always verify the X-Novala-Signature header before processing a webhook. Verification confirms the request genuinely came from Novala and that the body was not tampered with in transit.The signature is computed as:
HMAC-SHA256(secret, "{timestamp}.{rawBody}")
The result is hex-encoded and prefixed with sha256=.
Always use a timing-safe comparison function (such as timingSafeEqual in Node.js or hmac.compare_digest in Python) when comparing signatures. Regular string equality is vulnerable to timing attacks.
Your endpoint must return a 2xx HTTP status code within 10 seconds to acknowledge receipt. Any response outside the 200–299 range is treated as a delivery failure and triggers a retry.Return 200 immediately and process the event asynchronously:
TypeScript
app.post('/webhooks/novala', express.raw({ type: 'application/json' }), async (req, res) => { // Verify and acknowledge immediately if (!verifyNovalaWebhook(req.body, ...)) { return res.status(401).end(); } res.status(200).end(); // Acknowledge before processing // Process asynchronously const event = JSON.parse(req.body.toString()); await queue.push(event);});
If your endpoint returns a non-2xx status or does not respond within 10 seconds, Novala retries the delivery with exponential backoff:
Attempt
Delay after failure
1
1 minute
2
5 minutes
3
25 minutes
4
2 hours
5
10 hours
After 5 failed attempts the delivery is marked as permanently failed. If an endpoint accumulates 10 consecutive failures it is automatically disabled. You can re-enable it in Settings → Webhooks.