Marketing Automation
Novu
API integration
Ship Marketing Automation features without building the integration. Full Novu API access via Proxy and 120+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Talk to usUse Cases
Why integrate with Novu
Common scenarios for SaaS companies building Novu integrations for their customers.
Let customers route product events into their own Novu workspace
B2B SaaS platforms can offer a 'Connect Novu' option so customers receive product events (signups, usage milestones, billing changes) in their own notification infrastructure, instead of forcing them to use the SaaS's built-in email sender.
Send observability and security alerts through customer-owned channels
Monitoring, security, and DevOps tools can push high-severity alerts into each customer's Novu instance, letting customers fan-out across SMS, Push, Email, Slack, and on-call schedules using their existing workflows and subscriber preferences.
Sync end-user identities and device credentials for multi-channel delivery
CDPs, identity platforms, and user management SaaS can keep Novu Subscribers in sync with their own user records — including email, phone, push tokens, and Slack webhooks — so notifications always reach the right channel.
Power AI agent two-way conversations over email and chat
AI agent and chatbot builders can use Novu as a universal messaging bus: triggering outbound messages via events and receiving inbound replies through verified domain routes, without integrating each provider individually.
Drive broadcast campaigns through customer-managed topics
Marketing automation and community SaaS can map their internal segments to Novu Topics in the customer's workspace, enabling large-scale fan-out broadcasts without iterating subscriber-by-subscriber.
What You Can Build
Ship these features with Truto + Novu
Concrete product features your team can ship faster by leveraging Truto’s Novu integration instead of building from scratch.
One-click 'Trigger in Novu' event publisher
Let customers pick any event in your product and map it to a Novu workflow trigger using create_a_novu_event or novu_events_bulk_create, with your payload schema auto-passed as variables.
Bi-directional subscriber sync
Continuously provision and update Novu Subscribers from your user table — including email, phone, locale, and timezone — using create_a_novu_subscriber and update_a_novu_subscriber_by_id.
Channel credential manager for push and chat
Expose a UI where your end-users register APNS/FCM device tokens or Slack/Teams webhooks, persisted via update_a_novu_subscriber_credential_by_id so Novu can route to the right destination.
Native in-app notification inbox
Mirror Novu's notification center inside your own product UI by reading list_all_novu_subscriber_notifications, marking items seen, and firing CTA handlers via update_a_novu_notification_action_by_id.
Dynamic topic-based broadcasts
Map your internal groups (tenants, cohorts, incident channels) to Novu Topics with create_a_novu_topic and create_a_novu_topic_subscription, then broadcast to thousands of subscribers with a single trigger.
Inbound email routing for AI agents
Let customers verify a domain and configure inbound routes via create_a_novu_domain, novu_domains_verify, and create_a_novu_inbound_route so replies are parsed and delivered to your agent webhook.
SuperAI
Novu AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
create_a_novu_delivery_provider_activity_event
Track activity and engagement events for a specific novu delivery provider by forwarding an inbound webhook payload. This endpoint accepts provider-generated event data (such as delivery status and engagement notifications) and forwards it to novu for processing. Required: environment_id, integration_id.
create_a_novu_channel_connection
Create a new novu channel connection for a resource and integration. Only one connection is allowed per resource and integration combination. Returns: identifier.
delete_a_novu_channel_connection_by_id
Delete a specific novu channel connection by its unique identifier. Returns an empty 204 response on success. Required: id.
list_all_novu_channel_connections
List all novu channel connections for a resource. Returns: identifier.
get_single_novu_channel_connection_by_id
Retrieve a specific novu channel connection by its unique identifier. Returns: identifier. Required: id.
update_a_novu_channel_connection_by_id
Update an existing novu channel connection by its unique identifier. Returns: identifier. Required: id.
create_a_novu_channel_endpoint
Create a new channel endpoint in Novu for a resource. Returns: identifier.
delete_a_novu_channel_endpoint_by_id
Delete a specific novu channel endpoint by id. Returns an empty 204 response on success. Required: id.
list_all_novu_channel_endpoints
List all novu channel endpoints for a resource. Returns: identifier.
get_single_novu_channel_endpoint_by_id
Retrieve a specific novu channel endpoint by id. Returns: identifier. Required: id.
update_a_novu_channel_endpoint_by_id
Update an existing novu channel endpoint by id. Returns: identifier. Required: id.
create_a_novu_context
Create a new novu context with the specified type, id, and optional data. Returns the created context including its type, id, and data. Required: type, id. Returns 409 if a context with the same type and id already exists.
delete_a_novu_context_by_id
Delete a novu context by id. Returns an empty 204 response on success. Required: id. Returns 404 if the context does not exist.
list_all_novu_contexts
List all novu contexts, optionally filtered by type, id, or key pattern. Returns: type, id, data for each matching context. Filters type, id, and search are all optional.
get_single_novu_context_by_id
Retrieve a specific novu context by id. Returns: type, id, data. Required: id. Returns 404 if the context does not exist.
update_a_novu_context_by_id
Update the data of an existing novu context. Only the data field is modified; all other context fields remain unchanged. Returns: type, id, data. Required: id, data. Returns 404 if the context does not exist.
create_a_novu_domain
Register a new inbound-email domain in novu. Returns: id, name, records, data — including the DNS records that must be added at the DNS provider before the domain can receive mail. Required: name.
delete_a_novu_domain_by_id
Delete a novu domain by id, cascading deletion to all associated routes. Inbound mail for the domain stops being processed immediately. Returns an empty 204 response on success. Required: id.
list_all_novu_domains
List inbound-email domains in novu for the current environment. Supports a name-contains filter. Returns: id, name, records, data for each domain.
get_single_novu_domain_by_id
Retrieve a novu domain by id. Returns the domain configuration and DNS records that must be in place, including id, name, records, and data. To refresh the verification status call verify instead. Required: id.
update_a_novu_domain_by_id
Update optional fields of a novu domain by id. Providing data replaces the entire metadata object; omit it to leave metadata unchanged. Returns: id, name, records, data. Required: id.
novu_domains_verify
Verify the DNS configuration of a novu domain by id, refreshing its verification status against live DNS. Returns: id, name, records, data. Required: id.
novu_domains_diagnose
Diagnose DNS configuration issues for a novu domain by id. Returns: id, name, records, data. Required: id.
novu_domains_get_auto_configure
Get the auto-configuration state for a novu domain by id. Returns: id, name, records, data. Required: id.
novu_domains_start_auto_configure
Start the auto-configuration process for a novu domain by id. Returns: id, name, records, data. Required: id.
create_a_novu_route
Create a route in novu that forwards inbound mail addressed to a specific email on a domain to either a webhook or an agent. Returns: id, address, domain. Required: domain, address. Each address on a domain may have only one route.
delete_a_novu_route_by_id
Delete a novu route for a specific address on a domain. Removes the route so inbound mail to that address is no longer processed. Returns an empty 204 response on success. Required: domain, id.
update_a_novu_route_by_id
Update the destination of a novu route for a specific address on a domain. The address identity cannot be changed; delete and recreate the route to rename it. Returns: id, address, domain. Required: domain, id.
list_all_novu_domain_routes
List all routes attached to a Novu domain. Returns: id, address, domain. Required: domain.
get_single_novu_domain_route_by_id
Retrieve a single Novu domain route by its address. Returns: id, address, domain. Use `*` as the id to fetch the wildcard route for the domain. Required: domain, id.
create_a_novu_inbound_route
Test a novu inbound route by sending a synthetic email through the same production delivery path (outbound webhook for webhook routes, signed HTTP for agent routes). Use dryRun to preview the payload without actually delivering. Returns delivery results that vary by route type and cannot be enumerated statically. Required: domain, address.
create_a_novu_environment
Create a new novu environment for the current organization. Returns: _id, name, identifier, color, apiKeys. Required: name.
delete_a_novu_environment_by_id
Delete a novu environment by id. This action is irreversible and removes the environment and all associated data. Returns an empty 204 response on success. Required: id.
list_all_novu_environments
List all novu environments for the current organization, including each environment's configuration, API keys (if accessible), and metadata. Returns: _id, name, identifier, color, apiKeys.
update_a_novu_environment_by_id
Update a novu environment by id. Modify the environment's name, identifier, color, and other configuration settings. Returns: _id, name, identifier, color, apiKeys. Required: id.
novu_environments_compare
Compare workflows and other resources between two novu environments, returning detailed diff information. Returns: additions, modifications, deletions. Required: id (targetEnvironmentId).
novu_environments_publish
Publish changes from a novu environment, promoting updates to the target environment. Returns an empty 204 response on success. Required: id.
list_all_novu_environment_tags
List all unique tags used in workflows within the current novu environment. These tags can be used for filtering workflows. Returns: name.
create_a_novu_environment_variable
Create a new environment variable in novu for the specified environment. Keys must be uppercase letters and underscores only (e.g. BASE_URL); secret variables are encrypted at rest and masked in responses. Returns: key, value, isSecret, _environmentId. Required: environment_id, key.
delete_a_novu_environment_variable_by_id
Delete a novu environment variable by key from the specified environment. Returns an empty 204 response on success. Required: environment_id, id.
get_single_novu_environment_variable_by_id
Get usage information for a novu environment variable, showing where the variable is referenced within the specified environment. Returns: key. Required: environment_id, id.
list_all_novu_environment_variables
List all environment variables for a novu environment. Secret values are masked in responses. Returns: key, value, isSecret, _environmentId. Required: environment_id.
update_a_novu_environment_variable_by_id
Update an existing novu environment variable. Per-environment values provided in `values` are merged by _environmentId; environments absent from the request keep their stored value. Submitting the masked secret placeholder as a value is rejected. Returns: key, value, isSecret, _environmentId. Required: environment_id, id.
create_a_novu_event
Trigger a notification workflow event in novu for one or more specified subscribers. Returns: data object containing acknowledged, status, and transactionId. Required: name, to.
novu_events_bulk_create
Bulk trigger multiple notification workflow events in novu in a single request, avoiding repeated API calls. Returns: data array of trigger results each with acknowledged, status, and transactionId. Required: events. Limited to 100 events per request.
delete_a_novu_event_by_id
Cancel a previously triggered novu workflow event by its transactionId, stopping any active or pending steps such as digests or delays. Returns an empty 204 response on success. Required: id.
novu_events_broadcast
Trigger a broadcast notification workflow event in novu to all existing subscribers at once, useful for announcements and global notifications. Returns: data object containing acknowledged, status, and transactionId. Required: name.
update_a_novu_integration_by_id
Update an existing Novu integration by id. Returns the updated integration object including _id, providerId, channel, credentials, active, and primary. Required: id.
create_a_novu_integration
Create a new Novu integration for the current environment. Returns the created integration object including _id, providerId, channel, credentials, active, and primary. Required: providerId, channel, credentials.
delete_a_novu_integration_by_id
Delete a Novu integration by id. This action is irreversible. Returns an empty 204 response on success. Required: id.
list_all_novu_integrations
List all Novu integrations for the organization. Returns an array of integration objects, each including _id, providerId, channel, credentials, active, and primary.
novu_integrations_list_active
List all active Novu integrations for the organization. Returns an array of active integration objects, each including _id, providerId, channel, credentials, active, and primary.
novu_integrations_set_primary
Set a Novu integration as the primary integration for its channel by id. Returns the updated integration object including _id, providerId, channel, active, and primary. Required: id.
novu_integrations_oauth_url
Generate an OAuth authorization URL for a Novu integration. Returns: url. Required: provider_id, environment_id.
create_a_novu_layout
Create a new layout in novu. Returns: _id, name, identifier, content, isDefault, createdAt, updatedAt. Required: name, content.
delete_a_novu_layout_by_id
Delete a novu layout by id. Returns an empty 204 response on success. Required: id.
get_single_novu_layout_by_id
Get a single novu layout by id. Returns: _id, name, identifier, content, isDefault, createdAt, updatedAt. Required: id.
list_all_novu_layouts
List all novu layouts with optional filtering. Returns: _id, name, identifier, content, isDefault, createdAt, updatedAt per layout.
update_a_novu_layout_by_id
Update an existing novu layout by id. Returns: _id, name, identifier, content, isDefault, updatedAt. Required: id.
novu_layouts_duplicate
Duplicate an existing novu layout by id, creating a new copy. Returns: _id, name, identifier, content, isDefault, createdAt. Required: id.
novu_layouts_generate_preview
Generate a rendered preview of a novu layout by id. Returns: content, subject. Required: id.
novu_layouts_get_usage
Retrieve workflow usage information for a novu layout by id, returning all workflows that reference the layout. Returns: workflows. Required: id.
delete_a_novu_message_by_id
Delete a novu message by id. This action is irreversible and cannot be undone. Returns an empty 204 response on success. Required: id.
list_all_novu_messages
List all messages for the current novu environment. Returns: _id, channel, transactionId, and _subscriberId per message. Supports optional filtering by channel, subscriberId, and transactionId.
novu_messages_bulk_delete
Delete all novu messages associated with a specific transaction by transaction_id. Returns an empty 204 response on success. Required: transaction_id.
list_all_novu_notifications
List all novu notification events for the current environment. Returns event records including _id, status, and transactionId. Supports optional filtering by channels, templates, emails, subscriberIds, transactionId, topicKey, severity, and contextKeys.
get_single_novu_notification_by_id
Retrieve a single novu notification event by its notificationId (MongoDB ObjectId). Returns event details including _id, status, and transactionId. Required: id.
novu_notifications_bulk_update
Archive all read in-app (inbox) notifications for a novu subscriber, with optional context-based filtering. Returns an empty 204 response on success. Required: subscriber_id.
delete_a_novu_notification_by_id
Permanently delete a specific novu in-app (inbox) notification by its notificationId. Returns an empty 204 response on success. Required: subscriber_id, id.
update_a_novu_notification_by_id
Mark a specific novu in-app (inbox) notification as read by its notificationId. Returns the updated notification including _id and read. Required: subscriber_id, id.
novu_notifications_mark_all_read
Mark all in-app (inbox) notifications as read for a novu subscriber. Returns an empty 204 response on success. Required: subscriber_id.
novu_notifications_mark_seen
Mark in-app (inbox) notifications as seen for a novu subscriber. Returns an empty 204 response on success. Required: subscriber_id.
get_single_novu_topic_subscriber_by_id
Check if a subscriber belongs to a specific novu topic. Returns the subscriber-topic membership details including externalSubscriberId and topicKey. Required: topic_key, id.
create_a_novu_topic
Create a new novu topic, or update an existing one if it already exists (upsert). Returns: key, name. Required: key, name. Pass failIfExists=true to return an error instead of updating an existing topic.
delete_a_novu_topic_by_id
Delete a novu topic by its unique key identifier (topicKey). This action is irreversible and removes all subscriptions to the topic. Returns an empty 204 response on success. Required: id.
list_all_novu_topics
List all novu topics. Returns: key, name. Results can be filtered by key or name using the corresponding query parameters.
get_single_novu_topic_by_id
Retrieve a single novu topic by its unique key identifier (topicKey). Returns: key, name. Required: id.
update_a_novu_topic_by_id
Update a novu topic's name by its unique key identifier (topicKey). Returns: key, name. Required: id, name.
create_a_novu_topic_subscription
Create subscriptions in novu for one or more subscribers to a topic. If the topic does not exist, it will be created automatically. Returns: subscriberId, topicKey, name, preferences. Required: topic_key, subscriberIds.
delete_a_novu_topic_subscription_by_id
Delete subscriptions in novu for one or more subscribers from a topic. Returns an empty 204 response on success. Required: topic_key.
list_all_novu_topic_subscriptions
List all subscriptions for a novu topic. Returns subscription records including subscriberId, topicKey, name, and preferences. Required: topic_key.
get_single_novu_topic_subscription_by_id
Retrieve a single novu topic subscription by its identifier. Returns: subscriberId, topicKey, name, preferences. Required: topic_key, id.
update_a_novu_topic_subscription_by_id
Update the name and preferences of a novu topic subscription by its identifier. Returns: subscriberId, topicKey, name, preferences. Required: topic_key, id.
update_a_novu_subscriber_notification_by_id
Mark a specific novu subscriber message as read by its unique message id. Returns the updated message object including _id, read, seen, channel, templateIdentifier, content, and createdAt. Required: subscriber_id, id.
novu_subscriber_notifications_bulk_update
Bulk mark novu subscriber messages with a specified read or seen status. Returns updated message objects including _id, read, seen, channel, templateIdentifier, content, and createdAt. Required: subscriber_id, status, messageId.
novu_subscriber_notifications_bulk_delete
Permanently delete novu subscriber messages, optionally filtered by feed. Returns an empty 204 response on success. Required: subscriber_id.
list_all_novu_subscriber_notifications
List in-app notifications from the feed of a novu subscriber. Returns notification objects including _id, read, seen, channel, templateIdentifier, content, and createdAt. Required: subscriber_id.
novu_subscriber_notifications_count
Retrieve the count of unseen in-app notifications for a novu subscriber. Returns: data. Required: subscriber_id.
novu_subscribers_bulk_create
Bulk create up to 500 novu subscribers in a single request. Existing subscribers with matching subscriberIds will be updated. Returns: updated, created, failed. Required: subscribers. Maximum 500 subscribers per request.
create_a_novu_subscriber
Create a new novu subscriber, or update an existing one if the subscriberId already exists. Returns: subscriberId, firstName, lastName, email, phone, avatar, locale, data, channels, isOnline, createdAt. Required: subscriberId.
delete_a_novu_subscriber_by_id
Delete a novu subscriber and all their associated messages, preferences, and topic subscriptions. Returns an empty 204 response on success. Required: id.
get_single_novu_subscriber_by_id
Retrieve a single novu subscriber by subscriberId. Returns: subscriberId, firstName, lastName, email, phone, avatar, locale, data, channels, isOnline, lastOnlineAt, createdAt, updatedAt. Required: id.
list_all_novu_subscribers
Search novu subscribers by email, phone, subscriberId, or name. Returns per item: subscriberId, firstName, lastName, email, phone, isOnline, createdAt, updatedAt. Search is case sensitive.
update_a_novu_subscriber_by_id
Update an existing novu subscriber's attributes by subscriberId. Returns: subscriberId, firstName, lastName, email, phone, avatar, locale, data, channels, isOnline, updatedAt. Required: id.
novu_subscribers_patch_online_status
Update the online presence status of a novu subscriber. Returns: subscriberId, isOnline, lastOnlineAt, firstName, lastName, email, updatedAt. Required: id, isOnline.
novu_subscriber_preferences_bulk_update
Bulk update channel preferences for a novu subscriber across multiple workflows in a single request. Returns: level, enabled, channels, workflow. Required: subscriber_id.
update_a_novu_subscriber_preference_by_id
Update channel preferences for a novu subscriber. Provide workflowId to update a specific workflow's preferences; omit it to update global preferences instead. Returns: level, enabled, channels, workflow. Required: subscriber_id.
list_all_novu_subscriber_preferences
Retrieve all channel preferences for a novu subscriber, including global preferences and per-workflow preferences across all five channels (email, sms, in_app, chat, push). Returns: level, enabled, channels, workflow. Required: subscriber_id.
delete_a_novu_subscriber_credential_by_id
Delete provider credentials for a novu subscriber by providerId. This action is irreversible and permanently removes all credentials stored for the specified provider (e.g. slack, fcm) on that subscriber. Returns an empty 204 response on success. Required: subscriber_id, id.
update_a_novu_subscriber_credential_by_id
Update or fully replace provider credentials for a novu subscriber, such as Slack webhooks or FCM device tokens. Creates deviceTokens or replaces existing ones. Returns the updated subscriber object including _id, subscriberId, channels, createdAt, and updatedAt. Required: subscriber_id, providerId.
novu_subscriber_credentials_partial_update
Partially update provider credentials for a novu subscriber without replacing the entire credential record. Only the fields supplied in the request body are modified. Returns the updated subscriber object including _id, subscriberId, channels, createdAt, and updatedAt. Required: subscriber_id, providerId.
list_all_novu_subscriber_subscriptions
List topic subscriptions for a novu subscriber, returning individual subscription records. Returns: topicKey, topicName, subscribed. Required: subscriber_id.
update_a_novu_subscriber_message_by_id
Mark all novu in-app (inbox) notifications for a given subscriber as read, unread, seen, or unseen. Returns an empty 204 response on success. Required:id, markAs.
update_a_novu_notification_action_by_id
Update the action status of an in-app (inbox) notification in novu for a specific subscriber and message. The action type id must be either 'primary' or 'secondary'. Returns: _id, status, channel. Required: subscriber_id, message_id, id, status.
create_a_novu_translation
Create (or update if it already exists) a Novu translation for a specific resource and locale. Returns: resourceType, resourceId, locale, translations. Required: resourceType, resourceId, locale, translations.
delete_a_novu_translation_by_id
Delete a specific Novu translation by resource type, resource ID, and locale. Returns an empty 204 response on success. Required: resource_type, resource_id, id (locale).
get_single_novu_translation_by_id
Retrieve a specific Novu translation by resource type, resource ID, and locale. Returns: resourceType, resourceId, locale, translations. Required: resource_type, resource_id, id (locale).
novu_translations_import_master
Import master translation JSON into Novu to define the reference locale's key-value translation pairs. Returns: translations. Required: translations.
novu_translations_get_master
Retrieve the Novu master translation JSON that defines the reference locale's key-value pairs used as the translation source. Returns: translations.
novu_translations_upload_master
Upload a master translation JSON file to Novu via multipart form to set the reference locale translations. Returns an empty 204 response on success. Required: file.
novu_translations_upload
Upload a translation file to Novu via multipart form to bulk-import locale translations. Returns an empty 204 response on success. Required: file.
delete_a_novu_translation_group_by_id
Delete a novu translation group and all its associated translations by id. Returns an empty 204 response on success. Required: id.
get_single_novu_translation_group_by_id
Retrieve a single novu translation group by id. Returns: id, resourceType, resourceId. The resourceType indicates the associated novu resource kind (workflow or layout) and resourceId is the corresponding resource identifier. Required: id.
create_a_novu_workflow
Create a new workflow in the Novu Cloud environment. Returns the created workflow object including workflowId, name, active, status, steps, createdAt, and updatedAt. Required: name.
delete_a_novu_workflow_by_id
Delete a Novu workflow by id. Returns an empty 204 response on success. Required: id.
list_all_novu_workflows
List all workflows in the Novu Cloud environment with optional filtering. Returns an array of workflow objects each including workflowId, name, active, status, steps, createdAt, and updatedAt.
get_single_novu_workflow_by_id
Retrieve a specific Novu workflow by id. Returns the full workflow object including workflowId, name, description, active, status, origin, steps, preferences, createdAt, and updatedAt. Required: id.
update_a_novu_workflow_by_id
Update an existing Novu workflow by id. Returns the updated workflow object including workflowId, name, active, status, steps, createdAt, and updatedAt. Required: id.
novu_workflows_sync
Synchronize a Novu workflow to a target environment by id. Returns the synced workflow object including workflowId, name, active, status, origin, and updatedAt. Required: id, targetEnvironmentId.
create_a_novu_workflow_step
Generate a preview for a specific step in a novu workflow. Returns: result (the rendered step preview output). Required: workflow_id, step_id.
get_single_novu_workflow_step_by_id
Retrieve data for a specific step in a novu workflow by step id. Returns: id, attributes (step-type-specific configuration). Required: workflow_id, id.
Why Truto
Why use Truto’s MCP server for Novu
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 500+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with Novu in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Novu account
Use Truto’s frontend SDK to connect your customer’s Novu account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Novu
Truto’s Proxy API is a 1-to-1 mapping of the Novu API. You call us, we call Novu, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Novu’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Novu on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
How do end-users authenticate their Novu workspace?
Novu uses API key authentication scoped to an environment (Development or Production). Through Truto, your end-users provide their Novu API key during the connection flow, and Truto stores and injects it on every request — your code never handles the credential directly.
Can we trigger workflows in bulk or only one at a time?
Both. Use create_a_novu_event for a single subscriber trigger and novu_events_bulk_create for batched triggers. For mass fan-out to a defined audience, use novu_events_broadcast in combination with Topics.
Does Truto support managing Novu Environments (Dev vs. Prod)?
Yes. Tools like list_all_novu_environments, novu_environments_compare, and novu_environments_publish are available, so you can let customers configure which environment your integration writes to and promote changes between them.
Can we update an end-user's push tokens or Slack webhooks via the integration?
Yes. Use update_a_novu_subscriber_credential_by_id or novu_subscriber_credentials_partial_update to attach provider-specific credentials (FCM, APNS, Slack, Discord, etc.) to a Subscriber. This is how Novu knows where to deliver push and chat messages.
Is the in-app notification inbox accessible via API?
Yes. list_all_novu_subscriber_notifications returns a subscriber's feed, novu_subscriber_notifications_count returns unseen/unread counts, and update_a_novu_notification_action_by_id lets you fire CTA buttons — enough to fully replicate Novu's inbox inside your own UI.
Can we support inbound email for AI agent use cases?
Yes. You can programmatically create and verify domains (create_a_novu_domain, novu_domains_verify), then configure inbound routes via create_a_novu_inbound_route and create_a_novu_route to forward parsed inbound messages to your webhook endpoint.
Does Truto handle pagination and rate limits for Novu?
Yes. Truto normalizes pagination across list endpoints (subscribers, notifications, topics, workflows) and handles Novu's rate limits with built-in retry and backoff, so your integration code stays simple regardless of customer scale.
From the Blog
Novu integration guides
Deep dives, architecture guides, and practical tutorials for building Novu integrations.
Novu
Get Novu integrated into your app
Our team understands what it takes to make a Novu integration successful. A short, crisp 30 minute call with folks who understand the problem.