Novu uses FCM version V1
Step 1: Generate your service account key from Firebase
Get your project’s service account credentials from the Firebase Console.- Log in to the Firebase console.
- Create a new Firebase project or select an existing project.

- Click the gear icon ⚙️ next to Project Overview.
- Select Project settings.

- Click the Service accounts tab.
- Click the Generate new private key button. A confirmation menu appears.

- Click Generate key to download a JSON file containing your credentials.

- Open the downloaded JSON file and ensure it contains these fields:
Step 2: Connect FCM to Novu
Add the credentials to your FCM integration in the Novu dashboard.- Log in to the Novu dashboard.
- Navigate to the Integration Store.
- Click Connect provider.
- Click the Push tab, then select Firebase Cloud Messaging (FCM).
- Open the JSON file you downloaded from Firebase in Step 1.
- Copy the entire content of the JSON file and paste it into the Service Account field in the FCM integration modal.

- Click Create Integration to save the integration.
Step 3: Register a subscriber’s device token
Before Novu can send a push notification to your subscriber, you must associate their device’s unique push token with their Novu subscriber profile. You can do this by making an API call to update the subscriber’s credentials.- Node.js
- Python
- Go
- PHP
- .NET
- Java
- cURL
Remove device tokens
When a subscriber logs out or uninstalls your app, remove their FCM device token so notifications are not delivered to the wrong user. See Remove device tokens on the Push channel guide for removing a specific token, clearing all tokens for a provider, and automatic stale-token cleanup for FCM.Step 4: Send a notification
Now you’re ready to send a push notification. You can trigger a notification to a subscriber who has a registered device token.- Node.js
- Python
- Go
- PHP
- .NET
- Java
- cURL
Configure FCM overrides
Save an FCM override on the Push step when you need Firebase HTTP v1 Message fields beyond the step subject and body — for exampledata, platform payloads (android, apns, webpush), fcmOptions, or routing (token, tokens, topic, condition). The override is stored on the step, so it is versioned and promoted with the workflow, and every trigger sends it without changing your trigger call.
Provider content overrides in the workflow editor are rolling out gradually and may not be available on your Push step yet. Overrides passed at trigger time work regardless. See provider content overrides.
Message shape, plus Novu’s multicast tokens key. The editor autocompletes supported field names, validates the JSON, and flags unsupported fields.
Supported top-level keys: notification, data, android, apns, webpush, fcmOptions, token, tokens, topic, and condition. token, topic, and condition match the HTTP v1 target fields; tokens is Novu’s multicast alias (Firebase Admin MulticastMessage). Step content overrides use the HTTP v1 field names (including webpush); trigger examples elsewhere on this page may still show Novu’s webPush alias.
notification.body is the primary content key. If your override omits it, Novu uses the rendered Push step body.
Routing with content overrides
You may set exactly one oftoken, tokens, topic, or condition in a step content override. These fields support Liquid, for example topic: "org-{{subscriber.data.orgId}}".
When you omit routing keys, Novu fills device tokens from the subscriber’s credentials for normal deliveries.
Trigger overrides for these routing keys still work. When the same routing field is set both on the step and at trigger time, the trigger value wins. See provider override scopes.
Routing with _passthrough
Routing keys also take effect inside _passthrough.body, which is merged last and therefore wins over the same field set on the step or at trigger time. You own the destination when you set these fields.
Because FCM addresses one destination per message, a routing key in _passthrough.body replaces the whole set rather than adding to it. In the example below the message goes to news_updates only — the tokens array is dropped, not sent alongside:
tokens an array of non-empty strings — and falls back to the routing set below it. Unlike the schematized keys, _passthrough is not validated, so a typo or a wrong type is silently ignored instead of flagged.
The per-subscriber fan-out warning above applies to a topic or condition set in _passthrough too.
See the FCM HTTP v1 Message reference for the full field list.
Web push with relative links
Suppose you’re using the Firebase (FCM) provider to send push notifications to web browsers via Novu and want users to be returned to the website after clicking the notification. In that case, you must use thelink property with a relative URL.
- Node.js
- Python
- Go
- PHP
- .NET
- Java
- cURL
Frequently asked questions
FCM cost
FCM cost
As per Firebase pricing, Cloud Messaging product is free to use. If other Firebase products are used, then the cost are charged per the product.
The registration token is not a valid FCM registration token
The registration token is not a valid FCM registration token
You might come across an error such as:
Sending message failed due to "The registration token is not a valid FCM registration token". This error happens because of an invalid or stale token. The fix for this is:- Remove the old tokens.
- Generate a new token.
- Save the new token into user subscribers.
FCM notifications sent successfully with no error but push notification is not received in device
FCM notifications sent successfully with no error but push notification is not received in device
Try to generate a new token after clearing device cache and retry with this fresh token.
Sending message failed due to 'Requested entity was not found'
Sending message failed due to 'Requested entity was not found'
This error occurs when your token is no longer valid. To fix this, generate a new token and use it.
Subscriber does not have a configured channel error
Subscriber does not have a configured channel error
This error occurs if the FCM integration is active, but the subscriber is missing from the FCM credentials (deviceTokens). The credentials (deviceTokens) for the subscriber needs to be set.
How to send desktop notifications using FCM
How to send desktop notifications using FCM
Desktop notifications for websites can be sent using FCM webpush.