Static mode never uses channel endpoints. Dynamic mode fans out to every
tool_webhook endpoint registered for the subscriber on the integration. If a subscriber has no endpoints in dynamic mode, the Tool step is marked skipped for that subscriber.Prerequisites
- An HTTPS (or HTTP for local testing) endpoint that accepts
POST,PUT, orPATCHrequests and returns a2xxresponse - Access to the Novu dashboard
- For dynamic routing: your Novu secret key to register endpoints from your server
Static vs dynamic routing
Set Routing Mode when you create the integration. Defaults to Static when omitted.
Add Tool Webhook in Novu
1
Open the Integrations Store
In the Novu dashboard, click Integrations Store in the sidebar.
2
Add Tool Webhook
Click Connect Provider, select Tool, then choose Tool webhook.
3
Choose routing mode and defaults
Configure shared defaults that apply to every delivery in this environment:
4
Create the integration
Click Create Integration and note the
integrationIdentifier — you need it when registering dynamic endpoints and when adding a Tool step to a workflow.Request shape
Novu sendsContent-Type: application/json. The exact JSON body depends on whether you configured a Body template on the integration.
Body merge
- Integration Body (optional) — parsed as a JSON object and used as the base key/value map.
- Step editor — the rendered Tool step content is always sent as
contentand wins over anycontentkey in the integration Body template. - Step overrides — additional keys from the step or trigger overrides are merged into the payload (excluding reserved routing fields).
{"event":"novu.tool","version":1}, the outbound body becomes:
Header merge
Headers are merged in this order (later keys override earlier ones):Content-Type: application/json- Integration Headers (JSON object)
- Dynamic endpoint
headers(when present on thetool_webhookendpoint) - Step-level header overrides (when configured on the step)
Authorization token per subscriber without changing the integration.
HTTP method
Resolution order: endpointmethod (dynamic) → step override → integration HTTP Method → POST.
Verify X-Novu-Signature
When you set a Signing Secret on the integration, Novu signs the exact UTF-8 request body string with HMAC SHA-256 and sends the hex digest in the X-Novu-Signature header.
Verify on your server using the raw request body bytes (before JSON re-serialization):
2xx response. Novu treats non-2xx responses as delivery failures.
Dynamic mode: register subscriber endpoints
In dynamic routing, each subscriber can have multipletool_webhook endpoints on the same integration. Novu delivers the Tool step once per endpoint — useful when a subscriber wants parallel notifications to several systems.
Create an endpoint
Register a subscriber destination with typetool_webhook. Set createSubscriberIfMissing: true to provision the Novu subscriber on first connect.
- Node.js
- Python
- Go
- PHP
- .NET
- Java
- cURL
Endpoint shape
Unlike PagerDuty or Opsgenie, a subscriber may register multiple
tool_webhook endpoints on the same integration. Each endpoint receives its own HTTP request when the workflow runs.
Update, list, and delete
Rotate a URL or headers withPATCH /v1/channel-endpoints/:identifier. List endpoints for a subscriber:
Send from a workflow
1
Add a Tool step
In the workflow editor, add a step and select Tool as the channel. Choose the Tool Webhook integration you created.
2
Write the step body
The step body becomes the
content field in the outbound JSON (after template rendering). Use placeholders such as {{payload.orderId}} or {{subscriber.firstName}}.3
Trigger the workflow
Trigger the workflow for a subscriber. In static mode Novu calls the integration URL. In dynamic mode Novu calls every
tool_webhook endpoint registered for that subscriber.- Node.js
- Python
- Go
- PHP
- .NET
- Java
- cURL
What happens without an endpoint (dynamic mode)
If Routing Mode is Dynamic and a subscriber has notool_webhook endpoints on the integration, Novu marks the Tool step as skipped for that subscriber in the Activity feed. Other subscribers on the same trigger are unaffected.
Related
Create a channel endpoint
API reference for
POST /v1/channel-endpoints, including the tool_webhook variant.Update an endpoint
API reference for
PATCH /v1/channel-endpoints/:identifier. Rotate URLs or headers for a subscriber destination.