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

# Rate limits

> Per-merchant request limits, rate limit headers and how to handle 429 responses.

Tender limits how many requests your merchant account can make in a fixed window. Limits are counted **per merchant account**, so all of your API keys and outlets share the same budget.

## How the window works

* Each limit uses a **fixed 60-second window**. The window starts with your first request in that group and resets 60 seconds later; it does not slide.
* Every endpoint group has its own counter. Requests to `/v1/api/payment` don't use up your `/v1/api/payout` budget.
* Some groups have a second, tighter limit on top of the group limit. A request must pass every limit that applies to it.
* Requests that are rejected with `429` still count towards the current window.

## Limits

| Scope | Limit per 60 s | Notes |
| - | - | - |
| Every endpoint group (`agent`, `conversions`, `onramp`, `payment`, `payout`, `system`, `wallet`, `webhook`) | 120 | Separate counter per group. |
| `GET /v1/api/wallet/balance/{address}` | 30 | In addition to the 120/min `wallet` limit. |
| All `/v1/api/payout` routes | 10 | One shared counter for every payout route, including `GET` requests (list, get one, fee). `POST /v1/api/payout/crypto` counts **twice**, so you can make about 5 crypto payouts per minute. |
| All `/v1/api/conversions` routes | 10 | One shared counter for every conversion route, including `GET` requests. |
| All `/v1/api/onramp` routes | 10 | One shared counter for every onramp route, including quote and status polling. |

> [!TIP]
>
> Payout, conversion and onramp endpoints have a small budget that reads and writes share.
> Don't poll their `GET` endpoints in a tight loop; poll every 10 seconds or more, and back off
> once a record reaches a final status.

## Rate limit headers

Responses from rate-limited endpoints include these headers:

| Header | Description |
| - | - |
| `RateLimit-Limit` | The number of requests allowed in the window. |
| `RateLimit-Remaining` | The number of requests left in the current window. |
| `RateLimit-Reset` | The number of seconds until the current window resets. |

Where more than one limit applies (for example, on payout routes), the headers describe the **tighter** limit.

## When you exceed a limit

The API responds with HTTP `429` and the standard error envelope. The message states the limit you hit:

```json theme={null}
{
  "status": "error",
  "message": "Too many requests. Max 10 per 60s.",
  "data": {}
}
```

To recover:

1. Stop sending requests to that group.
2. Wait for `RateLimit-Reset` seconds.
3. Retry. For payouts, retry with the **same** `Idempotency-Key`; see [Idempotency](/api-reference/idempotency.md).

If your integration needs higher limits, contact **[support@tender.cash](mailto:support@tender.cash)**.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.