Novu website screenshot

Novu

Novu is the open-source notification infrastructure for developers. A single REST API and workflow engine route a triggered event across in-app inbox, email, SMS, push, chat (Slack / Discord / MS Teams / WhatsApp) and custom channels — with subscriber preferences, topics, digest, snooze, and full workflow orchestration on top. Ships with the embeddable React Inbox component, the Novu Framework for code-first workflow authoring, language SDKs for nine ecosystems, a Postman collection, an MCP server, GitHub Action sync, the Maily block-based email editor, framework starters for Next.js / Remix / Nuxt / SvelteKit, and webhook bridges for Stripe / Clerk / Segment.

5 APIs 12 Features
NotificationsMessagingIn AppEmailSMSPushChatWorkflowsOpen SourceSubscribersTopicsInboxWorkflow OrchestrationMulti ChannelDigestMCPFrameworkReact

APIs

Novu REST API

Server-side REST API exposing 135 operations across Events, Subscribers, Workflows, Topics, Integrations, Layouts, Messages, Notifications, Environments, Environment Variables, ...

Novu REST API (EU Region)

EU-hosted instance of the Novu REST API for customers requiring data residency in the European Union. Exposes the same 135 operations, schemas, security, and rate-limit policy a...

Novu Inbox / In-App API

Client-side API and React Inbox component for rendering an embedded in-app notification center, marking notifications as read / archived / snoozed, and managing per-user notific...

Novu Framework (Code-First Workflows)

Code-first workflow framework that lets developers define notification workflows in TypeScript / JavaScript using `@novu/framework`, then sync them to Novu Cloud (or a self-host...

Novu MCP Server

Official Model Context Protocol server exposing the Novu REST API surface as MCP tools so AI agents (Claude Desktop, Cursor, agent frameworks) can trigger workflows, manage subs...

Collections

Novu API

POSTMAN

Novu API

OPEN

Arazzo Workflows

Novu Bulk Onboard Subscribers and Broadcast an Announcement

Create many subscribers in one call, then broadcast a single announcement to all subscribers.

ARAZZO

Novu Create a Workflow and Trigger It

Define a new in-app notification workflow, then immediately trigger it to a subscriber.

ARAZZO

Novu Offboard a Subscriber

Confirm a subscriber, audit their topic subscriptions, then delete the subscriber and all associated data.

ARAZZO

Novu Onboard a Subscriber and Send Their First Notification

Create a subscriber, trigger a workflow to them, and read back the resulting event.

ARAZZO

Novu Provision a Delivery Integration and Make It Primary

Create a channel integration, promote it to primary for its channel, and confirm it is active.

ARAZZO

Novu Set Subscriber Preferences Then Notify

Confirm a subscriber exists, set their workflow channel preferences, then trigger a respectful notification.

ARAZZO

Novu Subscribe an Existing Subscriber to a Topic

Find a subscriber by search, subscribe them to a topic, and confirm the subscription.

ARAZZO

Novu Subscriber Inbox Triage

Confirm a subscriber, read their unread in-app inbox, then mark all notifications as read.

ARAZZO

Novu Topic Broadcast Campaign

Create a topic, subscribe an audience to it, and trigger a single notification to the whole topic.

ARAZZO

Novu Trigger a Notification and Verify Delivery

Trigger a workflow to a subscriber, then inspect the event and the per-channel messages it produced.

ARAZZO

Novu Trigger a Deferred Notification and Cancel It

Trigger a workflow with a caller-supplied transactionId, then cancel any pending delay or digest using that id.

ARAZZO

Novu Unsubscribe Subscribers From a Topic

Remove a set of subscribers from a topic, then list the remaining subscriptions to confirm.

ARAZZO

Pricing Plans

Novu Plans Pricing

4 plans

PLANS

Rate Limits

Novu Rate Limits

4 limits

RATE LIMITS

FinOps

Novu Finops

FINOPS

Features

Multi-channel Workflow Orchestration

Author a single workflow tree that fans out across in-app, email, SMS, push, and chat with branching, delay, and digest steps.

Embedded React Inbox

Drop-in React (and React Native) component with per-user preferences, read / archive / snooze, themes (Novu / Notion / Linear), and full headless API access.

Subscriber Identity

First-class Subscribers resource with credentials per channel, locale, timezone, preferences, and bulk import.

Topics for Fan-out

Named broadcast groups subscribed by users for one-call fan-out to thousands of subscribers.

Digest Engine

Aggregate high-frequency triggers into a single delivery using configurable digest windows and back-off keys.

Code-First Framework

Define workflows in TypeScript using @novu/framework and sync to Novu Cloud via novu-sync or a GitHub Action.

Block-Based Email Editor

WYSIWYG block-based editor (open-sourced as Maily.to) powered by React Email under the hood.

Tenant / Context Objects

Reusable tenant and organization context objects referenced by trigger payloads for multi-tenant routing.

Idempotency + RateLimit Headers

IETF-style RateLimit-* headers on every response, Idempotency-Key on every mutating request.

MCP Server

Official Model Context Protocol server exposing the Novu REST API to AI agents.

Self-Hosting

Apache-/MIT-licensed monorepo with Docker Compose and community Kubernetes manifests for fully self-hosted deployments.

9 Language SDKs

TypeScript, Python, Go, PHP, C#, Java, Elixir, Kotlin, Ruby, Rust, .NET clients.

Use Cases

Product Onboarding

Welcome sequences combining transactional email, in-app inbox messages, and reminders.

Transactional Notifications

Order confirmations, password resets, magic links, payment receipts, and shipping updates.

Real-Time Collaboration Alerts

Comment mentions, document shares, and review requests delivered to the in-app inbox and email.

Subscription Lifecycle

Trial reminders, renewal warnings, dunning, and cancellation flows driven by billing events.

Authentication Events

Sign-up confirmations, MFA prompts, suspicious-login alerts, and OTP codes.

Marketing Broadcasts

Product announcements and weekly digests fanned out via topics.

Operational Alerts

On-call paging, deploy notifications, and incident updates routed through Slack / MS Teams.

Multi-Tenant SaaS

Per-customer routing using tenant context and subscriber data inheritance.

AI Agent Notifications

Agent workflows triggering Novu via the MCP server to keep humans in the loop.

Integrations

SendGrid

Outbound email integration via SendGrid credentials.

Mailgun

Outbound email integration via Mailgun.

Resend

Outbound email integration via Resend.

Postmark

Outbound transactional email via Postmark.

AWS SES

Outbound email via Amazon Simple Email Service.

Twilio

SMS delivery via Twilio.

MessageBird

SMS delivery via MessageBird.

Plivo

SMS delivery via Plivo.

Firebase Cloud Messaging

Mobile push delivery via FCM.

Apple Push Notification Service

iOS push delivery via APNs.

OneSignal

Push delivery via OneSignal.

Slack

Chat notifications to Slack channels and users.

Microsoft Teams

Chat notifications to MS Teams channels.

Discord

Chat notifications to Discord channels.

WhatsApp

Conversational notifications via WhatsApp.

Stripe

Billing-event-to-notification bridge via stripe-to-novu-webhooks.

Clerk

Authentication-event-to-notification bridge via clerk-to-novu-webhooks.

Segment

CDP-event-to-notification bridge via segment-to-novu-webhooks.

React

First-class React Inbox component and Next.js helpers.

GitHub Actions

actions-novu-sync syncs framework workflows to Novu Cloud on every push.

Solutions

Novu Cloud

Managed Novu hosted by the Novu team. Free / Pro / Team / Enterprise plans.

Self-Hosted Open Source

Run the full Novu monorepo on your own infrastructure under MIT license. Docker Compose for development, community Kubernetes manifests for production.

Novu EU Cloud

EU-resident Novu Cloud deployment at eu.api.novu.co.

Enterprise (HIPAA, SSO, SCIM)

HIPAA BAA, custom SSO, SCIM directory sync, and custom data-residency regions (US, EU, UK, Singapore, Australia, Japan, South Korea).

Event Specifications

Novu Notification Center WebSocket API

Real-time WebSocket interface used by the Novu Notification Center / Inbox (the `` React component, `@novu/react-native`, the headless `@novu/js` SDK, and any custom cl...

ASYNCAPI

Semantic Vocabularies

Novu Context

20 classes · 105 properties

JSON-LD

API Governance Rules

Novu API Rules

38 rules · 9 errors 20 warnings 9 info

SPECTRAL

JSON Structure

Novu Bulk Subscriber Create Dto Structure

0 properties

JSON STRUCTURE

Novu Bulk Trigger Event Dto Structure

0 properties

JSON STRUCTURE

Novu Create Environment Request Dto Structure

0 properties

JSON STRUCTURE

Novu Create Integration Request Dto Structure

0 properties

JSON STRUCTURE

Novu Create Subscriber Request Dto Structure

0 properties

JSON STRUCTURE

Novu Create Workflow Dto Structure

0 properties

JSON STRUCTURE

Novu Environment Response Dto Structure

0 properties

JSON STRUCTURE

Novu Error Dto Structure

0 properties

JSON STRUCTURE

Novu Integration Response Dto Structure

0 properties

JSON STRUCTURE

Novu Layout Response Dto Structure

0 properties

JSON STRUCTURE

Novu Message Response Dto Structure

0 properties

JSON STRUCTURE

Novu Subscriber Payload Dto Structure

0 properties

JSON STRUCTURE

Novu Subscriber Response Dto Structure

0 properties

JSON STRUCTURE

Novu Topic Response Dto Structure

0 properties

JSON STRUCTURE

Novu Trigger Event Request Dto Structure

0 properties

JSON STRUCTURE

Novu Trigger Event Response Dto Structure

0 properties

JSON STRUCTURE

Novu Update Environment Request Dto Structure

0 properties

JSON STRUCTURE

Novu Update Integration Request Dto Structure

0 properties

JSON STRUCTURE

Novu Update Workflow Dto Structure

0 properties

JSON STRUCTURE

Novu Workflow Response Dto Structure

0 properties

JSON STRUCTURE

Example Payloads

Novu Broadcast Event Example

2 fields

EXAMPLE

Novu Create Topic Example

2 fields

EXAMPLE

Novu Error Response Example

4 fields

EXAMPLE

Novu List Messages Example

5 fields

EXAMPLE

Novu Trigger Event Example

5 fields

EXAMPLE

Novu Workflow Response Example

11 fields

EXAMPLE

Resources

🔗
PostmanWorkspace
PostmanWorkspace
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Arazzo
Arazzo
🔗
Website
Website
🌐
Portal
Portal
🔗
Documentation
Documentation
📝
Signup
Signup
🔗
Login
Login
💰
Pricing
Pricing
🔗
Plans
Plans
🔗
FinOps
FinOps
🔗
RateLimits
RateLimits
📰
Blog
Blog
👥
GitHub
GitHub
👥
GitHubOrganization
GitHubOrganization
👥
novuhq/novu (main monorepo, 39k+ stars)
GitHubRepository
💻
SourceCode
SourceCode
🔗
MIT License
License
📦
SDKs
SDKs
🔗
Novu CLI
CLI
🔗
Novu Framework
Framework
🔗
Novu Inbox
Inbox
📄
ChangeLog
ChangeLog
📄
ReleaseNotes
ReleaseNotes
🟢
StatusPage
StatusPage
📜
TermsOfService
TermsOfService
📜
PrivacyPolicy
PrivacyPolicy
🔗
Novu Discord
Community
👥
StackOverflow
StackOverflow
👥
YouTube
YouTube
🔗
LlmsText
LlmsText
🔗
SpectralRules
SpectralRules
🔗
Vocabulary
Vocabulary
🔗
JSONLD
JSONLD
🔧
Novu MCP Server
Tools
🔧
Maily — block-based email editor (used by Novu Cloud)
Tools
🔧
actions-novu-sync — GitHub Action to sync workflows to Novu Cloud
Tools
🔧
Stripe → Novu webhook bridge
Tools
🔧
Clerk → Novu webhook bridge
Tools
🔧
Segment → Novu webhook bridge
Tools
🔧
Community Kubernetes manifests for self-hosting
Tools
🎓
Inbox Playground
Tutorials
🎓
Novu Examples
Tutorials
🎓
Awesome Novu
Tutorials
🎓
Tutorials
Tutorials

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Novu API
  version: 3.15.0
request:
  auth:
    type: apikey
    key: Authorization
    value: '{{Authorization}}'
    placement: header
items:
- info:
    name: Environments
    type: folder
  items:
  - info:
      name: Novu List All Environments
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/environments
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "This API returns a list of environments for the current organization. \n    Each environment contains its configuration,\
      \ API keys (if user has access), and metadata."
  - info:
      name: Novu Create an Environment
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/environments
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Creates a new environment within the current organization. \n    Environments allow you to manage different stages\
      \ of your application development lifecycle.\n    Each environment has its own set of API keys and configurations."
  - info:
      name: Novu Update an Environment
      type: http
    http:
      method: PUT
      url: https://api.novu.co/v1/environments/:environmentId
      params:
      - name: environmentId
        value: ''
        type: path
        description: The unique identifier of the environment
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Update an environment by its unique identifier **environmentId**. \n    You can modify the environment name, identifier,\
      \ color, and other configuration settings."
  - info:
      name: Novu Delete an Environment
      type: http
    http:
      method: DELETE
      url: https://api.novu.co/v1/environments/:environmentId
      params:
      - name: environmentId
        value: ''
        type: path
        description: The unique identifier of the environment
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Delete an environment by its unique identifier **environmentId**. \n    This action is irreversible and will remove\
      \ the environment and all its associated data."
  - info:
      name: Novu List Environment Tags
      type: http
    http:
      method: GET
      url: https://api.novu.co/v2/environments/:environmentId/tags
      params:
      - name: environmentId
        value: 6615943e7ace93b0540ae377
        type: path
        description: Environment internal ID (MongoDB ObjectId) or identifier
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Retrieve all unique tags used in workflows within the specified environment. These tags can be used for filtering
      workflows.
  - info:
      name: Novu Publish Resources to Target Environment
      type: http
    http:
      method: POST
      url: https://api.novu.co/v2/environments/:targetEnvironmentId/publish
      params:
      - name: targetEnvironmentId
        value: 6615943e7ace93b0540ae377
        type: path
        description: Target environment ID (MongoDB ObjectId) to publish resources to
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Publishes all workflows and resources from the source environment to the target environment. Optionally specify
      specific resources to publish or use dryRun mode to preview changes.
  - info:
      name: Novu Compare Resources Between Environments
      type: http
    http:
      method: POST
      url: https://api.novu.co/v2/environments/:targetEnvironmentId/diff
      params:
      - name: targetEnvironmentId
        value: 6615943e7ace93b0540ae377
        type: path
        description: Target environment ID (MongoDB ObjectId) to compare against
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Compares workflows and other resources between the source and target environments, returning detailed diff information
      including additions, modifications, and deletions.
- info:
    name: Events
    type: folder
  items:
  - info:
      name: Novu Trigger Event
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/events/trigger
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "\n    Trigger event is the main (and only) way to send notifications to subscribers. The trigger identifier is\
      \ used to match the particular workflow associated with it. Maximum number of recipients can be 100. Additional information\
      \ can be passed according the body interface below.\n    To prevent duplicate triggers, you can optionally pass a **transactionId**\
      \ in the request body. If the same **transactionId** is used again, the trigger will be ignored. The retention period\
      \ depends on your billing"
  - info:
      name: Novu Bulk Trigger Event
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/events/trigger/bulk
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "\n      Using this endpoint you can trigger multiple events at once, to avoid multiple calls to the API.\n    \
      \  The bulk API is limited to 100 events per request.\n    "
  - info:
      name: Novu Broadcast Event to All
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/events/trigger/broadcast
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Trigger a broadcast event to all existing subscribers, could be used to send announcements, etc.\n      In the\
      \ future could be used to trigger events to a subset of subscribers based on defined filters."
  - info:
      name: Novu Cancel Triggered Event
      type: http
    http:
      method: DELETE
      url: https://api.novu.co/v1/events/trigger/:transactionId
      params:
      - name: transactionId
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "\n    Using a previously generated transactionId during the event trigger,\n     will cancel any active or pending\
      \ workflows. This is useful to cancel active digests, delays etc...\n    "
- info:
    name: Notifications
    type: folder
  items:
  - info:
      name: Novu List All Events
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/notifications
      params:
      - name: channels
        value: ''
        type: query
        description: Array of channel types
      - name: templates
        value: ''
        type: query
        description: Array of template IDs or a single template ID
      - name: emails
        value: ''
        type: query
        description: Array of email addresses or a single email address
      - name: search
        value: ''
        type: query
        description: Search term (deprecated)
      - name: subscriberIds
        value: ''
        type: query
        description: Array of subscriber IDs or a single subscriber ID
      - name: severity
        value: ''
        type: query
        description: Array of severity levels or a single severity level
      - name: page
        value: ''
        type: query
        description: Page number for pagination
      - name: limit
        value: ''
        type: query
        description: Limit for pagination
      - name: transactionId
        value: ''
        type: query
        description: The transaction ID to filter by
      - name: topicKey
        value: ''
        type: query
        description: Topic Key for filtering notifications by topic
      - name: subscriptionId
        value: ''
        type: query
        description: Subscription ID for filtering notifications by subscription
      - name: contextKeys
        value: ''
        type: query
        description: 'Filter by exact context keys, order insensitive (format: "type:id")'
      - name: after
        value: ''
        type: query
        description: Date filter for records after this timestamp. Defaults to earliest date allowed by subscription plan
      - name: before
        value: ''
        type: query
        description: Date filter for records before this timestamp. Defaults to current time of request (now)
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "List all notification events (triggered events) for the current environment. \n    This API supports filtering\
      \ by **channels**, **templates**, **emails**, **subscriberIds**, **transactionId**, **topicKey**, **severity**, **contextKeys**.\
      \ \n    Checkout all available filters in the query section.\n    This API returns event triggers, to list each channel\
      \ notifications, check messages APIs."
  - info:
      name: Novu Retrieve an Event
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/notifications/:notificationId
      params:
      - name: notificationId
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Retrieve an event by its unique key identifier **notificationId**. \n    Here **notificationId** is of mongodbId\
      \ type. \n    This API returns the event details - execution logs, status, actual notification (message) generated by\
      \ each workflow step."
- info:
    name: Domains
    type: folder
  items:
  - info:
      name: Novu List Domains for an Environment
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/domains
      params:
      - name: after
        value: ''
        type: query
        description: Cursor for pagination indicating the starting point after which to fetch results.
      - name: before
        value: ''
        type: query
        description: Cursor for pagination indicating the ending point before which to fetch results.
      - name: limit
        value: '10'
        type: query
        description: Limit the number of items to return
      - name: orderDirection
        value: ''
        type: query
        description: Direction of sorting
      - name: orderBy
        value: ''
        type: query
        description: Field to order by
      - name: includeCursor
        value: ''
        type: query
        description: Include cursor item in response
      - name: name
        value: ''
        type: query
        description: Domain name to filter results by.
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Returns a paginated list of inbound-email domains in the current environment. Supports cursor pagination and a name
      contains filter.
  - info:
      name: Novu Create a Domain
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/domains
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Registers a new inbound-email domain. The response includes the DNS records customers must add at their DNS provider
      before the domain can receive mail.
  - info:
      name: Novu Retrieve a Domain by Name
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/domains/:domain
      params:
      - name: domain
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Returns the domain configuration and the DNS records that must be in place. This is a pure read; call `domains.verify`
      to refresh verification status from DNS.
  - info:
      name: Novu Update a Domain
      type: http
    http:
      method: PATCH
      url: https://api.novu.co/v1/domains/:domain
      params:
      - name: domain
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Updates optional domain fields. When `data` is provided, it replaces the entire metadata object; omit `data` to
      leave it unchanged.
  - info:
      name: Novu Delete a Domain
      type: http
    http:
      method: DELETE
      url: https://api.novu.co/v1/domains/:domain
      params:
      - name: domain
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Removes the domain and cascades the deletion to all of its routes. Inbound mail for that domain stops being processed
      immediately.
  - info:
      name: Novu Verify a Domain
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/domains/:domain/verify
      params:
      - name: domain
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Performs a live DNS lookup to refresh the MX record status of the domain and updates the verification status accordingly.
      Returns the latest domain configuration.
  - info:
      name: Novu Diagnose Inbound DNS for a Domain
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/domains/:domain/diagnose
      params:
      - name: domain
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Runs live DNS checks for inbound email readiness (MX correctness, apex CNAME collision, and common DNS blocklists
      for the Novu mail host). Returns structured issues with plain-language fixes.
  - info:
      name: Novu List Routes for a Domain
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/domains/:domain/routes
      params:
      - name: domain
        value: ''
        type: path
      - name: after
        value: ''
        type: query
        description: Cursor for pagination indicating the starting point after which to fetch results.
      - name: before
        value: ''
        type: query
        description: Cursor for pagination indicating the ending point before which to fetch results.
      - name: limit
        value: '10'
        type: query
        description: Limit the number of items to return
      - name: orderDirection
        value: ''
        type: query
        description: Direction of sorting
      - name: orderBy
        value: ''
        type: query
        description: Field to order by
      - name: includeCursor
        value: ''
        type: query
        description: Include cursor item in response
      - name: agentId
        value: ''
        type: query
        description: Agent identifier to filter routes by.
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Returns a paginated list of routes attached to the domain. Optionally filter by an agent identifier to find routes
      pointing to a specific agent.
  - info:
      name: Novu Create a Route
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/domains/:domain/routes
      params:
      - name: domain
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Creates a route on the domain that forwards inbound mail addressed to `<address>@<domain>` to either a webhook or
      an agent. Each address on a domain may only have a single route.
  - info:
      name: Novu Retrieve a Route by Address
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/domains/:domain/routes/:address
      params:
      - name: domain
        value: ''
        type: path
      - name: address
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Returns the route bound to `<address>@<domain>`. Use `*` as the address to retrieve the wildcard route for the domain.
  - info:
      name: Novu Update a Route
      type: http
    http:
      method: PATCH
      url: https://api.novu.co/v1/domains/:domain/routes/:address
      params:
      - name: domain
        value: ''
        type: path
      - name: address
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Updates the destination of the route bound to `<address>@<domain>`. The address itself is the resource identity
      and cannot be changed; delete and recreate the route to rename it.
  - info:
      name: Novu Delete a Route
      type: http
    http:
      method: DELETE
      url: https://api.novu.co/v1/domains/:domain/routes/:address
      params:
      - name: domain
        value: ''
        type: path
      - name: address
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Removes the route bound to `<address>@<domain>`. Inbound mail for that address will no longer be processed.
  - info:
      name: Novu Test an Inbound Route
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/domains/:domain/routes/:address/test
      params:
      - name: domain
        value: ''
        type: path
      - name: address
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: 'Sends a synthetic inbound email through the same delivery path as production (outbound webhooks for webhook routes,
      signed HTTP to the agent for agent routes). Use `dryRun: true` to preview the payload without delivering.'
  - info:
      name: Novu Retrieve Auto-configuration Availability
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/domains/:domain/auto-configure
      params:
      - name: domain
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Returns whether DNS auto-configuration (Domain Connect) is available for this domain. When `available` is `false`,
      `manualRecords` lists the DNS records the customer must add manually.
  - info:
      name: Novu Start DNS Auto-configuration
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/domains/:domain/auto-configure/start
      params:
      - name: domain
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: Generates a signed redirect URL the customer can follow to apply Novu DNS records at their DNS provider. After the
      provider completes the flow, it redirects back to `redirectUri`.
- info:
    name: Integrations
    type: folder
  items:
  - info:
      name: Novu List All Integrations
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/integrations
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: List all the channels integrations created in the organization
  - info:
      name: Novu Create an Integration
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/integrations
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Create an integration for the current environment the user is based on the API key provided. \n    Each provider\
      \ supports different credentials, check the provider documentation for more details."
  - info:
      name: Novu List Active Integrations
      type: http
    http:
      method: GET
      url: https://api.novu.co/v1/integrations/active
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: List all the active integrations created in the organization
  - info:
      name: Novu Update an Integration
      type: http
    http:
      method: PUT
      url: https://api.novu.co/v1/integrations/:integrationId
      params:
      - name: integrationId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Update an integration by its unique key identifier **integrationId**. \n    Each provider supports different credentials,\
      \ check the provider documentation for more details."
  - info:
      name: Novu Delete an Integration
      type: http
    http:
      method: DELETE
      url: https://api.novu.co/v1/integrations/:integrationId
      params:
      - name: integrationId
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Delete an integration by its unique key identifier **integrationId**. \n    This action is irreversible."
  - info:
      name: Novu Auto-configure an Integration for Inbound Webhooks
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/integrations/:integrationId/auto-configure
      params:
      - name: integrationId
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Auto-configure an integration by its unique key identifier **integrationId** for inbound webhook support. \n  \
      \  This will automatically generate required webhook signing keys and configure webhook endpoints."
  - info:
      name: Novu Update Integration as Primary
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/integrations/:integrationId/set-primary
      params:
      - name: integrationId
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Update an integration as **primary** by its unique key identifier **integrationId**. \n    This API will set the\
      \ integration as primary for that channel in the current environment. \n    Primary integration is used to deliver notification\
      \ for sms and email channels in the workflow."
  - info:
      name: Novu Generate Chat OAuth URL
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/integrations/chat/oauth
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "**Deprecated** — use `POST /integrations/channel-connections/oauth` (connect) or `POST /integrations/channel-endpoints/oauth`\
      \ (link_user) instead.\n    Generate an OAuth URL for chat integrations like Slack and MS Teams. \n    This URL allows\
      \ subscribers to authorize the integration, enabling the system to send messages \n    through their chat workspace.\
      \ The generated URL expires after 5 minutes."
  - info:
      name: Novu Generate OAuth URL for a Workspace/tenant Connection
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/integrations/channel-connections/oauth
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Generate an OAuth URL that creates a workspace or tenant-level channel connection (Slack workspace install or MS\
      \ Teams admin consent). \n    The generated URL expires after 5 minutes."
  - info:
      name: Novu Generate OAuth URL to Link a Subscriber User Identity
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/integrations/channel-endpoints/oauth
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Generate an OAuth URL that links a specific subscriber to their chat identity (Slack user ID or MS Teams user OID).\
      \ \n    The generated URL expires after 5 minutes."
- info:
    name: Contexts
    type: folder
  items:
  - info:
      name: Novu List All Contexts
      type: http
    http:
      method: GET
      url: https://api.novu.co/v2/contexts
      params:
      - name: after
        value: ''
        type: query
        description: Cursor for pagination indicating the starting point after which to fetch results.
      - name: before
        value: ''
        type: query
        description: Cursor for pagination indicating the ending point before which to fetch results.
      - name: limit
        value: '10'
        type: query
        description: Limit the number of items to return
      - name: orderDirection
        value: ''
        type: query
        description: Direction of sorting
      - name: orderBy
        value: ''
        type: query
        description: Field to order by
      - name: includeCursor
        value: ''
        type: query
        description: Include cursor item in response
      - name: id
        value: tenant-prod-123
        type: query
        description: Filter contexts by id
      - name: search
        value: tenant
        type: query
        description: Search contexts by type or id (supports partial matching across both fields)
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Retrieve a paginated list of all contexts, optionally filtered by type and key pattern.\n      **type** and **id**\
      \ are optional fields, if provided, only contexts with the matching type and id will be returned.\n      **search**\
      \ is an optional field, if provided, only contexts with the matching key pattern will be returned.\n      Checkout all\
      \ possible parameters in the query section below for more details"
  - info:
      name: Novu Create a Context
      type: http
    http:
      method: POST
      url: https://api.novu.co/v2/contexts
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Create a new context with the specified type, id, and data. Returns 409 if context already exists.\n      **type**\
      \ and **id** are required fields, **data** is optional, if the context already exists, it returns the 409 response"
  - info:
      name: Novu Retrieve a Context
      type: http
    http:
      method: GET
      url: https://api.novu.co/v2/contexts/:type/:id
      params:
      - name: id
        value: ''
        type: path
        description: Context ID
      - name: type
        value: ''
        type: path
        description: Context type
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Retrieve a specific context by its type and id.\n      **type** and **id** are required fields, if the context\
      \ does not exist, it returns the 404 response"
  - info:
      name: Novu Update a Context
      type: http
    http:
      method: PATCH
      url: https://api.novu.co/v2/contexts/:type/:id
      params:
      - name: id
        value: ''
        type: path
        description: Context ID
      - name: type
        value: ''
        type: path
        description: Context type
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Update the data of an existing context.\n      **type** and **id** are required fields, **data** is required. Only\
      \ the data field is updated, the rest of the context is not affected.\n      If the context does not exist, it returns\
      \ the 404 response"
  - info:
      name: Novu Delete a Context
      type: http
    http:
      method: DELETE
      url: https://api.novu.co/v2/contexts/:type/:id
      params:
      - name: id
        value: ''
        type: path
        description: Context ID
      - name: type
        value: ''
        type: path
        description: Context type
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Delete a context by its type and id.\n      **type** and **id** are required fields, if the context does not exist,\
      \ it returns the 404 response"
- info:
    name: Subscribers
    type: folder
  items:
  - info:
      name: Novu Bulk Create Subscribers
      type: http
    http:
      method: POST
      url: https://api.novu.co/v1/subscribers/bulk
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "\n      Using this endpoint multiple subscribers can be created at once. The bulk API is limited to 500 subscribers\
      \ per request.\n    "
  - info:
      name: Novu Update Provider Credentials
      type: http
    http:
      method: PUT
      url: https://api.novu.co/v1/subscribers/:subscriberId/credentials
      params:
      - name: subscriberId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Update credentials for a provider such as **slack** and **FCM**. \n      **providerId** is required field. This\
      \ API creates the **deviceTokens** or replaces the existing ones."
  - info:
      name: Novu Upsert Provider Credentials
      type: http
    http:
      method: PATCH
      url: https://api.novu.co/v1/subscribers/:subscriberId/credentials
      params:
      - name: subscriberId
        value: ''
        type: path
      body:
        type: json
        data: '{}'
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Upsert credentials for a provider such as **slack** and **FCM**. \n      **providerId** is required field. This\
      \ API creates **deviceTokens** or appends to the existing ones."
  - info:
      name: Novu Delete Provider Credentials
      type: http
    http:
      method: DELETE
      url: https://api.novu.co/v1/subscribers/:subscriberId/credentials/:providerId
      params:
      - name: subscriberId
        value: ''
        type: path
      - name: providerId
        value: ''
        type: path
      auth:
        type: apikey
        key: Authorization
        value: '{{Authorization}}'
        placement: header
    docs: "Delete subscriber credentials for a provider such as **slack** and **FCM** by **providerId**. \n    This action\
      \ is irreversible and will remove the credentials for the provider fo

# --- truncated at 32 KB (94 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/novu/refs/heads/main/apis.yml