Outbound webhooks are available on Team and Enterprise plans.
Prerequisites
- A Redshift Serverless workgroup, or a provisioned Redshift cluster and the database user to connect as.
- IAM credentials, an access key ID and secret access key, allowed to call the Redshift Data API.
- The destination table created before you enable the endpoint. The connector does not create or alter tables.
Configuration
Set the Serverless fields or the provisioned cluster fields, not both. When you set a transformation, the statement names the target table directly, so database, schema, and table become optional.
IAM permissions
Svix does not publish the exact Data API actions this connector calls, so start from AWS’s own reference for authorizing access to the Redshift Data API. AWS documents that callers needredshift-data permissions to run statements and read their status, plus credential permissions that depend on the deployment type: redshift-serverless:GetCredentials for Serverless, or redshift:GetClusterCredentials for a provisioned cluster with a database user.
Start narrow, then widen only if a delivery fails with an authorization error visible in the endpoint Logs tab.
Grant insert access inside the database separately with Redshift GRANT:
Default destination behavior
Without a transformation, Svix inserts into the table identified by the database, schema, and table fields using two columns. It setscreated_at to the insert time and writes the raw payload to payload. Note that unlike the BigQuery and Snowflake connectors, no id column is generated:
VARCHAR(65535) is the largest VARCHAR Redshift allows. If a webhook payload is larger than the column can hold, it cannot be written, and the endpoint is disabled. Keep this in mind if you subscribe to event types with large payloads.
The table must exist before you enable the endpoint.
Create an analytics table
Transformation contract
The transformation builds one parameterized statement per 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.
- Output: an object with
statementandbindings. bindingsis row-oriented. It is an array of{ name, value }objects, and the statement references each one by name, for example:payload0. This differs from the Snowflake connector, which uses column-oriented bindings.- The statement runs against your database through the Redshift Data API.
event.payload.data.object:
Configure in the Dashboard
1
2
Enter connection details
Enter the region and IAM credentials. For Serverless, set the workgroup name. For a provisioned cluster, set the cluster identifier and database user. Fill in database, schema, and table if you are relying on the default insert behavior.3
Configure the transformation
Paste a transformation whose statement names your table and whose bindings match its columns.4
Select event types
Subscribe to the event types you want to store. Every subscribed type runs through the same statement, so confirm the bindings resolve for all of them.5
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
Query through the same Data API the connector uses. Submit the statement:--workgroup-name with --cluster-identifier and --db-user.