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

# Pause Node

> Wait before continuing to the next step

The Pause node pauses your workflow for a set amount of time. It's like pressing pause on a video - everything stops, then continues after the time is up.

<Frame caption="Pause configuration — set the duration in seconds, minutes, hours, or days.">
  <img src="https://mintcdn.com/glorium/eqWkhSfBUec9afZU/images/nodes/node-pause-form.png?fit=max&auto=format&n=eqWkhSfBUec9afZU&q=85&s=3fefd3a0c4e9291442e4b7a8adb61df0" alt="Pause node configuration form" width="1440" height="1200" data-path="images/nodes/node-pause-form.png" />
</Frame>

## When to Use

* **Avoiding overload** - Wait between requests so you don't get blocked
* **Trying again later** - Wait a bit before retrying something that failed
* **Scheduling** - Pause until a specific time
* **Checking status** - Wait between checks to see if something is done
* **Spacing out messages** - Don't send everything at once

## Example: Rate-Limited API Calls

Respect API rate limits when making multiple calls:

```
├── Loop (over items)
│   ├── HTTP Request (call API)
│   ├── Condition ({{loop_1.isLast}})
│   │   └── Unmet: Pause (1 second)
```

This adds a 1-second delay between API calls, avoiding rate limits.

## Example: Retry with Backoff

Retry a failed operation after waiting:

<Steps>
  <Step title="Make the initial request">
    Use an HTTP Request node to call the API.
  </Step>

  <Step title="Check for errors">
    Add a Condition to check if it failed.
  </Step>

  <Step title="Retry with delay">
    On failure:

    ```
    ├── Condition (success?)
    │   ├── Met: Continue
    │   └── Unmet:
    │       ├── Update Variable (retryCount += 1)
    │       ├── Condition (retryCount < 3)
    │       │   ├── Met:
    │       │   │   └── Pause ({{retryCount * 5}} seconds)
    │       │   │       → [Loop back to HTTP Request]
    │       │   └── Unmet: Alert (max retries exceeded)
    ```
  </Step>
</Steps>

## Example: Scheduled Follow-Up

Send a follow-up email after a delay:

```
├── External API (send initial email)
├── Pause (2 days)
├── Condition (customer replied?)
│   ├── Met: (don't send follow-up)
│   └── Unmet: External API (send follow-up email)
```

## Example: Polling for Completion

Wait for an async operation to complete:

```
├── HTTP Request (start long-running job, get jobId)
├── Update Variable (status = "pending")
├── Loop (while status != "completed")
│   ├── Pause (30 seconds)
│   ├── HTTP Request (check job status)
│   ├── Update Variable (status = response.status)
│   ├── Condition (status == "completed" OR status == "failed")
│   │   └── Met: [exit loop]
```

## Duration Examples

| Configuration | Total Wait |
| ------------- | ---------- |
| 30 seconds    | 30 seconds |
| 5 minutes     | 5 minutes  |
| 2 hours       | 2 hours    |
| 1 day         | 24 hours   |

## Using resumeAt

Instead of a duration, specify an exact time:

```json theme={null}
{
  "resumeAt": "2024-03-15T09:00:00Z"
}
```

The workflow resumes at exactly that time.

**Dynamic resume time:**

```
resumeAt: {{execute_code_1.result.scheduledTime}}
```

Where Execute Code calculates when to resume:

```python theme={null}
from datetime import datetime, timedelta

# Resume tomorrow at 9 AM
tomorrow = datetime.now() + timedelta(days=1)
resume_time = tomorrow.replace(hour=9, minute=0, second=0)

return {"scheduledTime": resume_time.isoformat()}
```

## Pause vs. Scheduled Trigger

| Feature     | Pause                            | Scheduled Trigger        |
| ----------- | -------------------------------- | ------------------------ |
| When to use | Delay within a workflow          | Schedule workflow start  |
| Duration    | Single delay                     | Repeating schedule       |
| Context     | Has access to previous node data | Starts fresh             |
| Use case    | "Wait 5 min, then continue"      | "Run every morning at 9" |

Use Pause for delays mid-workflow. Use [Scheduled Trigger](/nodes/triggers/scheduled-trigger) to schedule when workflows start.

## Maximum Pause Duration

<Warning>
  Very long sleep durations (days/weeks) keep the workflow execution in memory. For long delays, consider:

  * Ending the workflow and using a Scheduled Trigger
  * Storing state in a variable and using On Variable Update
  * Using an external scheduler to trigger a webhook
</Warning>

Practical limits:

* **Up to 1 hour** - Works well
* **Up to 24 hours** - Generally reliable
* **Longer** - Consider alternative approaches

## Tips

<Tip>
  For rate limiting in loops, check `isLast` before sleeping to avoid an unnecessary delay after the final item.
</Tip>

<Tip>
  Use exponential backoff for retries: Pause for `2^retryCount` seconds (2, 4, 8, 16...) to give failing services more recovery time.
</Tip>

<Tip>
  When polling, start with shorter intervals and increase them over time to balance responsiveness with API efficiency.
</Tip>

## Settings

<ParamField path="name" type="string" default="Pause">
  What to call this node (shown on the canvas).
</ParamField>

<ParamField path="key" type="string" default="sleep_1">
  A short code to reference this node's info.
</ParamField>

<ParamField path="duration" type="number" required>
  How long to wait.
</ParamField>

<ParamField path="unit" type="string" default="seconds">
  The time unit: `seconds`, `minutes`, `hours`, or `days`.
</ParamField>

<ParamField path="resumeAt" type="string">
  Instead of a duration, you can specify an exact time to wake up.
</ParamField>

## Outputs

<ParamField path="sleptFor" type="number">
  How long it actually waited (in milliseconds).
</ParamField>

<ParamField path="resumedAt" type="string">
  When it woke up and continued.
</ParamField>

## Related Nodes

<CardGroup cols={2}>
  <Card title="Scheduled Trigger" icon="clock" href="/nodes/triggers/scheduled-trigger">
    For scheduling when workflows start.
  </Card>

  <Card title="Loop" icon="rotate" href="/nodes/logic/loop">
    Combine with Pause for rate-limited iterations.
  </Card>
</CardGroup>
