Retry policy at a glance
Channel and provider sends
When a channel step runs, Novu resolves the integration for that channel, renders the content, and makes a single call to the provider. There is no automatic retry, no backoff, and no ceiling, because there is no second attempt. If the provider call throws or returns no message identifier, Novu:- Records an
Unexpected provider errorexecution detail with a Failed status, including the raw provider response. - Emits a
messages.failedwebhook so your system can react. - Marks the step as failed in the Activity Feed.
- Continues to the next step in the workflow. See When a step fails.
429 Too Many Requests or a 503 Service Unavailable from a provider is handled the same way as a 400 Bad Request.
Per-channel details
- Push sends to every registered device token across the subscriber’s push integrations. If some tokens succeed and others fail, the step is recorded with a Warning status and the workflow continues. The step is only marked failed when every token fails.
- In-app (Inbox) does not call an external provider, so there is no provider send to retry. The message is stored in Novu and pushed to connected clients over websocket.
- Email Webhook is the one provider that retries internally. It re-posts to your configured webhook URL up to 3 times with a fixed 30 second delay between attempts before failing the step. This is provider-specific behavior, not the platform policy.
There is no automatic provider failover
Novu selects one integration for a channel before the send - the primary integration, or the one specified by payload in override. If that provider fails, Novu does not fall back to another configured integration for the same channel.Bridge endpoint calls
When a workflow is defined with Novu Framework, Novu calls your bridge endpoint to resolve step content. Unlike provider sends, these calls are retried:
Retries are triggered for HTTP
408, 429, 500, 503, 504, 521, 522, and 524, and for transient network errors such as ECONNREFUSED, ECONNRESET, ETIMEDOUT, and ENOTFOUND. Other responses, including most 4xx codes, are not retried. Each request has a 5 second timeout.
See Retry behavior for the full reference.
Outbound webhooks
Webhooks that Novu sends to your endpoints follow a separate, much longer schedule: 8 attempts over roughly 27.5 hours, starting immediately and backing off to a 10 hour ceiling. See Webhook retry schedule.When a step fails
A failed channel step does not stop the workflow. The failure is recorded and the next step is queued and runs normally, so a failed email step is still followed by the SMS step after it. A failed action step - digest, delay, or throttle - stops the run. Every remaining step for that subscriber is canceled and shown as canceled in the Activity Feed, because those later steps depend on a result the action step never produced.FAQs
Why doesn't Novu retry a failed email or SMS send?
Why doesn't Novu retry a failed email or SMS send?
A provider rejection is usually deterministic - an invalid recipient, a rejected template, a suspended account, or exhausted credits - and retrying it produces the same result while delaying the rest of the workflow. Novu surfaces the provider response in the Activity Feed and through the
messages.failed webhook so you can decide what to do with the specific failure.Can I configure the number of retry attempts for a channel step?
Can I configure the number of retry attempts for a channel step?
No. Attempt counts and backoff are fixed at each layer and are not configurable per workflow, step, or integration.
Does a provider rate limit response get retried?
Does a provider rate limit response get retried?
No. A
429 from a provider fails the step like any other provider error. Use the throttle step to limit how often a workflow sends to a subscriber, and check your provider’s own sending limits.Is there a dead-letter queue I can inspect?
Is there a dead-letter queue I can inspect?
No. Failed steps are recorded in the Activity Feed with the provider error attached, but they are not moved to a queue you can inspect or re-drive. Treat the Activity Feed and the
messages.failed webhook as the record of failed deliveries.What happens if my provider accepts the message but never delivers it?
What happens if my provider accepts the message but never delivers it?
Novu marks the step as successful once the provider accepts the request. Downstream delivery status, such as a bounce or a carrier rejection, arrives through provider delivery receipts where supported and is reflected on the message. It does not trigger a retry.