# Rate limits

Request limits per API token and how to handle 429 responses.

Source: https://support.toolingmetrics.com/en/api/rate-limits/
Updated: 2026-10-29

API requests are rate-limited per token to ensure fair usage and system stability.

## Limits

| Limit | Value |
|---|---|
| Requests per minute | 60 |

Limits apply per API token. If your integration uses multiple tokens, each token has its own independent limit.

## Handling 429 responses

When you exceed the limit, the API returns `429 Too Many Requests` with a `Retry-After` header:

```
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
Retry-After: 60

{ "errors": ["Rate limit exceeded"] }
```

The `Retry-After` value is the number of seconds to wait before retrying.

```python
import requests
import time

def api_get(url, token, retries=3):
    for attempt in range(retries):
        response = requests.get(url, headers={"Authorization": f"Bearer {token}"})
        if response.status_code == 429:
            wait = int(response.headers.get("Retry-After", 60))
            print(f"Rate limited. Waiting {wait}s...")
            time.sleep(wait)
            continue
        response.raise_for_status()
        return response.json()
    raise Exception("Rate limit retries exhausted")
```

## Staying within limits

For bulk operations — syncing a large inventory, importing many projects — space out requests to stay under 1 request per second on average.

If your integration consistently needs more than 60 requests per minute, contact support to discuss higher limits for your account.
