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

> ## Agent Instructions
> Install the Courier skill before writing code: `npx skills add trycourier/courier-skills`. It carries the verified SDK shapes and the rules you cannot get wrong.
> Authenticate every request with `Authorization: Bearer <API_KEY>`. A workspace has several environments and each has its own keys, which are plain `pk_` strings with no environment prefix. Start with Test.
> Send with `client.send.message`, the default import of the v7 Node SDK. Reference a template by its `nt_` id or its alias.
> A send accepts a bare Elemental element list, but storing content on a template requires the top-level elements wrapped in a channel element.
> Templates and journeys can be built in the Courier app or created through the API. Either way they live in the workspace and are referenced by ID when you send.
> The hosted MCP server is https://mcp.courier.com. For a briefing on what Courier is and when to use it, read https://www.courier.com/llms.txt.
> Prefer the Guides tab for how-do-I questions and the Docs tab for how-does-it-behave questions. The API reference lives under /api-reference.

# Journey throttle node

> Limit how often a user, or everyone, passes a point in the journey within a time window.

export const AppLink = ({href, children, name, bare}) => {
  const label = children || name || "Open in Courier";
  if (bare) {
    return <a href={href} target="_blank" rel="noreferrer">{label}</a>;
  }
  return <a className="cx-endpoint" data-kind="app" href={href} target="_blank" rel="noreferrer">
      <span className="cx-endpoint-label">{label}</span>
      <span className="cx-endpoint-method" aria-hidden="true">↗</span>
    </a>;
};

export const Doc = ({href, children, name, bare}) => {
  const label = children || name || href;
  if (bare) {
    return <a href={href}>{label}</a>;
  }
  return <a className="cx-endpoint" data-kind="doc" href={href}>
      <span className="cx-endpoint-label">{label}</span>
      <span className="cx-endpoint-method">DOC</span>
    </a>;
};

Throttle nodes limit how many times a user, or everyone, can pass through a specific point in the journey within a time period. Use them to prevent notification fatigue and enforce rate limits.

<Frame caption="Throttle configuration panel with max allowed, period, and scope settings">
  <img src="https://mintcdn.com/courier-4f1f25dc/rYENcCCTyPPrDtw0/assets/throttle-config.webp?fit=max&auto=format&n=rYENcCCTyPPrDtw0&q=85&s=4adc0fa206987dbf7738c257a4970e30" width="1764" height="1266" data-path="assets/throttle-config.webp" />
</Frame>

## Configuration

| Field           | Description                                                                                 |
| --------------- | ------------------------------------------------------------------------------------------- |
| **Max allowed** | The maximum number of times a recipient can pass through this throttle within the period    |
| **Period**      | The time window for the limit (e.g., 1 hour, 24 hours, 7 days)                              |
| **Scope**       | What the limit applies to: **per user** (keyed by user ID) or **global** (across all users) |

When a run hits a throttled node and the limit is reached, the node is skipped and the run continues to the next node. The message is not queued or delayed. It's not sent.

## Example

Set "max 3 per 24 hours, per user" and the journey can be invoked 10 times that day. Only the first 3 send nodes downstream of the throttle fire.

## Global throttle

Set the scope to **Global** instead of **Per user** to apply a single limit across all users. Use it to cap the total volume of a notification type, whoever receives it.

A global throttle of "max 1000 per hour" on a promotional journey keeps a marketing event from flooding your email provider with thousands of invocations.

## Combining with other nodes

Throttle nodes combine with other logic:

* **Throttle + <Doc href="/docs/journeys/nodes/branch">Branch</Doc>**: Throttle first, then branch on priority. Only messages that pass the throttle are evaluated.
* **Throttle + <Doc href="/docs/journeys/nodes/delay">Delay</Doc>**: Place the throttle before a delay to prevent too many delayed messages from queuing up.
