> ## 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 delay node

> Pause a run for a duration or until a timestamp before the next node.

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>;
};

Delay nodes pause the journey before the next node. Use them to space out messages, wait for a user action, or schedule follow-ups.

<Frame caption="Delay node configuration panel showing interval type, dynamic interval toggle, and time picker">
  <img src="https://mintcdn.com/courier-4f1f25dc/fN1MbwzHtG3Vhos5/assets/delay-config-panel.webp?fit=max&auto=format&n=fN1MbwzHtG3Vhos5&q=85&s=b23f61746b3e6a8d0e72082cf0904e16" width="1988" height="1154" data-path="assets/delay-config-panel.webp" />
</Frame>

## Configuration

### Interval type

Toggle between two modes:

* **Duration**: Wait a relative period. Set a numeric value and a unit: Minutes, Hours, Days, or Months. The delay is relative to when the run reaches the node, not when the journey was invoked.
* **Until**: Wait until a specific date and time, chosen in a date-time picker. Use it to hold messages until a launch date or a scheduled window.

### Dynamic interval

Enable the **Dynamic Interval** toggle to read the delay from a field in the journey context instead of a hardcoded value. The time picker becomes a field selector for a trigger schema, profile, or fetch response field.

Your application then controls the delay at runtime. A trigger schema field called `follow_up_delay` could hold an ISO 8601 duration like `PT2H` (2 hours), or an `until` field could hold a datetime string.

### Conditions

Delay nodes support optional <Doc href="/docs/journeys/nodes/branch">conditions</Doc>. If they are not met when the run reaches the delay, the node is skipped.

## Common patterns

**Onboarding sequences**: Send a welcome email immediately, then delay 24 hours before checking whether the user completed setup.

**Reminder chains**: Delay 3 days after an initial notification, then check delivery status or user action before sending a follow-up.

**Scheduled delivery**: Use the "Until" interval type to hold a message until a launch date or event start time.

Pair a delay with a <Doc href="/docs/journeys/nodes/branch">branch node</Doc> to check whether the user took an action during the wait. Delay 24 hours, then branch on whether the user completed onboarding.

## Run inspection

In <Doc href="/docs/monitor/journey-metrics">Run Inspection</Doc>, click a delay node to see its step details:

* the delay length, as an ISO 8601 duration like `P1D`
* `expectedDelayValue`, the exact datetime the delay will release
* the started and completed timestamps

While the pause is active, the status shows "Waiting." Once the delay expires, it transitions to "Processed" and the run continues.

<Frame caption="Run context for a delay node showing status, delay length, start/completion times, and the expected release datetime">
  <img src="https://mintcdn.com/courier-4f1f25dc/fN1MbwzHtG3Vhos5/assets/delay-run-context.webp?fit=max&auto=format&n=fN1MbwzHtG3Vhos5&q=85&s=c138dadb5ced08c43025228ea9bbb862" width="2014" height="1266" data-path="assets/delay-run-context.webp" />
</Frame>
