Outbound webhooks are available on Team and Enterprise plans.
Prerequisites
- A Postgres database reachable over the public internet
- The destination table created before you enable the endpoint. The connector does not create or alter tables.
- A dedicated database user that can connect to the database and insert into that table
- Network rules that allow the connection, including any cloud provider IP allowlist
Configuration
Create the destination table
This schema keeps the event type available for filtering, extracts the two fields most reports need, and preserves the complete webhook body:payload holds the full body as JSONB, so a new field in a Novu payload does not require a migration. received_at is set by the transformation rather than by the payload, which makes it a reliable sort key across every event type.
Grant least-privilege access
SELECT only if your verification process or database policy requires the same user to read rows back.
Transformation contract
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 return shape is defined by the template the Novu Dashboard ships with this connector. Open the template and read the JSDoc comment above its handler for the exact keys, because the return shape differs between connector families. Map the values below into that template rather than pasting a handler from another connector page:
Send an example event before you customize anything, read the transformed output in the endpoint’s Logs, then change one column at a time and re-test.
Configure in the Dashboard
1
Prepare the database
Create the table, create the restricted user, and apply the grants above. Confirm the user can connect and insert from outside your network.2
3
Enter connection details
Enter the host, port, database, username, password, and table name. Add a description that identifies the database and environment.4
Configure the transformation
Start from the transformation template shown in the Dashboard and map the columns using the table above.5
Select event types
Subscribe to the event types your consumer needs. All subscribed types insert into the same table, so confirm the transformation produces valid rows for each one. For delivery reporting, start withmessage.sent, message.delivered, and message.failed.6
Test the endpoint
Click Create, open the endpoint, go to the Testing tab, and use Send Example for each subscribed event type. Confirm success in the Logs tab.Verify delivery
Troubleshooting
Use the Logs tab to inspect transformed payloads and delivery attempts.