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.Documentation Index
Fetch the complete documentation index at: https://developers.novala.ai/llms.txt
Use this file to discover all available pages before exploring further.
Registering a webhook endpoint
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
*.Payload format
Novala sends aPOST request with Content-Type: application/json to your endpoint. The request body has this shape:
| Field | Type | Description |
|---|---|---|
id | string | Unique delivery ID for this event. |
type | string | Event type name (for example, pipeline.deal.created). |
tenantId | string | UUID of the tenant that generated the event. |
timestamp | string | ISO 8601 timestamp of when the event occurred. |
source | string | Module that emitted the event (for example, bookings, pipeline, leads). |
data | object | Event-specific payload. Shape varies by event type. |
Request headers
Novala includes these headers on every webhook delivery:| Header | Description |
|---|---|
X-Novala-Signature | HMAC-SHA256 signature for verifying the payload (see below). |
X-Novala-Timestamp | ISO 8601 timestamp used in the signature computation. |
X-Novala-Delivery-Id | UUID identifying this specific delivery attempt. |
X-Novala-Event-Type | Event type string (same as type in the body). |
User-Agent | Novala-Webhooks/1.0 |
Verifying signatures
Always verify theX-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:
sha256=.
Verification example
Responding to webhooks
Your endpoint must return a2xx 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
Retry behavior
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 |
Common event types
| Event type | Triggered when |
|---|---|
leads.lead.created | A new lead is created. |
pipeline.deal.created | A new deal is created. |
pipeline.deal.stage-changed | A deal moves to a different stage. |
pipeline.deal.closed-won | A deal is moved to a closed-won stage. |
bookings.confirmed | A booking is confirmed. |
bookings.cancelled | A booking is cancelled. |
bookings.resource.created | A new bookable resource is created. |
calso.inspection.submitted | An inspection is submitted for review. |
contacts.contact.created | A new contact is created. |