Skip to content

Conversation

@Aviatorscode2
Copy link
Contributor

@Aviatorscode2 Aviatorscode2 commented Nov 7, 2025

Summary by CodeRabbit

  • Documentation
    • Major rewrite of Integrations docs into step-by-step, provider-centric workflows; added “Supported providers” galleries and targeting/override guidance across SMS, Email, Push, and Chat.
    • Expanded trigger override docs with channel/provider scopes and passthrough fields; added demo integration page and removed legacy demo content.
  • Chores
    • Updated integrations navigation, meta entries, and platform section header text.

✏️ Tip: You can customize this high-level summary in your review settings.

@netlify
Copy link

netlify bot commented Nov 7, 2025

Deploy Preview for docs-novu ready!

Name Link
🔨 Latest commit 458257f
🔍 Latest deploy log https://app.netlify.com/projects/docs-novu/deploys/69356f3f9acb760008c3e94e
😎 Deploy Preview https://deploy-preview-1004--docs-novu.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 7, 2025

Walkthrough

Restructures integration docs into provider-centric, stepwise workflows for Email, SMS, Push, and Chat; introduces provider galleries and "target a specific provider" guidance; expands Integrations overview with Provider vs Integration and override scopes; adds demo integration page and updates navigation/meta files. No public API changes.

Changes

Cohort / File(s) Summary of Changes
SMS: workflow & provider catalog
content/docs/platform/integrations/sms/index.mdx
Rewrote SMS docs into a guided step flow, added "Target a specific provider" guidance and inline trigger override annotations, introduced a supported‑providers gallery, and removed deprecated sections.
SMS metadata
content/docs/platform/integrations/sms/meta.json
Updated pages to reference providers index (["(providers)"]).
Integrations overview
content/docs/platform/integrations/overview.mdx
Added Provider vs Integration definitions, primary vs active integrations, environment scoping, and override semantics; refreshed integration cards.
Trigger overrides & provider scopes
content/docs/platform/integrations/trigger-overrides.mdx
Added Channel overrides note (Email/SMS), renamed/expanded provider override scopes, added "Sending extra fields supported by provider SDK" with passthrough JSON example, and simplified step-level examples.
Email: workflow & provider catalog
content/docs/platform/integrations/email/index.mdx
Converted Email docs to step-based flow (add provider, add channel, define content, store subscriber, trigger), added attachments guidance, sending/targeting overrides, and Supported Providers gallery; updated payload shapes and annotations.
Email metadata
content/docs/platform/integrations/email/meta.json
Replaced pages list with ["(providers)", "activity-tracking"].
Push: flows, token mgmt & provider cards
content/docs/platform/integrations/push/index.mdx, content/docs/platform/integrations/push/adding-push.mdx
Replaced Tabs with Steps, reworked conceptual text, added extensive device token management flows and examples, replaced provider list with Cards; removed content from adding-push.mdx.
Push providers (many)
content/docs/platform/integrations/push/(providers)/*.mdx
Substantial rewrites across APNS, FCM, Expo, OneSignal, Push Webhook, Pusher Beams, Pushpad to a stepwise setup/usage format, updated credentials and overrides examples, and added integrationIdentifier guidance.
Chat: workflow & provider catalog
content/docs/platform/integrations/chat/index.mdx
Reorganized Chat docs into steps (add provider, define content, store credentials, trigger), updated provider auth notes, and added Supported Providers gallery.
Demo integrations
content/docs/platform/integrations/demo-integration.mdx, content/docs/platform/integrations/demo-providers.mdx
Added new demo-integration.mdx describing sandbox demo integrations and limits; removed old demo-providers.mdx content.
Navigation / meta updates
content/docs/platform/integrations/meta.json, content/docs/platform/meta.json, content/docs/platform/integrations/*/meta.json
Adjusted pages order and names (inserted demo-integration, moved trigger-overrides), set several pages to ["(providers)"], and renamed header label to ---Integrate Channels Providers---.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Files to focus on:
    • content/docs/platform/integrations/sms/index.mdx — verify trigger override examples and inline annotation markers.
    • content/docs/platform/integrations/email/index.mdx — check Steps components, attachments/payload shape changes, and provider gallery links.
    • content/docs/platform/integrations/push/* — confirm token management examples and consistency across provider pages.
    • content/docs/platform/integrations/*/meta.json — ensure navigation ordering and "(providers)" entries align with site structure.

Possibly related PRs

Suggested reviewers

  • DianaHackmamba
  • djabarovgeorge
  • ChmaraX

Poem

A rabbit hops through docs so bright,
Cards of providers line the night.
Steps to add, target, trigger, send —
Overrides guide each careful blend.
Thump — the message finds its flight! 🐇📨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Title check ✅ Passed The PR title 'Channels providers integration' directly reflects the primary changes: restructuring documentation to center on channel providers (Email, SMS, Push, Chat) with new provider-centric workflows and provider galleries throughout.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch channels-providers-integration

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 11e499b and 6e4c009.

📒 Files selected for processing (2)
  • content/docs/platform/integrations/sms/index.mdx (5 hunks)
  • content/docs/platform/integrations/sms/meta.json (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-09T13:28:47.834Z
Learnt from: jackall3n
Repo: novuhq/docs PR: 929
File: content/docs/platform/sdks/react-native/hooks/novu-provider.mdx:48-53
Timestamp: 2025-08-09T13:28:47.834Z
Learning: In the novu/react-native and novu/react packages, the NovuProvider component uses the prop name `subscriber` (not `subscriberId`) to pass the subscriber identifier. This is consistent across all documentation examples and the actual implementation.

Applied to files:

  • content/docs/platform/integrations/sms/index.mdx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Redirect rules - docs-novu
  • GitHub Check: Header rules - docs-novu
  • GitHub Check: Pages changed - docs-novu
  • GitHub Check: Build and Lint
🔇 Additional comments (3)
content/docs/platform/integrations/sms/meta.json (1)

1-4: Metadata update aligns with the new documentation structure.

The change to reference (providers) reflects the shift toward a provider-centric navigation structure, consistent with the restructured index.mdx documentation.

content/docs/platform/integrations/sms/index.mdx (2)

75-101: Override SMS settings section is well-structured.

The code example clearly demonstrates SMS overrides for to, from, and content fields, with proper annotations for documentation highlighting. The example is correct and helpful.


103-133: "Target a specific provider" section is well-designed.

This new section effectively explains the integrationIdentifier use case with a practical example (transactional vs. security SMS), and the code example correctly demonstrates the feature. The feature is clearly documented.

Comment on lines +8 to +50
The SMS channel delivers messages to your subscribers’ mobile devices through your configured SMS provider integrations.

With the SMS channel, you can:
## How SMS delivery works in Novu

- **Switch Providers Effortlessly:** Integrate popular services like Twilio, Nexmo, or a custom provider
- **Deliver at Scale:** Handle high-volume messaging with confidence
- **Customize and Track:** Tailor SMS content dynamically and monitor delivery status in real time
Here’s the typical flow for sending an email notification through Novu:

## Key Features
<Steps>
<Step>

- **Dynamic Messaging:** Inject user-specific data into messages for personalization
- **Multi-Provider Support:** Switch or combine providers to maximize reliability
- **Delivery Insights:** Track message delivery, failures, and user engagement
- **Fallback Mechanisms:** Ensure reliable messaging with backup providers
- **Template Management:** Simplify content creation with reusable SMS templates
- **Streamlined API Integration:** Easily connect your backend for automated messaging workflows
### Add an email provider

## Common Use Cases
Start by adding an SMS provider in the **Integration Store** on your Novu dashboard. You can connect one or more integrations for the different or the same providers.

- **Transactional Notifications:** Send OTPs, receipts, or order updates instantly
- **Marketing Campaigns:** Deliver promotional offers and updates to your audience
- **Critical Alerts:** Notify users of urgent events, like security breaches or system outages
- **Reminders and Scheduling:** Automate reminders for appointments, events, or deadlines
To learn [how to add an SMS provider](/platform/integrations/sms#supported-providers), refer to the guide for that provider.

</Step>
<Step>
### Add the email channel to your workflow

Next, include an [SMS step in your workflow](/platform/workflow/build-a-workflow). This step defines when and how an SMS should be sent as part of your notification workflow.
</Step>
<Step>
### Define the SMS content

## Sending SMS overrides
Within the Email step editor, write the message body. The editor supports dynamic data for personalized content.

The overrides field supports a `sms` property and `from`, `to`, `content` field overrides. This allows you to send a message to a different recipient, from a different sender, or with a different content.
</Step>
<Step>
### Store subscriber phone number

Novu automatically sends the notification to the phone number stored on the subscriber's profile . You must ensure that this field is set for any subscriber who needs to receive emails. You can store subscribers phone number using the Novu API, or SDK.
</Step>
<Step>
### Trigger the workflow

[Trigger the workflow](/api-reference/events/trigger-event) from your application code by sending an event to Novu.
Novu automatically:
- Resolves the subscriber.
- Selects the correct provider.
- Renders the email template.
- Delivers the message through the configured email integration.
</Step>
</Steps>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix systematic copy-paste errors: "email" should be "SMS" throughout the workflow steps.

The step-by-step workflow structure is excellent, but multiple instances incorrectly reference "email" instead of "SMS." These appear to be copy-paste errors from email integration documentation:

  • Line 12: "sending an email notification" → should be "SMS notification"
  • Line 17: "Add an email provider" → should be "SMS provider"
  • Line 25: "Add the email channel" → should be "SMS channel"
  • Line 32: "Within the Email step editor" → should be "SMS step editor"
  • Line 38: "receive emails" → should be "receive SMS"
  • Line 47: "Renders the email template" → should be "SMS template"
  • Line 48: "through the configured email integration" → should be "SMS integration"

Apply this diff to correct all references:

-Here's the typical flow for sending an email notification through Novu:
+Here's the typical flow for sending an SMS notification through Novu:

-### Add an email provider
+### Add an SMS provider

-### Add the email channel to your workflow
+### Add the SMS channel to your workflow

-Within the Email step editor, write the message body.
+Within the SMS step editor, write the message body.

-Novu automatically sends the notification to the phone number stored on the subscriber's profile . You must ensure that this field is set for any subscriber who needs to receive emails.
+Novu automatically sends the notification to the phone number stored on the subscriber's profile. You must ensure that this field is set for any subscriber who needs to receive SMS.

-Renders the email template.
-Delivers the message through the configured email integration.
+Renders the SMS template.
+Delivers the message through the configured SMS integration.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
The SMS channel delivers messages to your subscribers’ mobile devices through your configured SMS provider integrations.
With the SMS channel, you can:
## How SMS delivery works in Novu
- **Switch Providers Effortlessly:** Integrate popular services like Twilio, Nexmo, or a custom provider
- **Deliver at Scale:** Handle high-volume messaging with confidence
- **Customize and Track:** Tailor SMS content dynamically and monitor delivery status in real time
Here’s the typical flow for sending an email notification through Novu:
## Key Features
<Steps>
<Step>
- **Dynamic Messaging:** Inject user-specific data into messages for personalization
- **Multi-Provider Support:** Switch or combine providers to maximize reliability
- **Delivery Insights:** Track message delivery, failures, and user engagement
- **Fallback Mechanisms:** Ensure reliable messaging with backup providers
- **Template Management:** Simplify content creation with reusable SMS templates
- **Streamlined API Integration:** Easily connect your backend for automated messaging workflows
### Add an email provider
## Common Use Cases
Start by adding an SMS provider in the **Integration Store** on your Novu dashboard. You can connect one or more integrations for the different or the same providers.
- **Transactional Notifications:** Send OTPs, receipts, or order updates instantly
- **Marketing Campaigns:** Deliver promotional offers and updates to your audience
- **Critical Alerts:** Notify users of urgent events, like security breaches or system outages
- **Reminders and Scheduling:** Automate reminders for appointments, events, or deadlines
To learn [how to add an SMS provider](/platform/integrations/sms#supported-providers), refer to the guide for that provider.
</Step>
<Step>
### Add the email channel to your workflow
Next, include an [SMS step in your workflow](/platform/workflow/build-a-workflow). This step defines when and how an SMS should be sent as part of your notification workflow.
</Step>
<Step>
### Define the SMS content
## Sending SMS overrides
Within the Email step editor, write the message body. The editor supports dynamic data for personalized content.
The overrides field supports a `sms` property and `from`, `to`, `content` field overrides. This allows you to send a message to a different recipient, from a different sender, or with a different content.
</Step>
<Step>
### Store subscriber phone number
Novu automatically sends the notification to the phone number stored on the subscriber's profile . You must ensure that this field is set for any subscriber who needs to receive emails. You can store subscribers phone number using the Novu API, or SDK.
</Step>
<Step>
### Trigger the workflow
[Trigger the workflow](/api-reference/events/trigger-event) from your application code by sending an event to Novu.
Novu automatically:
- Resolves the subscriber.
- Selects the correct provider.
- Renders the email template.
- Delivers the message through the configured email integration.
</Step>
</Steps>
The SMS channel delivers messages to your subscribers’ mobile devices through your configured SMS provider integrations.
## How SMS delivery works in Novu
Here’s the typical flow for sending an SMS notification through Novu:
<Steps>
<Step>
### Add an SMS provider
Start by adding an SMS provider in the **Integration Store** on your Novu dashboard. You can connect one or more integrations for the different or the same providers.
To learn [how to add an SMS provider](/platform/integrations/sms#supported-providers), refer to the guide for that provider.
</Step>
<Step>
### Add the SMS channel to your workflow
Next, include an [SMS step in your workflow](/platform/workflow/build-a-workflow). This step defines when and how an SMS should be sent as part of your notification workflow.
</Step>
<Step>
### Define the SMS content
Within the SMS step editor, write the message body. The editor supports dynamic data for personalized content.
</Step>
<Step>
### Store subscriber phone number
Novu automatically sends the notification to the phone number stored on the subscriber's profile. You must ensure that this field is set for any subscriber who needs to receive SMS. You can store subscribers phone number using the Novu API, or SDK.
</Step>
<Step>
### Trigger the workflow
[Trigger the workflow](/api-reference/events/trigger-event) from your application code by sending an event to Novu.
Novu automatically:
- Resolves the subscriber.
- Selects the correct provider.
- Renders the SMS template.
- Delivers the message through the configured SMS integration.
</Step>
</Steps>
🤖 Prompt for AI Agents
In content/docs/platform/integrations/sms/index.mdx around lines 8 to 50,
multiple copy-paste references to "email" should be replaced with "SMS": change
"sending an email notification" to "sending an SMS notification", "Add an email
provider" to "Add an SMS provider", "Add the email channel" to "Add the SMS
channel", "Within the Email step editor" to "Within the SMS step editor",
"receive emails" to "receive SMS", "Renders the email template" to "Renders the
SMS template", and "through the configured email integration" to "through the
configured SMS integration" so all step text consistently refers to SMS rather
than email.

Comment on lines +54 to +73
## Configuring SMS providers

To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that email providers.

### Default sender settings

The **From** field, which is displayed as the sender of the SMS, is a required default setting for any email provider that you connect. You can override this field during trigger if necessary.

### Provider authentication

You must provide credentials specific to your email provider, such as:
- API key
- Auth token
- Account SID
- Username
- Password.

Each provider has different requirements.

<Callout type="info"> Refer to the [supported SMS providers](/platform/integrations/sms#supported-providers) list for detailed setup guides for each provider integration.</Callout>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix copy-paste errors in configuration section: "email" should be "SMS".

Additional instances of "email" incorrectly used in the configuration section:

  • Line 56: "specific to that email providers" → should be "SMS providers"
  • Line 60: "any email provider that you connect" → should be "SMS provider"
  • Line 64: "your email provider" → should be "SMS provider"

Apply this diff:

-To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that email providers.
+To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that SMS provider.

-The **From** field, which is displayed as the sender of the SMS, is a required default setting for any email provider that you connect.
+The **From** field, which is displayed as the sender of the SMS, is a required default setting for any SMS provider that you connect.

-You must provide credentials specific to your email provider, such as:
+You must provide credentials specific to your SMS provider, such as:
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Configuring SMS providers
To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that email providers.
### Default sender settings
The **From** field, which is displayed as the sender of the SMS, is a required default setting for any email provider that you connect. You can override this field during trigger if necessary.
### Provider authentication
You must provide credentials specific to your email provider, such as:
- API key
- Auth token
- Account SID
- Username
- Password.
Each provider has different requirements.
<Callout type="info"> Refer to the [supported SMS providers](/platform/integrations/sms#supported-providers) list for detailed setup guides for each provider integration.</Callout>
## Configuring SMS providers
To add an SMS provider from the **Integration Store**, you must configure settings and credentials that are specific to that SMS provider.
### Default sender settings
The **From** field, which is displayed as the sender of the SMS, is a required default setting for any SMS provider that you connect. You can override this field during trigger if necessary.
### Provider authentication
You must provide credentials specific to your SMS provider, such as:
- API key
- Auth token
- Account SID
- Username
- Password.
Each provider has different requirements.
<Callout type="info"> Refer to the [supported SMS providers](/platform/integrations/sms#supported-providers) list for detailed setup guides for each provider integration.</Callout>
🤖 Prompt for AI Agents
In content/docs/platform/integrations/sms/index.mdx around lines 54 to 73, there
are copy-paste errors using "email" instead of "SMS"; update the text to read:
"specific to that SMS provider" (line ~56), "any SMS provider that you connect"
(line ~60), and "your SMS provider" (line ~64), and adjust surrounding wording
for correct singular/plural agreement if needed.

Comment on lines +135 to +163
## Supported providers

Here are the SMS providers that are currently supported by Novu. Select any provider to see its detailed setup guide.

<Cards>
<Card title="46elks" href="/platform/integrations/sms/46elks"> Learn how to use the 46elks provider to send SMS notifications using Novu.</Card>
<Card title="Africa's Talking" href="/platform/integrations/sms/africas-talking"> Learn how to use the Africa's Talking provider to send SMS notifications using Novu.</Card>
<Card title="AWS SNS" href="/platform/integrations/sms/aws-sns"> Learn how to use the AWS SNS provider to send SMS notifications using Novu.</Card>
<Card title="Azure SMS" href="/platform/integrations/sms/azure-sms"> Learn how to use the Azure SMS provider to send SMS notifications using Novu.</Card>
<Card title="BulkSMS" href="/platform/integrations/sms/bulksms"> Learn how to use the BulkSMS provider to send SMS notifications using Novu.</Card>
<Card title="Clickatell" href="/platform/integrations/sms/clickatell"> Learn how to use the Clickatell provider to send SMS notifications using Novu.</Card>
<Card title="Clicksend" href="/platform/integrations/sms/clicksend"> Learn how to use the Clicksend provider to send SMS notifications using Novu.</Card>
<Card title="Firetext" href="/platform/integrations/sms/firetext"> Learn how to use the Firetext provider to send SMS notifications using Novu.</Card>
<Card title="Gupshup" href="/platform/integrations/sms/gupshup"> Learn how to use the Gupshup provider to send SMS notifications using Novu.</Card>
<Card title="Infobip - SMS" href="/platform/integrations/sms/infobip"> Learn how to use the Infobip - SMS provider to send SMS notifications using Novu.</Card>
<Card title="Kannel" href="/platform/integrations/sms/kannel"> Learn how to use the Kannel provider to send SMS notifications using Novu.</Card>
<Card title="Kudosity" href="/platform/integrations/sms/kudosity"> Learn how to use the Kudosity provider to send SMS notifications using Novu.</Card>
<Card title="MessageBird" href="/platform/integrations/sms/messagebird"> Learn how to use the MessageBird provider to send SMS notifications using Novu.</Card>
<Card title="Nexmo" href="/platform/integrations/sms/nexmo"> Learn how to use the Nexmo provider to send SMS notifications using Novu.</Card>
<Card title="Plivo" href="/platform/integrations/sms/plivo"> Learn how to use the Plivo provider to send SMS notifications using Novu.</Card>
<Card title="Sendchamp" href="/platform/integrations/sms/sendchamp"> Learn how to use the Sendchamp provider to send SMS notifications using Novu.</Card>
<Card title="SimpleTexting" href="/platform/integrations/sms/simpletexting"> Learn how to use the SimpleTexting provider to send SMS notifications using Novu.</Card>
<Card title="SMS Central" href="/platform/integrations/sms/sms-central"> Learn how to use the SMS Central provider to send SMS notifications using Novu.</Card>
<Card title="SMS77" href="/platform/integrations/sms/sms77"> Learn how to use the SMS77 provider to send SMS notifications using Novu.</Card>
<Card title="SNS" href="/platform/integrations/sms/sns"> Learn how to use the SNS provider to send SMS notifications using Novu.</Card>
<Card title="Telnyx" href="/platform/integrations/sms/telnyx"> Learn how to use the Telnyx provider to send SMS notifications using Novu.</Card>
<Card title="Termii" href="/platform/integrations/sms/termii"> Learn how to use the Termii provider to send SMS notifications using Novu.</Card>
<Card title="Twilio" href="/platform/integrations/sms/twilio"> Learn how to use the Twilio provider to send SMS notifications using Novu.</Card>
</Cards>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Supported providers gallery is comprehensive and well-organized.

The Cards component provides an excellent visual showcase of 25+ SMS providers with clear navigation. The consistent description format and href links create a usable provider directory.

Verify that all provider documentation pages linked in the href attributes (e.g., /platform/integrations/sms/46elks, /platform/integrations/sms/twilio) exist and are correctly named.


🏁 Script executed:

#!/bin/bash
# Description: Verify that all SMS provider documentation pages exist

# Extract all hrefs from the Supported providers section
provider_paths=$(grep -oP '(?<=href="/platform/integrations/sms/)[^"]+' content/docs/platform/integrations/sms/index.mdx)

# Check which provider pages exist
echo "Checking provider documentation pages..."
for provider in $provider_paths; do
  provider_file="content/docs/platform/integrations/sms/${provider}.mdx"
  if [ -f "$provider_file" ]; then
    echo "✓ Found: $provider"
  else
    echo "✗ Missing: $provider"
  fi
done

Length of output: 495


Looking at the verification results, I need to check if the provider documentation pages exist under a different directory structure or naming convention before finalizing the assessment.

Critical issue: All 23 SMS provider documentation pages are missing from the repository.

The Novu documentation includes all listed providers (46elks, Africa's Talking, AWS SNS, Azure SMS, BulkSMS, Clickatell, Clicksend, Firetext, Gupshup, Kannel, MessageBird, Nexmo, Plivo, Sendchamp, SimpleTexting, SMS Central, SMS77, SNS, Telnyx, Termii, Twilio, and others), however the corresponding .mdx source files do not exist in the content/docs/platform/integrations/sms/ directory. The index page contains href links to these provider pages, but the pages themselves need to be created or sourced from the main documentation repository.

Either:

  1. Create all missing provider documentation files, OR
  2. Remove the provider cards from index.mdx until the documentation pages are ready, OR
  3. Confirm these files are built/generated separately in the CI/CD pipeline

🏁 Script executed:

#!/bin/bash
# Search for any SMS provider documentation files in the codebase
# Check different possible locations and naming patterns

echo "Searching for provider documentation files..."
echo ""

# Check if provider pages exist in content/docs/platform/integrations/sms/ directory
echo "Files in content/docs/platform/integrations/sms/:"
if [ -d "content/docs/platform/integrations/sms/" ]; then
  find content/docs/platform/integrations/sms/ -type f -name "*.mdx" | sort
else
  echo "Directory not found"
fi

echo ""
echo "Searching for any files with provider names (case-insensitive):"
# Search for files containing provider names
for provider in "twilio" "nexmo" "aws-sns" "plivo"; do
  echo "Searching for '$provider'..."
  find content/docs -type f -name "*${provider}*" 2>/dev/null || echo "  (no matches)"
done

Length of output: 2078


Looking at the new results, the provider files exist in a (providers) subdirectory. I need to verify if the href links in index.mdx correctly match the actual provider filenames.


🏁 Script executed:

#!/bin/bash
# Extract all hrefs from index.mdx and compare with actual provider filenames

echo "Comparing index.mdx href links with actual provider files..."
echo ""

# Get hrefs from index.mdx
echo "href links from index.mdx:"
grep -oP '(?<=href="/platform/integrations/sms/)[^"]+' content/docs/platform/integrations/sms/index.mdx > /tmp/hrefs.txt
cat /tmp/hrefs.txt

echo ""
echo "Actual provider filenames (without .mdx extension):"
find content/docs/platform/integrations/sms/\(providers\)/ -type f -name "*.mdx" -exec basename {} .mdx \; | sort > /tmp/files.txt
cat /tmp/files.txt

echo ""
echo "Mismatches between href links and filenames:"
# Compare the two lists
comm -23 <(sort /tmp/hrefs.txt) <(sort /tmp/files.txt) | sed 's/^/  href link not found: /'
comm -13 <(sort /tmp/hrefs.txt) <(sort /tmp/files.txt) | sed 's/^/  file exists but not linked: /'

Length of output: 676


Fix 2 broken provider links in the Cards component.

Two href links in the index.mdx file do not match the actual provider documentation filenames:

  1. Line ~145 – Change href="/platform/integrations/sms/azure-sms" to href="/platform/integrations/sms/azure" (file is azure.mdx, not azure-sms.mdx)
  2. Line ~148 – Change href="/platform/integrations/sms/bulksms" to href="/platform/integrations/sms/bulk-sms" (file is bulk-sms.mdx, not bulksms.mdx)

All other 21 provider links match their corresponding .mdx files correctly.

🤖 Prompt for AI Agents
In content/docs/platform/integrations/sms/index.mdx around lines 135–163, two
Card hrefs point to incorrect filenames: update the Card with title "Azure SMS"
to use href="/platform/integrations/sms/azure" (file is azure.mdx) and update
the Card with title "BulkSMS" to use href="/platform/integrations/sms/bulk-sms"
(file is bulk-sms.mdx); change those two href attributes accordingly and leave
the other Card links unchanged.

* Content for the overview page

* Update content/docs/platform/integrations/overview.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/overview.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/overview.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/overview.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/overview.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/overview.mdx

Co-authored-by: DianaHackmamba <[email protected]>

---------

Co-authored-by: DianaHackmamba <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6e4c009 and cdd6172.

⛔ Files ignored due to path filters (2)
  • public/images/channels-and-providers/integrationidentifier.png is excluded by !**/*.png
  • public/images/channels-and-providers/primary-active-integrations.png is excluded by !**/*.png
📒 Files selected for processing (1)
  • content/docs/platform/integrations/overview.mdx (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Redirect rules - docs-novu
  • GitHub Check: Header rules - docs-novu
  • GitHub Check: Pages changed - docs-novu
  • GitHub Check: Build and Lint
🔇 Additional comments (5)
content/docs/platform/integrations/overview.mdx (5)

8-12: Well-written introductory narrative.

The opening section clearly establishes the value proposition and explains the provider abstraction layer. This sets a good foundation for the detailed sections that follow.


30-45: Clear and well-structured primary vs. active integrations explanation.

The section effectively differentiates between active and primary integrations, clearly outlines channel-specific behavior, and explains the auto-promotion fallback logic. The visual diagram reference adds helpful context.


47-51: Environment scoping explanation is clear and well-justified.

The section effectively explains why integrations are environment-scoped and the practical benefits (test isolation, per-environment configuration). Good cross-reference to the environments concept page.


53-60: Override settings section is concise and well-exemplified.

The examples provide concrete use cases (SendGrid headers, Slack blocks, FCM sounds) that help readers understand when and why overrides are needed. Good callout to detailed documentation.


62-82: Integration guides cards are well-organized and consistent.

The channel-specific cards provide a clear, scannable entry point for users. Descriptions are appropriately concise and action-oriented. The structure aligns well with the provider-centric restructuring.

Please verify that all linked resources exist and have been updated to reflect the provider-centric approach:

  • /platform/integrations/email
  • /platform/integrations/sms (mentioned as restructured in the PR cross-file context)
  • /platform/integrations/push
  • /platform/integrations/chat
  • /platform/inbox/overview

pageTitle: 'Novu Integration Hub'
title: 'Overview'
description: 'Discover how to integrate Novu with your tech stack including delivery providers, content frameworks, and validation libraries.'
description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chant channels, and how to integrate them to send notifications and receive events.'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix typo in meta description.

"Chant" should be "Chat".

-description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chant channels, and how to integrate them to send notifications and receive events.'
+description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chat channels, and how to integrate them to send notifications and receive events.'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chant channels, and how to integrate them to send notifications and receive events.'
description: 'Learn about the providers that Novu supports for Email, Push, SMS and Chat channels, and how to integrate them to send notifications and receive events.'
🤖 Prompt for AI Agents
In content/docs/platform/integrations/overview.mdx around line 4, the meta
description contains a typo: the word "Chant" should be "Chat"; update the
description string to replace "Chant" with "Chat" so it reads "...for Email,
Push, SMS and Chat channels..." and save the file.


- **Integration**: An integration is your specific, configured instance of that provider. It's the provider plus your unique credentials and settings. When creating an integration, you are required to assign it a name and identifier.

While the name can be changged, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix typo: "changged" → "changed".

-  While the name can be changged, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`.
+  While the name can be changed, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
While the name can be changged, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`.
While the name can be changed, the identifier cannot be changed after creation. This identifier is called the `integrationIdentifier`.
🤖 Prompt for AI Agents
In content/docs/platform/integrations/overview.mdx around line 22, fix the typo
"changged" to "changed" in the sentence so it reads: "While the name can be
changed, the identifier cannot be changed after creation. This identifier is
called the `integrationIdentifier`." Replace the misspelled word only,
preserving the rest of the sentence and formatting.


![integrationIdentifier](/images/channels-and-providers/integrationidentifier.png)

This means that you can have provider but two separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Clarify sentence grammar.

The sentence is incomplete. Consider: "you can have one provider but multiple separate integrations for that particular provider" or "you can have the same provider but two separate integrations."

-This means that you can have provider but two separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently.
+This means that you can have one provider but multiple separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
This means that you can have provider but two separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently.
This means that you can have one provider but multiple separate integrations for that particular provider. Each of these is a unique integration that you can manage and trigger independently.
🤖 Prompt for AI Agents
In content/docs/platform/integrations/overview.mdx around line 26, the sentence
"This means that you can have provider but two separate integrations for that
particular provider." is grammatically incorrect and incomplete; update it to a
clear form such as "This means that you can have one provider but multiple
separate integrations for that particular provider." or "This means that you can
have the same provider but two separate integrations for that provider." Replace
the existing sentence with one of these corrected alternatives to fix grammar
and clarity.

* Minor update to the Trigger overrides page

* Update content/docs/platform/integrations/trigger-overrides.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/trigger-overrides.mdx

Co-authored-by: DianaHackmamba <[email protected]>

---------

Co-authored-by: DianaHackmamba <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between cdd6172 and 9fdf817.

📒 Files selected for processing (1)
  • content/docs/platform/integrations/trigger-overrides.mdx (4 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Redirect rules - docs-novu
  • GitHub Check: Header rules - docs-novu
  • GitHub Check: Pages changed - docs-novu
  • GitHub Check: Build and Lint
🔇 Additional comments (6)
content/docs/platform/integrations/trigger-overrides.mdx (6)

7-8: LGTM – imports appropriate for documentation components.

The lucide-react icons and fumadocs card components are well-suited for structured documentation layouts.


13-30: LGTM – new Channel overrides section is well-placed and clearly scoped.

Clear introduction with a callout that limits scope to Email and SMS, and the card links provide good navigation to channel-specific documentation.


48-52: LGTM – reorganized provider override structure improves clarity.

Renaming "Override structure" to "Provider override scopes" and explicitly distinguishing workflow-level vs. step-level overrides makes the documentation more approachable and the precedence hierarchy clearer.


62-101: LGTM – workflow-level override example is clear and practical.

The SendGrid example demonstrates template_id and trackingSettings usage well, and the note at line 103 correctly explains the scope and precedence rules.


131-183: LGTM – step-level override example is comprehensive and well-documented.

The FCM example effectively demonstrates platform-specific overrides (Android and iOS) with sound and notification settings, and the walkthrough of use cases is practical and clear.


185-187: LGTM – concluding guidance is accurate and helpful.

The callout correctly identifies the step identifier target, and the final sentence accurately summarizes what the example demonstrates without ambiguity.

Comment on lines +105 to +121
#### Sending extra fields supported by provider SDK

You can also send extra fields supported by the provider SDK. For example, if you want to send a headers to the provider SDK, then you could use the `_passthrough` field.

```json
"overrides": {
"providers" : {
"sendgrid": {
"_passthrough": {
"headers": {
"Authorization": "Bearer my-api-key"
}
}
},
},
},
```
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix grammatical error in introductory sentence.

Line 107 has a grammatical issue: "if you want to send a headers" should be "if you want to send headers" (remove the article "a" since "headers" is plural).

The _passthrough JSON example itself is clear and well-structured.

-You can also send extra fields supported by the provider SDK. For example, if you want to send a headers to the provider SDK, then you could use the `_passthrough` field.
+You can also send extra fields supported by the provider SDK. For example, if you want to send headers to the provider SDK, you could use the `_passthrough` field.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
#### Sending extra fields supported by provider SDK
You can also send extra fields supported by the provider SDK. For example, if you want to send a headers to the provider SDK, then you could use the `_passthrough` field.
```json
"overrides": {
"providers" : {
"sendgrid": {
"_passthrough": {
"headers": {
"Authorization": "Bearer my-api-key"
}
}
},
},
},
```
#### Sending extra fields supported by provider SDK
You can also send extra fields supported by the provider SDK. For example, if you want to send headers to the provider SDK, you could use the `_passthrough` field.
🤖 Prompt for AI Agents
In content/docs/platform/integrations/trigger-overrides.mdx around lines 105 to
121, the introductory sentence contains a grammatical error: change "if you want
to send a headers" to "if you want to send headers" (remove the extraneous
article "a") so the sentence reads correctly while leaving the JSON _passthrough
example unchanged.

* Docs for Email home page

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update based on feedback

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Add link

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update contet

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/email/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content

* Fix email channel capitaliation inconsistencies

---------

Co-authored-by: DianaHackmamba <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
content/docs/platform/integrations/email/index.mdx (1)

238-238: Clarify where users can find the integrationIdentifier.

Line 238 shows integrationIdentifier: "brevo-abcdef" as an example. The surrounding text (line 218) states users can "find the integrationIdentifier for each provider in provider page in the Integration Store". This is helpful context, though the phrasing could be slightly clearer (consider "on the provider's configuration page").

Consider minor refinement to line 218:

-You can find the `integrationIdentifier` for each provider in provider page in the **Integration Store**.
+You can find the `integrationIdentifier` for each provider on its configuration page in the **Integration Store**.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9fdf817 and 6e2d78d.

📒 Files selected for processing (2)
  • content/docs/platform/integrations/email/index.mdx (4 hunks)
  • content/docs/platform/integrations/email/meta.json (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Redirect rules - docs-novu
  • GitHub Check: Header rules - docs-novu
  • GitHub Check: Build and Lint
  • GitHub Check: Pages changed - docs-novu
🔇 Additional comments (5)
content/docs/platform/integrations/email/meta.json (1)

3-3: Verify that the "(providers)" reference resolves correctly.

The pages array now includes a (providers) entry which appears to be a special reference. Confirm this is a valid pattern in your documentation system (e.g., dynamic folder reference or component placeholder) and that it points to existing provider documentation structure.

content/docs/platform/integrations/email/index.mdx (4)

30-30: Verify that internal anchor links to "#supported-providers" are correct.

Lines 30 and 78 both reference /platform/integrations/email#supported-providers, which anchors to the "Supported providers" section starting at line 246. Confirm this anchor ID is properly generated by your documentation system for the section heading.

Also applies to: 78-78


251-269: Verify that all provider setup guide links exist.

The Supported providers section references individual provider setup guides (e.g., /platform/integrations/email/sendgrid, /platform/integrations/email/amazon-ses, etc.). Confirm that all 19 referenced provider documentation pages exist and are accessible.


23-57: Steps component structure looks correct.

The Steps/Step component nesting and usage for the "How email works in Novu" flow is properly structured with clear step headings and descriptions.


99-167: Code examples are well-structured with appropriate language tabs.

The Tabs/Tab component usage across the attachments, email overrides, and provider targeting sections is consistent and clear. Code examples use proper // [!code ++:N] highlighting syntax to emphasize payload changes.

Also applies to: 180-210, 220-244

<Step>
### Store subscriber email addresses

Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is update either using the Novu dashboard or API.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix grammatical error in subscriber profile sentence.

Line 46 contains "is update" which should be "is updated".

-Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is update either using the Novu dashboard or API.
+Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is updated either using the Novu dashboard or API.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is update either using the Novu dashboard or API.
Novu automatically sends the notification to the email address stored on the subscriber's profile. This profile is updated either using the Novu dashboard or API.
🤖 Prompt for AI Agents
In content/docs/platform/integrations/email/index.mdx around line 46, the
sentence contains a grammatical mistake "is update"; change it to "is updated"
so the line reads "This profile is updated either using the Novu dashboard or
API." Ensure only the verb is corrected and punctuation/spelling of the rest of
the sentence remains unchanged.

* Content for Push provider integration page

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content

* Addressed Diana's suggestions

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* make key features sentence case

---------

Co-authored-by: DianaHackmamba <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6e2d78d and 698d067.

⛔ Files ignored due to path filters (1)
  • public/images/channels-and-providers/push/integration-identifier.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • content/docs/platform/integrations/push/adding-push.mdx (0 hunks)
  • content/docs/platform/integrations/push/index.mdx (2 hunks)
💤 Files with no reviewable changes (1)
  • content/docs/platform/integrations/push/adding-push.mdx
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-09T13:28:47.834Z
Learnt from: jackall3n
Repo: novuhq/docs PR: 929
File: content/docs/platform/sdks/react-native/hooks/novu-provider.mdx:48-53
Timestamp: 2025-08-09T13:28:47.834Z
Learning: In the novu/react-native and novu/react packages, the NovuProvider component uses the prop name `subscriber` (not `subscriberId`) to pass the subscriber identifier. This is consistent across all documentation examples and the actual implementation.

Applied to files:

  • content/docs/platform/integrations/push/index.mdx
🪛 LanguageTool
content/docs/platform/integrations/push/index.mdx

[grammar] ~72-~72: Use a hyphen to join words.
Context: ...lly. #### Add device tokens during just in time You can pass the device tokens ...

(QB_NEW_EN_HYPHEN)


[grammar] ~72-~72: Use a hyphen to join words.
Context: .... #### Add device tokens during just in time You can pass the device tokens in ...

(QB_NEW_EN_HYPHEN)


[style] ~107-~107: This phrase is redundant. Consider using “outside”.
Context: ...ful when you manage device registration outside of your workflow triggers, for example, af...

(OUTSIDE_OF)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Redirect rules - docs-novu
  • GitHub Check: Header rules - docs-novu
  • GitHub Check: Pages changed - docs-novu
  • GitHub Check: Build and Lint
🔇 Additional comments (4)
content/docs/platform/integrations/push/index.mdx (4)

109-148: Code examples look good.

Both the Node.js and cURL implementations are consistent, correctly structured, and demonstrate proper API usage. The examples clearly show how to update device tokens for a subscriber.


150-200: Multi-integration guidance is clear and well-exemplified.

The section effectively explains how to target specific integrations using integrationIdentifier and both code examples are syntactically correct and consistent with the simpler examples above.


202-268: Token removal documentation is comprehensive and secure.

Both the specific token removal and remove-all flows are well-explained with accurate code examples. The Callout about server-side handling is an important security note. The fetch-filter-update pattern is a good practice for safe token management.


270-296: Provider cards section is well-structured and comprehensive.

The Cards component provides a good visual index of all supported push providers. Each card follows a consistent structure with a clear, action-oriented description and a link to provider-specific documentation. The link patterns are consistent with the documentation structure.

Comment on lines +72 to +73
#### Add device tokens during just in time

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix hyphenation in section header.

"Just-in-time" should be hyphenated as it is a compound adjective.

-#### Add device tokens during just in time
+#### Add device tokens during just-in-time
🧰 Tools
🪛 LanguageTool

[grammar] ~72-~72: Use a hyphen to join words.
Context: ...lly. #### Add device tokens during just in time You can pass the device tokens ...

(QB_NEW_EN_HYPHEN)


[grammar] ~72-~72: Use a hyphen to join words.
Context: .... #### Add device tokens during just in time You can pass the device tokens in ...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
content/docs/platform/integrations/push/index.mdx around lines 72 to 73: the
section header "Add device tokens during just in time" uses "just in time"
without hyphens; change it to the compound adjective form by updating the header
to "Add device tokens during just-in-time" so the phrase is correctly
hyphenated.

Comment on lines +107 to +108
This method is useful when you manage device registration outside of your workflow triggers, for example, after a user logs in.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Remove redundant preposition.

"Outside of" is redundant; use "outside" instead.

-This method is useful when you manage device registration outside of your workflow triggers, for example, after a user logs in.
+This method is useful when you manage device registration outside your workflow triggers, for example, after a user logs in.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
This method is useful when you manage device registration outside of your workflow triggers, for example, after a user logs in.
This method is useful when you manage device registration outside your workflow triggers, for example, after a user logs in.
🧰 Tools
🪛 LanguageTool

[style] ~107-~107: This phrase is redundant. Consider using “outside”.
Context: ...ful when you manage device registration outside of your workflow triggers, for example, af...

(OUTSIDE_OF)

🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/index.mdx around lines 107 to 108,
the phrase "outside of your workflow triggers" uses a redundant preposition;
change it to "outside your workflow triggers" so the sentence reads: "This
method is useful when you manage device registration outside your workflow
triggers, for example, after a user logs in."

Aviatorscode2 and others added 4 commits November 25, 2025 09:51
* Update content for demo integration

* Update content/docs/platform/integrations/demo-integration.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/demo-integration.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/demo-integration.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/demo-integration.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update based on feedback

* Update content/docs/platform/integrations/demo-integration.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/demo-integration.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/demo-integration.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/demo-integration.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Fixed content for demo integration based on feedback

---------

Co-authored-by: DianaHackmamba <[email protected]>
* fix: change dotnet sdk from community to official

* Update content for Chat provider integration

* Update content/docs/platform/integrations/chat/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/chat/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/chat/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/chat/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/chat/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/chat/index.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content based on Diana's feedback

---------

Co-authored-by: Pawan Jain <[email protected]>
Co-authored-by: DianaHackmamba <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
content/docs/platform/integrations/chat/index.mdx (1)

99-134: Use the same provider in both code examples for consistency.

The Node.js example (line 111) uses Discord as the provider, while the cURL example (line 128) uses slack. This inconsistency may confuse developers who expect both examples to demonstrate the same integration pattern. Additionally, the payload structure and field names should be identical across both examples.

Update the cURL example to use Discord (to match the Node.js example):

-  "providerId": "slack",
+  "providerId": "discord",
   "credentials": {
       "webhookUrl": "<WEBHOOK_URL>"
   },
-  "integrationIdentifier": "slack-MnGLxp8uy"
+  "integrationIdentifier": "discord-MnGLxp8uy"

Alternatively, update both examples to use the same provider consistently.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ba40cea and b18671f.

📒 Files selected for processing (1)
  • content/docs/platform/integrations/chat/index.mdx (2 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-09T13:28:47.834Z
Learnt from: jackall3n
Repo: novuhq/docs PR: 929
File: content/docs/platform/sdks/react-native/hooks/novu-provider.mdx:48-53
Timestamp: 2025-08-09T13:28:47.834Z
Learning: In the novu/react-native and novu/react packages, the NovuProvider component uses the prop name `subscriber` (not `subscriberId`) to pass the subscriber identifier. This is consistent across all documentation examples and the actual implementation.

Applied to files:

  • content/docs/platform/integrations/chat/index.mdx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Redirect rules - docs-novu
  • GitHub Check: Header rules - docs-novu
  • GitHub Check: Pages changed - docs-novu
  • GitHub Check: Build and Lint

Comment on lines +79 to +81
You may need to provide credentials specific to your chat provider, such as an API key, Client ID, or Client Secret. However, some providers, like Discord, may not require any global credentials to be set in the Integration Store.

Each provider has different requirements.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cat -n content/docs/platform/integrations/chat/index.mdx | head -150

Repository: novuhq/docs

Length of output: 6478


🏁 Script executed:

find . -name "*discord*" -type f | grep -E "\.(mdx|md)$"

Repository: novuhq/docs

Length of output: 120


🏁 Script executed:

cat -n ./content/docs/platform/integrations/chat/\(providers\)/discord.mdx | head -100

Repository: novuhq/docs

Length of output: 3448


Fix inconsistent provider in cURL example and typo on line 95.

The cURL code example (lines 128–132) uses the slack provider while the Node.js example uses Discord, creating confusion about which provider to follow. Update the cURL example to use discord for consistency. Additionally, line 95 has a typo: "Checkout" should be "Check out".

🤖 Prompt for AI Agents
content/docs/platform/integrations/chat/index.mdx lines ~95 and 128–132: fix the
typo on line 95 by changing "Checkout" to "Check out", and update the cURL
example (lines 128–132) to use the discord provider instead of slack — also
adjust any provider-specific fields/headers in that cURL snippet so they match
the Discord example used in the Node.js sample (token/header names, endpoint,
and payload keys) to keep both examples consistent.


Use the `subscribers.credentials.update` method to store the `webhookUrl` for a specific subscriber and provider.

Checkout the [API reference](/api-reference/subscribers/update-provider-credentials) for more details.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Minor: Fix phrasal verb.

"Checkout" should be "Check out" (two words) when used as a phrasal verb.

-Checkout the [API reference](/api-reference/subscribers/update-provider-credentials) for more details.
+Check out the [API reference](/api-reference/subscribers/update-provider-credentials) for more details.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Checkout the [API reference](/api-reference/subscribers/update-provider-credentials) for more details.
Check out the [API reference](/api-reference/subscribers/update-provider-credentials) for more details.
🤖 Prompt for AI Agents
In content/docs/platform/integrations/chat/index.mdx around line 95, the text
uses the single-word "Checkout" incorrectly; change it to the phrasal verb
"Check out" so the sentence reads "Check out the [API
reference](/api-reference/subscribers/update-provider-credentials) for more
details." Keep punctuation and link unchanged.

* Update content for APNS push guide

* Update content for OneSignal guide

* Update content for Push webhook guide

* Update Apns docs based on feedback

* Update the links on the page

* Update the docs

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update push webhook guide

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* update push webhook content

* Remove "how to" in heading

* Update content/docs/platform/integrations/push/(providers)/onesignal.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/onesignal.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/onesignal.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/onesignal.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/onesignal.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/onesignal.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/onesignal.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content for onesignal

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update APNS content

* Update content based on Diana feedback

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* implement changes based on feedback

* Update content/docs/platform/integrations/push/(providers)/push-webhook.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/onesignal.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/apns.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Add sdk link

* Update content for Pusher beams provider guide (#991)

* Update content for Pusher beams provider guide

* Update pusher beams docs

* Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update base on feedback

* Update content/docs/platform/integrations/push/(providers)/pusher-beams.mdx

Co-authored-by: DianaHackmamba <[email protected]>

---------

Co-authored-by: DianaHackmamba <[email protected]>

* Update docs for the FCM guide (#986)

* Update docs for the FCM guide

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Add content for Expo push guide

* Update links

* Add image

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Add link to create workflow

* Fix typo

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fix type error

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Diana's feedback

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/expo-push.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/fcm.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update base on Diana's feedback

* Update FCM and expo push guide with info on invalid token auto removal

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: DianaHackmamba <[email protected]>

* Update content on Pushpad guide (#992)

* Update content on Pushpad guide

* Update docs for pushpad

* Update docs

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update based on feedback

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update pushpad content

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

* Update content/docs/platform/integrations/push/(providers)/pushpad.mdx

Co-authored-by: DianaHackmamba <[email protected]>

---------

Co-authored-by: DianaHackmamba <[email protected]>
Co-authored-by: Pawan Jain <[email protected]>

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: DianaHackmamba <[email protected]>
Co-authored-by: Pawan Jain <[email protected]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
content/docs/platform/integrations/push/(providers)/pushpad.mdx (1)

85-94: Fix JSON syntax error in cURL example.

Line 91 has invalid JSON syntax: ['user123'] uses single quotes, but JSON requires double quotes. Additionally, the cURL payload structure differs from the Node.js example above it.

The cURL body should match the structure and formatting of the Node.js example. Apply this correction:

  curl -L -X PUT 'https://api.novu.co/v1/subscribers/<SUBSCRIBER_ID>/credentials' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: ApiKey <NOVU_SECRET_KEY>' \
  -d '{
    "providerId": "pushpad",
-   "deviceTokens": ['user123'],
+   "deviceTokens": ["user123"],
    "integrationIdentifier": "pushpad-MnGLxp8uy"
  }'
content/docs/platform/integrations/push/(providers)/push-webhook.mdx (2)

173-202: Verify comment accuracy in authentication example.

Line 182 contains a comment referencing "step 3", but reviewing the documentation structure, there is no Step 3 in the earlier "Configure Push Webhook with Novu" section (only Steps 1–2). The secret key is mentioned in Step 1 (line 14–22). Update the comment to reference the correct step.

 // secret key added in step 3
+// secret key added in Step 1

47-85: Fix Tab component attribute naming.

The cURL tab uses title="cURL" (line 72) while the Node.js tab uses value="Node.js" (line 57). Throughout the codebase, all Tab components consistently use the value attribute. Change title to value for consistency.

content/docs/platform/integrations/push/(providers)/fcm.mdx (1)

332-332: Replace incomplete self-hosted placeholder URL with valid API endpoint pattern.

The cURL example uses an incomplete placeholder URL https://url.to.our.selfhosted.novu that lacks the required API path. For cloud instances, use the correct trigger endpoint; for self-hosted instances, use the same path with your domain.

-curl --location --request POST 'https://url.to.our.selfhosted.novu' \
+curl --location --request POST 'https://api.novu.co/v1/events/trigger' \

For self-hosted deployments, replace the domain with your instance URL: https://<your-self-hosted-domain>/v1/events/trigger

🧹 Nitpick comments (5)
content/docs/platform/integrations/push/(providers)/onesignal.mdx (2)

64-64: Clarify placeholder value for integrationIdentifier.

The examples use "string" as a placeholder for integrationIdentifier. This should be replaced with clearer guidance (e.g., a comment or note) explaining where to obtain this value—typically a user-defined integration name or ID from the Novu dashboard integration settings.

Consider updating the examples to include a comment or note like:

-    integrationIdentifier: "string",
+    integrationIdentifier: "your-onesignal-integration-key", // or ID from Novu dashboard

Alternatively, add a note before the code block explaining that users should replace "string" with their actual integration identifier from the Novu Integration Store.

Also applies to: 86-86


153-161: Remove redundant explanation of External User ID behavior.

Lines 155 and 157 both introduce the same concept: "By default, Novu uses player_id" and "By default, Novu uses player IDs." This creates unnecessary repetition. Consolidate into a single, clear explanation.

Apply this diff to eliminate redundancy:

-By default, Novu uses `player_id` to send notifications, but you can select the `External ID` option in the OneSignal integration settings in Novu. If `External ID` option is selected, then `deviceTokens` stored in subscriber credentials for the OneSignal provider, are used as external user IDs.
-
-By default, Novu uses player IDs to send notifications. If your OneSignal integration uses external user IDs, then you can switch this behavior in the OneSignal integration settings in Novu.
+By default, Novu uses player IDs to send notifications. However, if your OneSignal integration uses external user IDs, you can switch this behavior in the OneSignal integration settings in Novu.
content/docs/platform/integrations/push/(providers)/pusher-beams.mdx (2)

65-65: Clarify integrationIdentifier placeholder across code examples.

The integration identifier is hardcoded as "pusher-beams-MnGLxp8uy" in the Node.js example (line 65) and cURL example (line 83). To improve clarity for users, consider using a more explicit placeholder format (e.g., <INTEGRATION_IDENTIFIER>) so it's immediately obvious that this value must be replaced with their actual integration identifier from the Novu dashboard.

Apply this diff to clarify the placeholder:

-    integrationIdentifier: "pusher-beams-MnGLxp8uy",
+    integrationIdentifier: "<INTEGRATION_IDENTIFIER>",
-  "integrationIdentifier": "pusher-beams-MnGLxp8uy"
+  "integrationIdentifier": "<INTEGRATION_IDENTIFIER>"

Also applies to: 83-83


82-82: Improve clarity of device token placeholder in cURL example.

The device token placeholder 'userId-from-pusher-beams' is a string literal, which is correct, but wrapping it in descriptive angle brackets (e.g., <PUSHER_USER_ID>) would make it more consistent with other placeholders in the examples and clearer that it must be replaced with an actual value.

Apply this diff to improve clarity:

-  "deviceTokens": ['userId-from-pusher-beams'],
+  "deviceTokens": ["<PUSHER_USER_ID>"],
content/docs/platform/integrations/push/(providers)/apns.mdx (1)

69-69: Remove Markdown link syntax from code example comment.

The commented serverURL contains Markdown link syntax [https://eu.api.novu.co](...) which is confusing in a code block. Simplify to plain URL text.

-  // serverURL: "[https://eu.api.novu.co](https://eu.api.novu.co)",
+  // serverURL: "https://eu.api.novu.co",
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b18671f and 9e90454.

⛔ Files ignored due to path filters (22)
  • public/images/channels-and-providers/push/apns/apns-integration.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/confirmation-menu.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/expo-push/copy-token.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/expo-push/create-token.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/expo-push/expo-integration.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/expo-push/generate-token.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/fcm-integration.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/firebase-project-settings.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/firebase-service-accounts.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/integrationidentifier.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/onesignal/onesignal-integration.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/onesignal/select-external-id-option.gif is excluded by !**/*.gif
  • public/images/channels-and-providers/push/push-webhook/push-webhook-integration.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/pusher-beams/create-instance.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/pusher-beams/instance-credentials.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/pusher-beams/pusher-beams-integration.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/pushpad/access-token.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/pushpad/add-token.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/pushpad/new-project.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/pushpad/project-id.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/pushpad/pushpad-integration.png is excluded by !**/*.png
  • public/images/channels-and-providers/push/select-firebase-project.png is excluded by !**/*.png
📒 Files selected for processing (8)
  • content/docs/platform/integrations/push/(providers)/apns.mdx (2 hunks)
  • content/docs/platform/integrations/push/(providers)/expo-push.mdx (3 hunks)
  • content/docs/platform/integrations/push/(providers)/fcm.mdx (3 hunks)
  • content/docs/platform/integrations/push/(providers)/onesignal.mdx (4 hunks)
  • content/docs/platform/integrations/push/(providers)/push-webhook.mdx (4 hunks)
  • content/docs/platform/integrations/push/(providers)/pusher-beams.mdx (3 hunks)
  • content/docs/platform/integrations/push/(providers)/pushpad.mdx (3 hunks)
  • content/docs/platform/meta.json (1 hunks)
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2025-08-09T13:28:47.834Z
Learnt from: jackall3n
Repo: novuhq/docs PR: 929
File: content/docs/platform/sdks/react-native/hooks/novu-provider.mdx:48-53
Timestamp: 2025-08-09T13:28:47.834Z
Learning: In the novu/react-native and novu/react packages, the NovuProvider component uses the prop name `subscriber` (not `subscriberId`) to pass the subscriber identifier. This is consistent across all documentation examples and the actual implementation.

Applied to files:

  • content/docs/platform/integrations/push/(providers)/onesignal.mdx
  • content/docs/platform/integrations/push/(providers)/pusher-beams.mdx
  • content/docs/platform/integrations/push/(providers)/apns.mdx
  • content/docs/platform/integrations/push/(providers)/expo-push.mdx
  • content/docs/platform/integrations/push/(providers)/pushpad.mdx
  • content/docs/platform/integrations/push/(providers)/push-webhook.mdx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Redirect rules - docs-novu
  • GitHub Check: Header rules - docs-novu
  • GitHub Check: Pages changed - docs-novu
  • GitHub Check: Build and Lint
🔇 Additional comments (9)
content/docs/platform/meta.json (1)

26-26: Navigation label updated to reflect provider-centric restructuring.

The header label change from "---Channels---" to "---Integrate Channels Providers---" appropriately emphasizes the provider-focused documentation organization introduced in this PR.

content/docs/platform/integrations/push/(providers)/onesignal.mdx (1)

99-100: Verify SDK import consistency.

Line 100 imports from @novu/node, while line 51 imports from @novu/api for the same trigger operation. Confirm this is intentional (e.g., different SDK versions) or if both examples should use the same import.

Are both @novu/api and @novu/node valid for the trigger operation, or should these examples be aligned to use the same package?

content/docs/platform/integrations/push/(providers)/pusher-beams.mdx (2)

1-114: Overall structure and quality look good.

The documentation has been well-restructured from a generic overview to a concrete, stepwise integration guide. The progression is logical: configuration credentials → Novu integration setup → subscriber setup → sending notifications. Code examples are provided in multiple languages (Node.js SDK, cURL, TypeScript), which improves accessibility for different use cases. External links are secured with proper attributes, and references to Pusher and Novu resources are well-placed.


41-114: Internal documentation link is valid.

Line 92 references /platform/workflow/build-a-workflow which correctly maps to an existing documentation file in the repository. No action needed.

content/docs/platform/integrations/push/(providers)/pushpad.mdx (1)

72-72: No changes needed—the Node.js and cURL examples are correctly formatted for their respective APIs.

The Node.js example correctly uses ChatOrPushProviderEnum.PushPad from the @novu/api SDK, while the cURL example correctly uses the lowercase string "pushpad" for the REST API. This is the consistent pattern across all Novu provider documentation. The two formats serve different purposes and are both valid.

content/docs/platform/integrations/push/(providers)/push-webhook.mdx (2)

61-61: Verify enum value consistency with string equivalent.

Line 61 uses ChatOrPushProviderEnum.PushWebhook, while line 79 in the cURL example uses the string "push-webhook". Confirm that ChatOrPushProviderEnum.PushWebhook resolves to "push-webhook" to ensure consistency across examples.


59-69: The SDK method signature is correct.

The novu.subscribers.credentials.update() method accepts two parameters: the credentials object and the subscriber ID. The second positional parameter "subscriberId" is the correct pattern used consistently across all Novu SDK documentation examples (Discord, Pusher Beams, FCM, and other providers). The literal string "subscriberId" should be replaced with an actual subscriber identifier value at implementation time.

Likely an incorrect or invalid review comment.

content/docs/platform/integrations/push/(providers)/expo-push.mdx (1)

38-150: Well-structured provider guide with clear workflows.

The Expo Push documentation follows the new provider-centric, step-based format effectively. The progression from credential setup through device token registration to sending notifications is clear and logical. The overrides section provides a comprehensive example with all supported Expo Message Request fields.

content/docs/platform/integrations/push/(providers)/fcm.mdx (1)

73-81: Align providerId usage with other examples in the file.

Line 73 uses the enum ChatOrPushProviderEnum.Fcm, but lines 92 and 144 use the string "fcm". Ensure consistent usage throughout the documentation. Either always use the enum (preferred for type safety) or always use strings.

Clarify whether the Novu SDK enforces enum or accepts string values for providerId. If both are accepted, add a comment explaining the equivalence.

Comment on lines +142 to +156
overrides: {
apns: {
payload: {
aps: {
notification: {
title: 'Test',
body: 'Test push',
},
data: {
key: 'value',
},
},
},
},
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

# First, find the APNS documentation file
find . -type f -name "apns.mdx" 2>/dev/null

Repository: novuhq/docs

Length of output: 117


🏁 Script executed:

# Find other provider documentation files
find . -type f -path "*/platform/integrations/push/*" -name "*.mdx" 2>/dev/null | head -20

Repository: novuhq/docs

Length of output: 644


🏁 Script executed:

# Read the APNS file around lines 142-156
wc -l "./content/docs/platform/integrations/push/(providers)/apns.mdx"

Repository: novuhq/docs

Length of output: 121


🏁 Script executed:

# Read APNS file with line numbers around the specified range
sed -n '130,165p' "./content/docs/platform/integrations/push/(providers)/apns.mdx"

Repository: novuhq/docs

Length of output: 603


🏁 Script executed:

# Search for override examples in Expo Push documentation
grep -n -A 20 "overrides" "./content/docs/platform/integrations/push/(providers)/expo-push.mdx" | head -50

Repository: novuhq/docs

Length of output: 1309


🏁 Script executed:

# Search for override examples in FCM documentation
grep -n -A 20 "overrides" "./content/docs/platform/integrations/push/(providers)/fcm.mdx" | head -50

Repository: novuhq/docs

Length of output: 2415


🏁 Script executed:

# Search for override patterns in all provider files
for file in ./content/docs/platform/integrations/push/\(providers\)/*.mdx; do
  echo "=== $(basename "$file") ==="
  grep -n "overrides:" "$file" | head -5
  grep -A 15 "overrides:" "$file" | head -20
  echo ""
done

Repository: novuhq/docs

Length of output: 1787


🏁 Script executed:

# Check if there's a trigger-overrides documentation that explains the pattern
find . -type f -name "*trigger*override*" -o -name "*override*trigger*" 2>/dev/null

Repository: novuhq/docs

Length of output: 113


🏁 Script executed:

# Read the trigger-overrides documentation
cat "./content/docs/platform/integrations/trigger-overrides.mdx"

Repository: novuhq/docs

Length of output: 6770


🏁 Script executed:

# Check FCM more carefully - find all override examples
sed -n '188,250p' "./content/docs/platform/integrations/push/(providers)/fcm.mdx"

Repository: novuhq/docs

Length of output: 1531


🏁 Script executed:

# Check the second FCM override example
sed -n '230,290p' "./content/docs/platform/integrations/push/(providers)/fcm.mdx"

Repository: novuhq/docs

Length of output: 1555


Fix APNS overrides structure to follow the documented provider override pattern.

APNS overrides do not follow the canonical pattern documented in trigger-overrides.mdx. Per the documentation, provider overrides should wrap the provider configuration under a providers object.

Current structure (incorrect):

overrides: {
  apns: {
    payload: { ... }
  }
}

Correct structure:

overrides: {
  providers: {
    apns: {
      payload: { ... }
    }
  }
}

Apply this diff:

  overrides: {
-   apns: {
+   providers: {
+     apns: {
        payload: {
          aps: {
            notification: {
              title: 'Test',
              body: 'Test push',
            },
            data: {
              key: 'value',
            },
          },
        },
+     }
-   },
+   }
  },
🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/apns.mdx around lines 142
to 156, the overrides block places the apns config directly under overrides
which is incorrect; update the structure to nest the apns configuration under a
providers object so overrides: { providers: { apns: { payload: { ... } } } }
rather than overrides: { apns: { ... } } ensuring the content keys are moved
exactly under providers to match the documented provider override pattern.

Comment on lines +189 to +210
fcm: {
// For a data-only notification (silent push)
type: 'data',
data: {
custom_key: 'custom_value',
},
// Platform-specific overrides
android: {
// See FCM AndroidConfig options
},
apns: {
// See FCM ApnsConfig options
},
webPush: {
// See FCM WebpushConfig options
},
fcmOptions: {
// See FCM FcmOptions
}
},
},
"subscriberId"
);
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Fix overrides structure to match documentation pattern.

The overrides example at lines 189–210 uses overrides: { fcm: { ... } }, but the later example at lines 235–255 uses overrides: { providers: { fcm: { ... } } }. This inconsistency within the same file will confuse users about the correct API structure.

Align both examples to use the providers wrapper for consistency with Expo and other providers. Apply this diff to lines 189–210:

  overrides: {
-   fcm: {
+   providers: {
+     fcm: {
        // For a data-only notification (silent push)
        type: 'data',
        data: {
          custom_key: 'custom_value',
        },
        // Platform-specific overrides
        android: {
          // See FCM AndroidConfig options
        },
        apns: {
          // See FCM ApnsConfig options
        },
        webPush: {
          // See FCM WebpushConfig options
        },
        fcmOptions: {
          // See FCM FcmOptions
        }
+     }
-   },
+   }
  },

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/fcm.mdx around lines 189
to 210, the example uses overrides: { fcm: { ... } } which is inconsistent with
the later example that uses overrides: { providers: { fcm: { ... } } }; update
the earlier example to wrap the fcm config inside a providers object (i.e.,
change overrides: { fcm: { ... } } to overrides: { providers: { fcm: { ... } }
}) so both examples use the same providers wrapper and reflect the documented
API shape.

OneSignal supports sending messages via both <a href="https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server" target="_blank" rel="noopener noreferrer">Apple Push Notification Service</a> (APNs) and <a href="https://firebase.google.com/docs/cloud-messaging" target="_blank" rel="noopener noreferrer">Firebase Cloud Messaging</a> (FCM).

To configure the OneSignal integration, you will need an active account which has credentials for APNs, FCM or both, and have access to the `OneSignal App ID` and `Rest API Key` available via your [application's settings page](https://documentation.onesignal.com/docs/keys-and-ids).
## Configure Onesignal with Novu
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Correct inconsistent branding in section headings.

Lines 10 and 36 use "Onesignal" instead of "OneSignal" (the official spelling established in the title and opening paragraphs). Additionally, line 33 contains "Onesignal Integration" in the alt text.

Apply this diff to fix the inconsistencies:

-## Configure Onesignal with Novu
+## Configure OneSignal with Novu
-## Using Onesignal with Novu
+## Using OneSignal with Novu
-  ![Onesignal Integration in Novu](/images/channels-and-providers/push/onesignal/onesignal-integration.png)
+  ![OneSignal Integration in Novu](/images/channels-and-providers/push/onesignal/onesignal-integration.png)

Also applies to: 36-36

🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/onesignal.mdx around
lines 10, 33 and 36, update inconsistent branding: change the heading text on
line 10 from "Onesignal" to "OneSignal", change the alt text on line 33 from
"Onesignal Integration" to "OneSignal Integration", and change the heading or
any occurrence on line 36 from "Onesignal" to "OneSignal" so all instances match
the official casing used in the title and opening paragraphs.

@@ -1,26 +1,48 @@
---
title: 'Push Webhook'
description: 'Learn how to use the Push Webhook provider to send notifications using Novu'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix double space in description.

Line 3 contains a double space before "notifications".

-description: 'Learn how to use the Push Webhook provider to send  notifications using Novu'
+description: 'Learn how to use the Push Webhook provider to send notifications using Novu'
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
description: 'Learn how to use the Push Webhook provider to send notifications using Novu'
description: 'Learn how to use the Push Webhook provider to send notifications using Novu'
🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/push-webhook.mdx around
line 3, the frontmatter description contains a double space before the word
"notifications"; remove the extra space so the sentence reads "...to send
notifications using Novu" (ensure only a single space after "send") and save the
file.

Comment on lines +93 to +108
```jsx
import { Novu } from '@novu/node';

const novu = new Novu('YOUR_NOVU_API_KEY');

await novu.trigger('your-workflow-id', {
  to: {
    subscriberId: 'SUBSCRIBER_ID',
  },
  payload: {
    // This payload data will be included
// in the webhook request
    custom_message: "This is custom message from payload.",
  },
});
```
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Incorrect code block language declaration.

The code block is marked as jsx (line 93) but contains Node.js code using @novu/node SDK, not JSX. This should be typescript or javascript to reflect the actual content.

-```jsx
+```typescript
 import { Novu } from '@novu/node';
🤖 Prompt for AI Agents
content/docs/platform/integrations/push/(providers)/push-webhook.mdx around
lines 93 to 108: the fenced code block is labeled as `jsx` but contains Node.js
usage of the `@novu/node` SDK; change the code block language token to
`typescript` (or `javascript`) so syntax highlighting matches the code, i.e.,
replace the opening fence marker from ```jsx to ```typescript and leave the code
content unchanged.


## Using Pushpad with Novu

Once your integration is configured, in other to send push notification using the PushPad provider, you must do the following:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix grammatical error in introductory sentence.

Line 48 has "in other to send" which should be "in order to send".

-Once your integration is configured, in other to send push notification using the PushPad provider, you must do the following:
+Once your integration is configured, in order to send push notifications using the PushPad provider, you must do the following:
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Once your integration is configured, in other to send push notification using the PushPad provider, you must do the following:
Once your integration is configured, in order to send push notifications using the PushPad provider, you must do the following:
🤖 Prompt for AI Agents
In content/docs/platform/integrations/push/(providers)/pushpad.mdx around line
48, fix the grammatical error in the introductory sentence by changing "in other
to send push notification using the PushPad provider, you must do the
following:" to use "in order to send push notifications using the PushPad
provider, you must do the following:"—also pluralize "notification" to
"notifications" for correctness and ensure punctuation/capitalization remains
consistent.

@jainpawan21 jainpawan21 changed the title Channels providers integration [Do not merge yet] Channels providers integration Dec 7, 2025
@jainpawan21 jainpawan21 merged commit aa9253a into main Dec 7, 2025
5 of 6 checks passed
@jainpawan21 jainpawan21 deleted the channels-providers-integration branch December 7, 2025 12:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants