> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Push frequency capping

> Push frequency capping limits how many push notifications a single user can receive in a rolling minute, hour, day, or week window — useful when multiple teams, Journeys, or automated triggers risk over-messaging the same user.

Frequency capping limits how many push notifications a single user can receive in a rolling time window (per minute, hour, day, or week). Use it to prevent over-messaging when multiple teams, Journeys, or automated triggers send to the same user.

<Note>
  Frequency capping is available on select [paid plans](https://onesignal.com/pricing).
</Note>

***

## How frequency capping works

Each delivered push "ages out" of the user's rolling window when the configured time period has elapsed since that push was sent. Once the user has received the maximum number of notifications inside the window, OneSignal drops any additional sends until older notifications age out.

**Example:** Frequency cap of **3 notifications per 24 hours**.

| Time            | Action                                | Notifications in window | Delivered? |
| --------------- | ------------------------------------- | ----------------------- | ---------- |
| Day 1, 9:00 AM  | Send Notification 1                   | 1                       | Yes        |
| Day 1, 1:00 PM  | Send Notification 2                   | 2                       | Yes        |
| Day 1, 5:00 PM  | Send Notification 3                   | 3                       | Yes        |
| Day 2, 8:00 AM  | Send Notification 4                   | 3 (cap reached)         | No         |
| Day 2, 9:00 AM  | Notification 1 ages out (24h elapsed) | 2                       | —          |
| Day 2, 9:01 AM  | Send Notification 5                   | 3                       | Yes        |
| Day 2, 10:00 AM | Send Notification 6                   | 3 (cap reached)         | No         |
| Day 2, 11:00 AM | Send Notification 7                   | 3 (cap reached)         | No         |
| Day 2, 1:00 PM  | Notification 2 ages out (24h elapsed) | 2                       | —          |
| Day 2, 2:00 PM  | Send Notification 8                   | 3                       | Yes        |

Notifications 4, 6, and 7 are dropped because the user's rolling 24-hour window already holds three notifications at the moment each is sent.

<Note>
  "Per day" refers to a rolling 24-hour window, not a calendar day. If a user receives a message at 6:45 PM, that notification stays in their window until 6:45 PM the next day. Sends in that interval count toward the cap and may be dropped.
</Note>

***

## When to use frequency capping

Frequency capping is most useful when messaging volume can grow without coordination:

* **Complex campaign environments** — large organizations with multiple teams or overlapping marketing campaigns.
* **High-frequency triggers** — systems that send notifications from frequent events (stock price updates, automated news alerts, etc.).

***

## What gets capped

* Frequency capping applies to **push notifications only**. It does not apply to email, SMS, or in-app messages.
* It applies to all push sources — Create notification API, [Journeys](./journeys-overview), and manual dashboard sends.
* Messages blocked by the cap are **dropped**, not queued. They are never retried.

For example, with a cap of 2 per day, if a user has already received two API pushes, a Journey push later that day is dropped unless the sender explicitly overrides the cap (see [Override frequency capping](#override-frequency-capping)).

***

## How to enable frequency capping

Configure frequency capping at the app level from the OneSignal dashboard.

<Steps>
  <Step>
    Navigate to **Settings > Push & In-app > Frequency Capping**.
  </Step>

  <Step>
    Set the maximum number of messages a user can receive in your chosen time window (per minute, hour, day, or week).

    <Frame caption="Notifications can be capped at any number per any time frame.">
      <img src="https://mintcdn.com/onesignal/9_Q1FZLh6C0BFLq-/images/docs/ca59ff47b3c7bd4fe834d818299d7365957de85d86b1b5577b111dcbbef4bfdd-Screenshot_2025-04-16_at_12.07.24_PM.png?fit=max&auto=format&n=9_Q1FZLh6C0BFLq-&q=85&s=d2d6528f4b6cc767fca4c20eef01dfe1" alt="Frequency capping settings in the OneSignal dashboard, with fields for maximum messages and a selectable time window." width="2394" height="1520" data-path="images/docs/ca59ff47b3c7bd4fe834d818299d7365957de85d86b1b5577b111dcbbef4bfdd-Screenshot_2025-04-16_at_12.07.24_PM.png" />
    </Frame>
  </Step>
</Steps>

***

## Override frequency capping

Override frequency capping on a per-message basis when a send must reach the user even if the cap is reached.

<Tabs>
  <Tab title="Dashboard">
    In the message's **Delivery Schedule**, select **Override frequency capping settings**.

    <Frame>
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81e1bd0-Screenshot_2022-11-16_at_3.14.52_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=876b3661b21dbdcb5ec1c00920b2912d" alt="Delivery Schedule section of the push composer with the 'Override frequency capping settings' option selected." width="2102" height="642" data-path="images/docs/81e1bd0-Screenshot_2022-11-16_at_3.14.52_PM.png" />
    </Frame>
  </Tab>

  <Tab title="API">
    Using the [Create push notification API](/reference/push-notification), set `enable_frequency_cap` to `false` to bypass the cap for that message. Omit it or set to `true` to apply normal capping.

    ```json theme={null}
    {
      "enable_frequency_cap": false
    }
    ```
  </Tab>
</Tabs>

### Notes on overriding

* Frequency capping must be enabled in the dashboard for this override to have any effect.
* Overridden messages still **count toward the cap**, so they affect whether future messages are delivered to the same user.

***

## Reporting

When frequency capping is enabled, you can monitor its impact in two places:

* **Dashboard message reports** — each message's delivery stats show the number of users skipped because of the cap.
* **[View message API](/reference/view-message)** — returns the same per-message capped and overridden counts.

Each message has one of two related statuses:

* **Capped** — frequency capping was applied; the response includes the number of users skipped.
* **Overridden** — frequency capping is enabled for the app but was overridden for this message.

***

## FAQ

### What time windows are supported?

Per minute, per hour, per day (rolling 24 hours), and per week (rolling 7 days). All windows are rolling — they don't reset on calendar boundaries.

### Does frequency capping apply to email, SMS, or in-app messages?

No. The cap configured under **Settings > Push & In-app > Frequency Capping** only limits push notifications. Email, SMS, and in-app messages have their own delivery controls and aren't affected.

### What happens to messages that exceed the cap?

They are dropped, not queued. A push that would put the user past the cap is silently skipped for that subscription and never retried.

### Do overridden messages count toward future caps?

Yes. Setting `enable_frequency_cap` to `false` (or selecting the dashboard override) lets that message reach the user, but it still counts in the rolling window and can push later messages past the cap.

### Why is the parameter named `enable_frequency_cap` if I set it to `false` to deliver?

The parameter controls whether the cap **applies** to the message. Setting it to `false` means "do not apply the cap to this message" — the cap is disabled for that one send. The user-level cap configured in the dashboard remains active for every other send.

### Where can I see how many sends were capped?

In any message's delivery report (dashboard) or in the [View message API](/reference/view-message) response. Both surface the same per-message **Capped** and **Overridden** totals.

***

## Related pages

<Columns cols={2}>
  <Card title="Throttling" icon="gauge-high" href="./throttling">
    Smooth out the rate at which notifications go out across your audience — separate from per-user capping.
  </Card>

  <Card title="Journeys overview" icon="route" href="./journeys-overview">
    Multi-step automated messaging. Journey sends respect frequency capping unless they explicitly override it.
  </Card>

  <Card title="Create push notification" icon="paper-plane" href="/reference/push-notification">
    REST API for sending pushes. Set `enable_frequency_cap` to `false` to override the cap per message.
  </Card>

  <Card title="View message" icon="chart-simple" href="/reference/view-message">
    Retrieve per-message stats, including the number of users capped or overridden.
  </Card>
</Columns>
