Skip to main content
The Snowflake connector inserts Novu webhook events into a Snowflake table. Each batch of webhooks becomes a single parameterized INSERT statement. Use it when notification data belongs in your Snowflake warehouse alongside other analytics sources. Novu webhook delivery is powered by Svix. This connector maps to the Svix Snowflake advanced endpoint.
Outbound webhooks are available on Team and Enterprise plans.

Prerequisites

  • A Snowflake account and its account identifier in organization-account form, for example ab12345-xs67890.
  • An RSA key pair, with the public key assigned to a Snowflake user. This connector authenticates with key-pair JWT authentication, not a password. See key-pair authentication.
  • The destination table created before you enable the endpoint. The connector does not create or alter tables.

Configuration

When you set a transformation, the statement names the target table directly, so database, schema, and table become optional.

Authentication and permissions

Generate an RSA key pair, assign the public key to the Snowflake user, and paste the complete matching private key into the connector. Svix does not publish a required privilege list. Scope the user with Snowflake GRANT so it can insert into one table and nothing else:
The connector configuration has no warehouse field. Set a default warehouse and default role on the Snowflake user with the DEFAULT_WAREHOUSE and DEFAULT_ROLE properties of CREATE USER so statements have compute to run on.

Default destination behavior

Without a transformation, Svix inserts into the table identified by the database, schema, and table fields using three columns. It generates a unique id, sets created_at to the insert time, and writes the raw payload to payload:
The table must exist before you enable the endpoint.

Create an analytics table

Transformation contract

The transformation shapes each batch into one SQL statement: The handler receives one delivery batch:
  • input.events, an array whose length is capped by the endpoint batch size
  • input.events[].eventType, the Novu event type, for example message.sent
  • input.events[].payload, the webhook body
The webhook body wraps the resource in an envelope. 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 statement and bindings.
  • statement is the SQL to execute, referencing bindings by name, for example :subscriber_id.
  • bindings is column-oriented. It is an object keyed by binding name, and each binding has a Snowflake type and a value array holding one entry per row in the batch. All arrays must be the same length.
  • Send every value as a string. For allowed types, see using bind variables in a statement.
Novu-oriented example that matches the analytics table above and reads message fields from event.payload.data.object:
Use the FIXED type for numeric columns, and still push the value as a string.

Configure in the Dashboard

1

Add the endpoint

Open Webhooks in the Novu Dashboard, select Endpoints, click Add Endpoint, and choose .
2

Enter connection details

Enter the account identifier, user ID, and private key. 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 each binding array is filled 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

Troubleshooting

Official references