---
title: Throttle Step
description: Limit notification frequency for recipients
---

The throttle step limits how often a recipient can receive notifications from a notiflow. If a notification would exceed the throttle limit, it is dropped.

## Configuration

| Setting | Description |
|---------|-------------|
| Duration | The throttle window (number) |
| Unit | The time unit: **seconds**, **minutes**, **hours**, or **days** |
| Throttle Key | Optional property to throttle by (e.g., `data.project_id`) |

## Use Cases

**Prevent notification spam**

Limit promotional notifications to once per day:

```
Trigger → Throttle (1 day) → Email → End
```

If the notiflow is run multiple times for the same user within 24 hours, only the first notification is sent.

**Rate limit alerts**

Prevent alert fatigue by throttling system notifications:

```
Trigger → Throttle (1 hour) → Push → End
```

## How It Works

1. When execution reaches a throttle step, it checks if a notification was already allowed through this step within the throttle window
2. **Within the window** — the notiflow stops and the notification is dropped
3. **Outside the window** — execution continues to the next step and a throttle event is recorded for future checks

## Throttle Key

Notifications are throttled per recipient by default. Each user has their own throttle gate that operates independently.

You can optionally set a **throttle key** to throttle by a specific property. For example, setting the throttle key to `data.project_id` will create separate throttle windows for each project — so a user working on multiple projects can receive one alert per project within the window, rather than one alert total.

```
User receives alerts for project_A and project_B:

Without throttle key (1 hour window):
  project_A alert → ✓ allowed
  project_B alert → ✗ dropped (same recipient, within window)

With throttle key = data.project_id (1 hour window):
  project_A alert → ✓ allowed
  project_B alert → ✓ allowed (different key, independent window)
  project_A alert → ✗ dropped (same key, within window)
```

When the throttle key property is missing from the notification data, it falls back to a default group — all notifications without the property are throttled together.

## Throttle vs Digest

| | Throttle | Digest |
|-|----------|--------|
| **Behavior** | Drops excess notifications | Combines notifications into one |
| **Data** | Only the first notification is sent | All events included in the digest |
| **Use when** | You want to limit (e.g., max one alert per hour) | You want to aggregate (e.g., "5 new comments") |

**Throttle example**: User gets one "new follower" push per hour — extras are dropped.

**Digest example**: User gets one email listing all new followers from the past hour.

See [Digest Step](/docs/learn/building-notiflows/digest-step) for more on digesting.

## Combining Steps

You can combine throttle with other control steps:

```
Trigger → Digest → Throttle (4 hours) → Email → End
```

This digests events first, then ensures the user doesn't receive more than one digest notification every 4 hours.
