Outbound webhooks are available on Team and Enterprise plans.
Prerequisites
- An existing Google Cloud Storage bucket, created before you configure the endpoint
- A Google Cloud service account with a JSON key that can create objects in that bucket
Required permission
Writing a new object requires thestorage.objects.create permission, which is included in the predefined roles/storage.objectCreator role. That role can create objects but cannot read, overwrite, or delete them, which is usually what an append-only event archive wants. Grant it on the bucket rather than the project:
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 bucket
Create the bucket and service account credentials. Keep the complete credentials JSON available.2
3
Enter connection details
Enter Bucket and the service account Credentials JSON.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
Select the event types to store. Selecting fewer event types also limits which events reach the transformation.6
Test the endpoint
Create the endpoint. In Testing, send an example for a subscribed event type. Confirm success in Logs, then verify the bucket contains a new timestamp-suffixed object with the expected content.Verify delivery
List objects under your key prefix, then read one and compare it with the transformation output in the endpoint’s Logs:roles/storage.objectCreator is the only role you granted, the connector’s service account cannot list or read objects. Run these commands with your own credentials rather than the connector’s key.
Troubleshooting
- Credentials are rejected: Paste the complete service account credentials JSON and confirm it is valid JSON.
- The bucket cannot be accessed: Confirm the bucket exists and the supplied service account can write to it.
- No object appears after a successful test: Check the exact bucket name and inspect the transformed output in Logs.
- Object contents are malformed: Confirm
config.formatmatchesdata. For"raw", return a string. - Events are missing: Confirm the endpoint subscribes to those event types in the intended Novu environment.