> This page is part of the [Customer.io documentation](https://docs-customerio.netlify.app). For the complete index, see [llms.txt](https://docs-customerio.netlify.app/llms.txt).
> Last updated: July 20, 2026

# Set up message frequency limits

You can add one or more message limits for your workspace, and then decide which workflows and messages count towards your limits.

By default, limits don’t apply to any of your messages.

To learn more about message frequency limits, which message channels are supported, and how your workflows calculate message limit time frames, go to [Overview: Message frequency limits](/messaging/send/message-limits/overview/).

This video shows you how to set up a message limit and apply limits to workflows, like automations.

## 1\. Set a workspace message limit

1.  Go to [*\> Workspace Settings*](https://fly.customer.io/workspaces/last/settings/actions/message_frequency_limits) and select **Message frequency limits**.
    
2.  Click **Create limit**.
    
3.  Set limits [per channel](#add-a-channel-limit) or [across channels](#add-a-shared-limit). The maximum time frame is 31 days.
    
    By default, you see channels set up in your workspace. To remove a channel limit, click .
    
4.  [Set a **retry window**](#add-a-retry-window) if you want automations or API-triggered broadcasts to automatically retry messages after a profile reaches the message limit. The maximum window is 48 hours.
    
    Automatic retries do not apply to one-time sends or transactional messages.
    
5.  Click **Create limit**.
    

By default, no workflow counts towards a limit, and your messages inherit this setting from your workflow. So your next step is to [count a workflow towards a message limit](#count-a-workflow-towards-a-message-limit).

### Add a channel limit

When you create a new message limit, you see a list of available channels. Either modify the default settings or remove a channel by clicking .

To add a channel back, click **Add channel limit**.

[![message-channel-limit.png](https://docs.customer.io/images/message-channel-limit.png)](#2826dbd5dea5b99d7e30c25a4ac2d779-lightbox)

Enter a message limit and time frame for each channel.

[Learn more about which message channels you can limit](/messaging/send/message-limits/overview/#limits-dont-apply).

### Add a shared limit

If you want to count multiple channels towards the same limit, click **Add a shared limit**.

[![message-channel-limit-2.png](https://docs.customer.io/images/message-channel-limit-2.png)](#d861f35becf8f46a2fabbd466bcfa279-lightbox)

Then add each channel and enter the shared message limit and time frame.

You can combine individual channel and shared limits to meet a total capacity too:

*   If you had a shared limit of 3 emails and SMS per week and an individual channel limit of 1 push notification per week, that would mean a profile could receive up to 3 emails and SMS and up to 1 push notification, which means no more than 4 messages total per week.
    
*   If you had a shared limit of 3 emails and SMS per week and an individual channel limit of 1 email per week, then profiles would receive up to 3 messages per week and no more than 1 email.
    
    [![individual-and-shared-limit.png](https://docs.customer.io/images/individual-and-shared-limit.png)](#7f6140db427483bd7180a9555aa0e164-lightbox)
    

### Add a retry window

When you set up up a message limit, you can turn on a retry window. A retry window starts when your message hits the message limit—it’s attempted, but blocked. You can set the length of the window—up to 48 hours.

For automatic retries to work reliably, set your retry window to at least as long as your message limit timeframe.

[![shared-retry-window.png](https://docs.customer.io/images/shared-retry-window.png)](#3eb6e138b697b04bba5acec03c34ba60-lightbox)

Learn more about [how we calculate retry windows and retry messages](/messaging/send/message-limits/overview/#understand-automatic-retries). You can find [best practices](#best-practices-for-message-limits), like how to think about limit time frames vs retry windows, below.

## 2\. Count a workflow towards a message limit

After you create a message limit, you have to assign it to the workflows you want to apply to the limit. You can set the limit on automations, API-triggered broadcasts, one-time sends, and transactional messages, and the limit automatically applies to messages in the workflow. You can also apply (or remove) the limit for individual messages within workflows.

### Automations & API-triggered broadcasts

1.  Open your workflow.
2.  Click and choose **Message settings**.
3.  Under *Message frequency limit*, select your limit.
    
    [![message-limit-campaign.png](https://docs.customer.io/images/message-limit-campaign.png)](#50b14263220d96f5697872d4a7940036-lightbox)
    
4.  Decide if you want to enable *Auto-retry messages* for the workflow. By default, retries are off.

#### Change the message limit for a single message

By default, messages within an automation or API-triggered broadcast respect the message limit set for the workflow. You can change the setting for individual messages to follow a different message limit or ignore the workflow’s setting.

1.  Click your message block—Email, SMS, Push notification, or Send and receive data (for webhooks).
2.  Select *Settings*.
3.  Under *Message frequency limit*, select your limit.
4.  Decide if you want to enable *Auto-retry settings* for the message. By default, retries are off.

### Broadcasts: One-time sends

1.  On step 1 of a one-time send, define your recipients to reveal message sending options.
2.  Under *Sending options*, select your limit.

[![message-limit-newsletter.png](https://docs.customer.io/images/message-limit-newsletter.png)](#bd26a761ca262bb42374a15f2df5f538-lightbox)

You can’t set up one-time sends to automatically retry, but you can [manually retry them](/messaging/send/message-limits/review-message-limits/#manually-retry-messages-after-going-over-the-limit).

### Transactional messages

From *Configure settings*, enable the toggle **Assign message frequency limit?** and choose your limit.

[![message-limit-transac.png](https://docs.customer.io/images/message-limit-transac.png)](#2e62623cf3d87f8f9ded807be7030d2a-lightbox)

You can’t set up transactional messages to automatically retry, but you can [manually retry them](/messaging/send/message-limits/review-message-limits/#manually-retry-messages-after-going-over-the-limit).

## Change a workspace message limit in use

Changes to your message limit and retry settings take effect within minutes, but until then, your workspace continues to respect the limit and retry settings you had in place.

Learn more about how changing live settings impacts your workspace below.

### Delete a workspace message limit

Deleting a message limit in your workspace settings means that any workflow or message that used it no longer counts towards that message limit.

For instance, if someone reached your message limit of two emails per day, and you delete that message limit from workspace settings, that profile can start receiving more than two emails that day from workflows that used the deleted limit.

### Disable auto-retry

Changes to auto-retry settings cascade down across the workflows and messages they apply to. Any scheduled attempts finish retrying, but further retries are cancelled.

#### In workspace settings

After you turn off auto-retry for a message limit in workspace settings, your workspace finishes scheduled retries across the workflows the limit applied to. If these last attempts fail, your workspace stops retrying the messages originally blocked by the limit.

Once the auto-retry setting is off at the workspace level, you can’t assign a retry setting for the message limit in any workflow or message.

Disabling auto-retry on the message limit in workspace settings also disables the auto-retry setting for any workflow or message set to “Use message frequency limit settings”.

Disabling this setting **does not** turn off custom retry windows on workflows or messages. For example, if you turn off a 24-hr retry window for a message limit, but an automation used the limit and a custom retry window of 12 hours, then that custom retry window on the automation remains active.

#### In a workflow

After you turn off auto-retry for a message limit in a workflow (automation, API-triggered broadcast, one-time send, or transaction message), your workspace finishes scheduled retries from that workflow. If these last attempts fail, your workspace stops retrying the messages blocked by the limit.

#### In a message

After you turn off auto-retry for a message limit on a message (in an automation or API-triggered broadcast), your workspace finishes scheduled retries for this message. If these last attempts fail, your workspace stops retrying this message.

## Best practices for retry windows

### Set your retry window to the length of your limit time frame or longer

**For automatic retries to work reliably, set your retry window to at least as long as your message limit timeframe.** If the retry window is shorter than the limit time frame, retries won’t succeed as often as you may want.

For example, imagine your automation message limit is two emails per 24 hours and your retry window is 12 hours:

*   If your workspace retries an attempted message in the first 12 hours after the oldest counted email, the limit won’t reset before the retry window closes. Your workspace marks the attempted message as *Undeliverable* right away and does not retry it.
*   If your workspace retries an attempted message between 12 and 24 hours after the oldest counted email, the limit resets before the retry window closes. So your workspace can send the message successfully about 24 hours after the oldest counted email.

### Account for timing edge cases with automatic retries

Your workspace compares message delivery timestamps down to the second. The exact time at which we process deliveries can change based on fluctuations in the number of profiles in your automation, the number of active profiles in your workspace, current system load, and more.

To account for this timing fluctuation, you can set up automatic retries on automations and API-triggered broadcasts.

However, you can’t set up automatic retries on one-time sends or transactional messages. So if you run into undeliverable messages due to fluctuations in timing around the message limit, consider [manually resending those messages](/messaging/send/message-limits/review-message-limits/#manually-retry-messages-after-going-over-the-limit).

### Prevent retries on messages from an automation a profile exited

When you enable auto-retry, your workspace automatically retries messages that were blocked due to the message limit, even if a profile exited the automation the message came from.

You can’t prevent this behavior entirely, but you can turn off auto-retry to prevent fewer retries from being sent. Learn about [disabling auto-retries](#disable-auto-retry).

*   *   [1\. Set a workspace message limit](#set-a-workspace-message-limit)
        *   [Add a channel limit](#add-a-channel-limit)
        *   [Add a shared limit](#add-a-shared-limit)
        *   [Add a retry window](#add-a-retry-window)
    *   [2\. Count a workflow towards a message limit](#count-a-workflow-towards-a-message-limit)
        *   [Automations & API-triggered broadcasts](#automations--api-triggered-broadcasts)
            *   [Change the message limit for a single message](#change-the-message-limit-for-a-single-message)
        *   [Broadcasts: One-time sends](#one-time-sends)
        *   [Transactional messages](#transactional-messages)
    *   [Change a workspace message limit in use](#change-a-workspace-message-limit-in-use)
        *   [Delete a workspace message limit](#delete-a-workspace-message-limit)
        *   [Disable auto-retry](#disable-auto-retry)
            *   [In workspace settings](#in-workspace-settings)
            *   [In a workflow](#in-a-workflow)
            *   [In a message](#in-a-message)
    *   [Best practices for retry windows](#best-practices-for-message-limits)
        *   [Set your retry window to the length of your limit time frame or longer](#set-your-retry-window-to-the-length-of-your-limit-time-frame-or-longer)
        *   [Account for timing edge cases with automatic retries](#account-for-timing-edge-cases-with-automatic-retries)
        *   [Prevent retries on messages from an automation a profile exited](#prevent-retries-on-messages-from-an-automation-a-profile-exited)

Copy page

Copy page [Download .md](/messaging/send/message-limits/set-up-message-limits.md)

Is this page helpful?

![](https://docs.customer.io/images/export-success.png) ![](https://docs.customer.io/images/export-failure.png)

# How can we make it better?

Close

Do you need help from Customer.io support?  No  
 Yes

What part of Customer.io do you need help with? 

How can we improve this page?

Email (optional):  Please provide a valid email address

 I am not a bot

 

We appreciate your feedback!

Our support team will contact you as soon as possible
