Outbound webhooks are available on Team and Enterprise plans.
Prerequisites
- An Azure storage account
- An existing blob container, created before you configure the endpoint
- The storage account name and one of its access keys
Access model
The connector authenticates with a storage account access key. An account key grants full access to every container in that storage account, and it cannot be narrowed to a single container the way an Azure RBAC role assignment or a container-scoped SAS token can. Because of that, use a storage account dedicated to webhook exports rather than one that also holds application data, and rotate the key on your normal schedule. Azure supports two keys per account so you can rotate without downtime: update the endpoint to the second key, then regenerate the first.Configuration
Transformation contract
Object storage connectors run the handler once per delivery batch. The handler receives one delivery batch:input.events, an array whose length is capped by the endpoint batch sizeinput.events[].eventType, the Novu event type, for examplemessage.sentinput.events[].payload, the webhook body
payload.object is the resource type as a string, such as "message", and the resource itself is under payload.data.object. For message events, fields such as subscriberId and channel are therefore at event.payload.data.object. Other event families use different resource shapes, so guard extracted fields with defaults.
The handler must return:
The default template returns the batch unchanged:
"jsonl", each line is one event:
Novu example
This example groups objects by date and keeps each payload intact:config.key, so use the key for the prefix structure rather than adding a uniqueness suffix.
Batching behavior
One delivered batch produces one object. Treat its contents as a variable-length batch and read it line by line when using"jsonl".
Configure in the Dashboard
1
Prepare the container
Create the storage account and container. Keep the account name and access key available.2
3
Enter connection details
Enter Container, Account, and Access key.4
Configure the transformation
Start from the provided object storage template. Changeconfig.key to the prefix you want and keep config.format aligned with data.5
Select event types
Choose only the event types that you want to store. The connector processes selected events in batches.6
Test the endpoint
Create the endpoint. Open its Testing tab, choose a subscribed event type, and click Send Example. Confirm success in Logs, then verify that a timestamp-suffixed blob exists in the container and contains the expected data.Verify delivery
List the most recent blobs under your key prefix:Troubleshooting
- Authentication fails: Recheck the account name and access key. Confirm the key is active and can access the configured container.
- The container is not found: Confirm the container already exists in the specified storage account and that its spelling and casing match.
- A successful delivery has unexpected contents: Inspect the transformed output in Logs and verify that
formatanddataagree. - A raw blob is invalid: Return a string in
datawhenconfig.formatis"raw". - Expected events are absent: Check the endpoint’s selected event types and the current Novu environment.