---
title: Novu API Integration on Truto
slug: novu
category: Marketing Automation
canonical: "https://truto.one/integrations/detail/novu/"
---

# Novu API Integration on Truto



**Category:** Marketing Automation  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 121 tools for Novu that AI agents can call directly.

- **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.

## How it works

1. **Link your customer's Novu account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Novu.** The Proxy API is a 1-to-1 mapping of the Novu API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **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

- **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.

## FAQs

### 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.

## Related reading

- [Connect Novu to Claude: Manage Subscriber Preferences and Global Layouts](https://truto.one/blog/connect-novu-to-claude-manage-subscriber-preferences-and-global-layouts/) — Learn how to connect Novu to Claude using a managed MCP server. Automate subscriber channel preferences, global layout changes, and environment promotions via AI.
