Novu is an open-source notification infrastructure platform that greatly reduces the effort and complexity required to implement notifications your users will love, all without the need to build your own notification system.

We designed Novu with both developers and product teams in mind: it’s easy for developers to implement quickly, and simple for less-technical users to interact with and maintain content with a powerful intuitive dashboard.

Novu functions as an abstraction layer between your application and end users, and managed all aspects of notification workflow logic and delivery provider management.

how-novu-works


How does it work?

Managing notifications across multiple channels is painful. Each notification delivery provider has their own SDK, authentication methods, and API quirks. This complexity dramatically increases as you add additional logic such as delays, digests/batches, or multi-tiered notification approaches.

Without Novu

  • Learn and maintain different codebases for email, SMS, push, and chat providers
  • Handle varying API response formats and error patterns
  • Keep track of multiple API keys and credentials
  • Build abstraction layers to standardize notification logic
  • Deal with provider-specific rate limits and quotas
  • Maintain separate content formats and hydration methods for each channel and notification type

API & SDKs

Novu eliminates these headaches with a unified API.

Instead of juggling multiple providers’ APIs and SDKs, you get a single, consistent interface to control all your notification flows.

With Novu

  • Trigger notifications across any channel
  • Manage subscriber profiles and preferences
  • Power real-time notification feeds with our full-stack UI Components libraries
  • Handle notification templates and workflows

And so much more.

This is a robust, highly customizable infrastructure layer that sits between your application and the user’s devices and channels.

There are two ways to integrate Novu with your application or website:

Direct HTTP Requests

Make direct HTTP requests using your environment’s API Secret Key

Every request you make is automatically routed to the correct environment, ensuring clean separation between development and production environments.


Workflows

Workflows are the core building blocks of Novu’s notification system. They enable you to design sophisticated messaging sequences that can span multiple communication channels like in-app, email, SMS, chat, and push.

Using intuitive logical operators and action steps, you create dynamic notification paths that automatically adapt based on your end user preferences and behavior.

Every notification in Novu originates from a workflow trigger, making workflows the central orchestration layer for your entire messaging infrastructure.

Whether you need to send a simple welcome email or implement a complex multi-step notification sequence with digests, delays, fallbacks, and conditional logic, workflows provide the foundation for managing these communications effectively.

novu-workflows

In the code snippets below, you can see how an API request looks like to trigger a workflow.

curl -X POST https://api.novu.co/v1/events/trigger \
  -H "Authorization: ApiKey <NOVU_SECRET_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "<WORKFLOW_TRIGGER_IDENTIFIER>",
    "to": {
      "subscriberId": "<UNIQUE_SUBSCRIBER_IDENTIFIER>",
      "email": "john@doemail.com",
      "firstName": "John",
      "lastName": "Doe"
    },
    "payload": {
      "name": "Hello World",
      "organization": {
        "logo": "https://happycorp.com/logo.png"
      }
    }
  }'

To trigger a notification workflow process in Novu, you must specify the intended subscriber(s). This is a fundamental concept in Novu because it determines the routing of your notifications.

Subscribers

Subscribers are in most cases users in your application who receive notifications through various channels.

The subscriber is identified through one of two methods:

  • A subscriber_id - this uniquely identifies a specific user in your system (similar to how each user has a unique user_id in a database)
  • A topic_id - this represents a channel or category that multiple subscribers can opt into (like a subscription group)

When you trigger workflows for subscribers, Novu maintains a cache of their notification-related data, including:

  • Required contact information (email, phone number)
  • Profile details (avatar URL)
  • Platform-specific tokens (push notifications, webhooks)
  • Custom properties (plan type, user role, timezone)

Below is a detailed breakdown of the subscriber object:

{
  // Core Identifiers
  "_id": "NOVU_GENERATED_SUBSCRIBER_ID",
  "_organizationId": "NOVU_GENERATED_ORG_ID",
  "_environmentId": "NOVU_GENERATED_ENV_ID",

  // Basic Information
  "firstName": "John",
  "lastName": "Doe",
  "email": "john.doe@org.com",
  "phone": "+98712345670",
  "avatar": "AVATAR_URL",

  // Custom Data
  "data": {
    "custom_key_1": "custom_value_1",
    "custom_key_2": "custom_value_2"
  },

  // Communication Channels
  "channels": [
    {
      // Firebase Cloud Messaging configuration
      "credentials": {
        "deviceTokens": ["token1", "token2"]
      },
      "_integrationId": "NOVU_GENERATED_INTEGRATION_ID",
      "providerId": "fcm"
    },
    {
      // Discord configuration
      "credentials": {
        "webhookUrl": "URL"
      },
      "_integrationId": "NOVU_GENERATED_INTEGRATION_ID",
      "providerId": "discord"
    }
  ],

  // System Fields
  "deleted": false,
  "createdAt": "2022-10-13T17:40:53.231Z",
  "updatedAt": "2022-10-13T17:41:53.238Z",
  "__v": 0,
  "isOnline": false,
  "lastOnlineAt": "2022-10-13T17:41:53.238Z",
  "avatar": "AVATAR_URL",
  "id": "NOVU_GENERATED_SUBSCRIBER_ID"
}

Channels

To deliver notifications to subscribers, you need to configure a channel.

A channel in Novu is a configured delivery method for sending notifications to subscribers. Each channel connects to a specific delivery provider that handles the actual notification delivery.

Sending notifications with Novu:

1

Configure one or more channels by selecting and setting up providers

Novu allows you to set up multiple notification delivery providers and integrate them into your notification workflows.

Each channel corresponds to a configured provider that you can use to deliver notifications in production.

2

Add these channels to your notification workflows

Use these channels individually or combine them in workflows for multi-channel notification delivery.

3

Trigger the workflow

Make an API call or use a cURL command to trigger your workflow using a subscriber_id.

For example, you might configure an email channel using SendGrid as the provider and an SMS channel using Twilio. These channels can be used independently or together in workflows to achieve multi-channel delivery.

Here’s an overview of our supported channels and providers:


Templates

Novu allows you to design notification templates using an intuitive combination of a template editor and the Liquid templating language to create dynamic, customizable notification templates.

This unified approach solves two common challenges:

1

The need for multiple templating languages

Consolidate templating languages into a single system, removing the complexity of managing different syntaxes for different providers.

A single templating language provides consistency across your communication channels without the need for constant adjustments.

Novu’s built-in engine works seamlessly across email, SMS, push, chat, and in-app notifications.

Define variables like {{subscriber.firstName}} or {{payload.orderTotal}} once, and let Novu automatically handle the rest.

2

Managing notification content templates in your application codebase

Manage notification content templates in a dedicated control center, where teams can:

  • Edit templates using an intuitive notification template editor
  • Test notifications with actual subscriber data to ensure accuracy
  • Switch between channels (email, SMS, push) while keeping content and hydration consistent
  • Set up translation variations for different languages
  • Allow non-technical resources to adjust and update content without ever breaking workflow logic

Actions

Adding action steps (or functions) to your workflows are a powerful way to create more complex and unique notification experiences for your users.

Each workflow can combine multiple action steps to model complex logic that creates better notification experiences. You can combine the following action steps with any number of channel steps to create personalized notifications for your users:

Digest

Digest actions combine multiple notifications into a single, consolidated message. This helps prevent notification fatigue and provides better context for your users.

  • Group related notifications within a specified time window
  • Customize aggregation logic and formatting

Learn more about Digest action →

Delay

Delay actions introduce controlled waiting periods between steps in your workflow. This enables better timing and sequencing of notifications.

  • Set precise delay durations (seconds to months)
  • Support for cron-style scheduling

Learn more about Delay action →

Custom

Custom actions allow you to integrate specialized business logic directly into your notification workflows while maintaining workflow durability and state management.

  • Execute arbitrary code within the workflow context
  • Can serve as a trigger for other workflows
  • Pass data from your application’s database into the workflow

Learn more about Custom action →


Step Conditions

In addition to combining channel steps and action steps to create complex workflows, you can augment these steps with additional logic based on the subscriber, inputs from your application, or the status of previous workflow steps. These are called step conditions.

Coming Soon…

Step conditions are powerful rules that determine when a workflow executes channel and action steps.

They evaluate trigger data, subscriber properties, and previous step outcomes to create personalized user experiences.

Step conditions enable you to:

  • Skip sending an email if a subscriber has already viewed an in-app message
  • Display in-app notifications only to users on specific plans (e.g., subscriber.data.plan === "pro")
  • Control timing by executing delay steps based on trigger notification payload values (e.g., if delay === true)

Step conditions automatically respect subscriber communication preferences, including:

  • Preferred notification channels (email, SMS, in-app, etc.)
  • Preferred times to receive communications
  • Frequency and volume settings

Preferences

Empower the end users and subscribers to decide what, when, and how they want to receive notifications.

In Novu, each workflow run is executed on behalf of a subscriber, and each subscriber can specify their preferences to receive notifications across a number of different criteria:

  • channel types
  • individual workflows
  • workflow categories

preferences

Novu automatically enforces user communication preferences during workflow execution, while giving developers full flexibility to customize how these preferences are displayed and which options are available to users.


Next Steps

Build something

If you want to start by adding Novu to your existing system, you can check out our quick start guide to implement your first workflow.

Quick Start

Learn how to integrate Novu with your backend codebase.

Keep learning

While the workflow engine is at the heart of Novu, our goal is to build a complete notification system for our customers.

Here is an overview of some of the more-advanced concepts and features Novu has to offer:

Was this page helpful?