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

# burst_limit_exceeded

> Error: per-minute burst limit exceeded

# burst\_limit\_exceeded

<Info>HTTP Status: **429 Too Many Requests**</Info>

## Example response

```json theme={null}
{
  "error": {
    "code": "burst_limit_exceeded",
    "message": "Per-minute request limit exceeded for your tier (free)",
    "docs_url": "https://docs.avatcado.com/errors/burst_limit_exceeded"
  },
  "meta": {
    "request_id": "550e8400-e29b-41d4-a716-446655440000"
  }
}
```

The response includes a `Retry-After` header with the number of seconds left in the current 60-second window, plus `X-Burst-Limit` and `X-Burst-Remaining` (`0`).

## What happened?

You've sent too many requests in a single minute. Burst limits protect the API from accidental tight loops and misconfigured clients.

| Tier     | Burst Limit (per minute) |
| -------- | ------------------------ |
| Free     | 20                       |
| Pro      | 60                       |
| Business | 120                      |

## How to fix

1. **Wait the `Retry-After` seconds**: The header contains the number of seconds remaining in the current 60-second window. Read it and back off accordingly
2. **Add a delay between requests**: Space out your requests to stay within the per-minute limit
3. **Implement exponential backoff**: On 429 responses, wait and retry with increasing delays
4. **Upgrade your tier**: Higher tiers have higher burst limits

## Common mistakes

* **Tight polling loops**: Don't call the API in a `while(true)` loop without delays
* **Ignoring `Retry-After`**: Always read this header instead of guessing when to retry
* **Confusing with `rate_limit_exceeded`**: Burst limits are per-minute; monthly limits are separate

## Catching this error with the SDKs

<CodeGroup>
  ```typescript @avatcado/node theme={null}
  import Avatcado, { RateLimitError } from '@avatcado/node';

  const avatcado = new Avatcado('avat_live_your_api_key');
  const { data, error } = await avatcado.vat.validate({ vatNumber: '...' });

  if (error instanceof RateLimitError) {
    console.log(error.message);
    console.log(`Retry after ${error.retryAfter} seconds`);
  }
  ```

  ```python Python theme={null}
  from avatcado import Avatcado, RateLimitError

  avatcado = Avatcado("avat_live_your_api_key")

  try:
      result = avatcado.vat.validate("...")
  except RateLimitError as e:
      print(e.message)
      print(f"Retry after {e.retry_after} seconds")
  ```
</CodeGroup>

## Related errors

* [`rate_limit_exceeded`](/errors/rate_limit_exceeded) - Monthly quota exhausted (different from per-minute burst limits)
