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

# Rate Limits

> API rate limits by plan

## Rate Limits

Rate limits control how many requests you can make within a time window. Each plan has a specific request limit per minute.

## Limits by plan

| Plan    | Requests per minute |
| ------- | ------------------- |
| Free    | 10                  |
| Starter | 30                  |
| Growth  | 100                 |
| Scale   | 250                 |

## How rate limiting works

Each API request checks your remaining allowance in the current 1-minute window:

1. **Request allowed** → Process request and decrement remaining count
2. **Limit exceeded** → Return `429` error with `retry-after` time

The 1-minute window slides continuously. Old requests drop out of the window after 1 minute, freeing up capacity for new requests.

## Rate limit headers

Every API response includes headers indicating your rate limit status:

| Header                  | Description                          |
| ----------------------- | ------------------------------------ |
| `X-RateLimit-Limit`     | Requests per minute for your plan    |
| `X-RateLimit-Remaining` | Requests remaining in current window |
| `X-RateLimit-Reset`     | ISO timestamp when window resets     |

## Handling rate limits

When you exceed your rate limit, the API returns a `429` status code with the following response:

```json theme={null}
{
  "error": "rate_limit_exceeded",
  "errorDescription": "Rate limit exceeded. Try again at 2025-01-10T12:34:56Z",
  "retryAfter": 45
}
```

| Field              | Description                                   |
| ------------------ | --------------------------------------------- |
| `error`            | Error code identifier                         |
| `errorDescription` | Human-readable message with reset timestamp   |
| `retryAfter`       | Seconds to wait before making another request |

### Best practices

* **Implement exponential backoff** - Wait longer between retries when rate limited
* **Respect retry-after** - Use the `retry-after` value to delay retries
* **Monitor headers** - Track `X-RateLimit-Remaining` to anticipate limits
* **Cache aggressively** - Use cached results to avoid unnecessary requests

## See also

* [How Credits Work](/guides/core/credits) - Credit consumption
* [Caching](/guides/core/caching) - Reduce requests with caching
* [Pricing](/guides/pricing) - Plan comparison
