There is no shared, environment-level Grafana webhook URL. If a subscriber has no Grafana endpoint registered, the Tool step is marked skipped for that subscriber; no alert is created and no error is raised.
Prerequisites
- A Grafana Cloud stack with IRM/OnCall (or a self-hosted Grafana OnCall install) and permission to add integrations
- Access to the Novu dashboard
Get a Formatted Webhook URL
Every subscriber routes to their own Grafana OnCall integration, so each subscriber needs a webhook URL from their stack.1
Open Integrations in Grafana IRM
In Grafana IRM, go to the Integrations tab and click New integration.
2
Create a Formatted Webhook integration
Under Monitoring systems, choose Formatted Webhook, give it a name and team, and create it.
3
Copy the webhook URL
Grafana generates a unique webhook URL such as
https://<stack>.grafana.net/integrations/v1/formatted_webhook/<token>/. Copy it. This is the URL Novu will store for the subscriber.authToken (see below).
Add Grafana in Novu
1
Open the Integrations Store
In the Novu dashboard, click Integrations Store in the sidebar.
2
Add Grafana
Click Connect Provider, select Tool, then choose Grafana.
3
Create the integration
Grafana has no environment-level credentials, so there is nothing to paste on this screen. Click Create Integration to save it. This gives you the
integrationIdentifier you’ll reference below when registering subscribers’ webhook URLs.Store a subscriber’s webhook URL
Register each subscriber’s webhook URL as a channel endpoint on the Grafana integration. Novu encrypts the URL (and the optionalauthToken) at rest on ChannelEndpoint.endpoint and returns the wire shape { url, authToken? } on reads.
Create the endpoint
Send the webhook URL as agrafana_oncall_integration endpoint. Set createSubscriberIfMissing: true so this call also provisions the Novu subscriber the first time an end user connects Grafana, with no separate identify call required.
- Node.js
- Python
- Go
- PHP
- .NET
- Java
- cURL
Endpoint shape
One endpoint per subscriber, per integration
A subscriber may have at most one Grafana endpoint per integration. A secondPOST with the same (subscriberId, integrationIdentifier) returns 409 Conflict. Rotate the webhook URL (or bearer token) by PATCHing the existing endpoint instead:
Reading and disconnecting
Reads return the full wire shape (including the webhook URL), so you can display connection status. Mask it in your UI (the Novu dashboard shows only the last four characters).Alert a subscriber from a workflow
Once a subscriber has a Grafana endpoint, add a Tool step with Grafana to your workflow and trigger it like any other workflow.1
Add a Tool step
In the workflow editor, add a step and select Tool as the channel. Choose the Grafana integration you created.
2
Write the alert title
The step content becomes the alert group
title in the Formatted Webhook request. Use dynamic placeholders such as {{payload.orderNumber}} or {{subscriber.firstName}}. To add detail below the title, set a message override on the step.3
Trigger the workflow
Send a trigger for a subscriber who has connected Grafana. Novu resolves that subscriber’s webhook URL and creates an alert group on their Grafana stack.
- Node.js
- Python
- Go
- PHP
- .NET
- Java
- cURL
Alert payload defaults and overrides
The deterministic
alert_uid means Novu retries for the same step group into the same Grafana alert instead of creating duplicates.
What happens without an endpoint
If a workflow triggers for a subscriber who has no Grafana endpoint on the target integration, Novu marks the step as skipped in the Activity feed for that subscriber and does not create an alert. Other subscribers on the same trigger are unaffected. Each is routed to their own Grafana stack.Related
Create a channel endpoint
API reference for
POST /v1/channel-endpoints, including the grafana_oncall_integration variant.Rotate a webhook URL
API reference for
PATCH /v1/channel-endpoints/:identifier. Use this to rotate an existing subscriber’s webhook URL or bearer token.