Skip to main content
Grafana in Novu is routed per subscriber. Each subscriber brings their own Grafana IRM/OnCall incoming-webhook (Formatted Webhook) URL, so one workflow trigger can create alert groups on different Grafana stacks and escalation chains for different recipients. The integration itself never stores a webhook URL. It acts as the anchor that per-subscriber channel endpoints hang off of.
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.
The webhook URL embeds a routing token that grants the ability to create alerts on the integration. Treat it like a password: keep it on your server, never embed it in client-side code, and never log it.
If the integration is configured to require a Grafana service account bearer token, mint a token for a service account with alert-ingestion permission and store it alongside the URL as 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 optional authToken) at rest on ChannelEndpoint.endpoint and returns the wire shape { url, authToken? } on reads.
Registering an endpoint requires your Novu secret key. Always call the channel-endpoints API from your server, never from a browser or mobile client. A typical flow is: your app UI sends the webhook URL to your backend, and your backend forwards it to Novu.

Create the endpoint

Send the webhook URL as a grafana_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.

Endpoint shape

One endpoint per subscriber, per integration

A subscriber may have at most one Grafana endpoint per integration. A second POST 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).
Delete the endpoint to disconnect a subscriber. This removes the encrypted webhook URL stored on the endpoint:

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.

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.

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.