step.custom, which runs arbitrary code in your bridge and returns structured results to later steps.
Connect a Tool provider before triggering. PagerDuty, Opsgenie, and Grafana route per subscriber via channel endpoints. Tool webhook can use a shared URL (static) or per-subscriber URLs (dynamic).
When to use step.tool
A common pattern is to fetch in
step.custom, then page with step.tool using that result.
Providers
If a subscriber has no channel endpoint for an endpoint-routed provider (or no dynamic webhook URLs), Novu marks the Tool step skipped for that subscriber. Other subscribers on the same trigger are unaffected.
Define a tool step
The resolver must return abody string. That string is the default content sent to the provider.
Workflow with payload
Provider overrides
Use theproviders option to pass fields the shared body schema does not cover. Keys are Tool provider IDs: pagerduty, opsgenie, grafana, and tool-webhook.
Only the override for the integration that actually sends is applied. You can define several; unused ones are ignored.
- PagerDuty
- Opsgenie
- Grafana
- Tool webhook
severity to critical and source to novu when you omit those fields. See incident payload defaults._passthrough to merge extra body, headers, or query into the underlying provider request. See provider overrides.
Step controls
Expose copy that non-developers can edit in the dashboard without changing code.novu.trigger. Learn more about controls.
Skip the step
Skip delivery from previous-step results, payload flags, or subscriber data.skip runs at send time, not during dashboard preview. See skip.
Channel preferences
Disable Tool for a workflow (or leave it subscriber-controlled) withpreferences.channels.tool:
Output
The resolver returns{ body: string }. The step does not return a result, so you cannot branch later steps on whether the provider accepted the request.
See the Tool step reference.
Related
Tool step reference
Output schema and SDK types.
Tool webhook
Static vs dynamic routing, request body merge, and HMAC signatures.
PagerDuty
Per-subscriber routing keys and Events API v2 incident fields.
Custom step
Fetch data in your bridge, then pass it into
step.tool.