---
title: Rate Limits
description: Understand API rate limits by plan tier and how to handle throttled requests.
updated: 2026-03-24
---

The Wireflow API enforces rate limits to ensure fair usage and platform stability. Limits vary by plan tier.

## Limits by Plan

| Plan           | Requests per Minute | Executions per Minute | Daily Executions |
| -------------- | ------------------- | --------------------- | ---------------- |
| **Free**       | 10                  | 10                    | 50               |
| **Starter**    | 20                  | 10                    | 200              |
| **Pro**        | 60                  | 10                    | 1,000            |
| **Enterprise** | 200                 | 10                    | Unlimited        |

The **Executions per Minute** limit applies to workflow execution requests specifically (`POST /workflows/{id}/execute`) and is the same across all plans to prevent runaway automation. The **Requests per Minute** limit covers all other API calls.

## Response Headers

Every API response includes rate limit headers:

| Header                  | Description                                                         |
| ----------------------- | ------------------------------------------------------------------- |
| `X-RateLimit-Limit`     | Maximum requests allowed in the current window                      |
| `X-RateLimit-Remaining` | Requests remaining in the current window                            |
| `X-RateLimit-Reset`     | Unix timestamp (seconds since epoch) when the window resets         |
| `Retry-After`           | Seconds to wait before retrying — relative duration (only on `429`) |

> **Note:** `X-RateLimit-Reset` is an absolute Unix timestamp (e.g. `1711036800`), while `Retry-After` is a relative number of seconds to wait (e.g. `42`). Both are standard HTTP headers but represent time differently.

**Example headers:**

```
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1711036800
```

## Handling 429 Responses

When you exceed the rate limit, the API returns `429 Too Many Requests`:

```json
{
  "error": "Too many workflow executions. Please try again later.",
  "retryAfter": 1711036800
}
```

Use exponential backoff to retry:

```javascript
async function requestWithBackoff(url, options, maxRetries = 3) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const res = await fetch(url, options);

    if (res.status !== 429) return res;

    const retryAfter = res.headers.get('Retry-After');
    const delay = retryAfter
      ? parseInt(retryAfter) * 1000
      : Math.pow(2, attempt) * 1000;

    await new Promise((r) => setTimeout(r, delay));
  }

  throw new Error('Rate limit exceeded after retries');
}
```

## Best Practices

- **Check `X-RateLimit-Remaining`** before making requests to avoid hitting limits.
- **Use exponential backoff** when you receive a `429`. Don't retry immediately.
- **Batch operations** where possible — update multiple nodes in a single workflow save instead of making separate calls.
- **Cache responses** for read-heavy workloads. Workflow definitions don't change frequently.
- **Contact us** at andrew@wireflow.ai if you need higher limits for your use case.

---

Documentation index: fetch https://www.wireflow.ai/llms.txt for the full list of Wireflow docs.
