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
Server-side REST API exposing 135 operations across Events, Subscribers, Workflows, Topics, Integrations, Layouts, Messages, Notifications, Environments, Environment Variables, ...
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...
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...
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...
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...
Create many subscribers in one call, then broadcast a single announcement to all subscribers.
ARAZZO
Define a new in-app notification workflow, then immediately trigger it to a subscriber.
ARAZZO
Confirm a subscriber, audit their topic subscriptions, then delete the subscriber and all associated data.
ARAZZO
Create a subscriber, trigger a workflow to them, and read back the resulting event.
ARAZZO
Create a channel integration, promote it to primary for its channel, and confirm it is active.
ARAZZO
Confirm a subscriber exists, set their workflow channel preferences, then trigger a respectful notification.
ARAZZO
Find a subscriber by search, subscribe them to a topic, and confirm the subscription.
ARAZZO
Confirm a subscriber, read their unread in-app inbox, then mark all notifications as read.
ARAZZO
Create a topic, subscribe an audience to it, and trigger a single notification to the whole topic.
ARAZZO
Trigger a workflow to a subscriber, then inspect the event and the per-channel messages it produced.
ARAZZO
Trigger a workflow with a caller-supplied transactionId, then cancel any pending delay or digest using that id.
ARAZZO
Remove a set of subscribers from a topic, then list the remaining subscriptions to confirm.
ARAZZO
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.
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.
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.
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).
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