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

# Rate Limits

> How rate limiting works on this API, and its real limitations

Rate limits are enforced **per API key, per resource, independently**, not as one shared quota across the whole API.

Every endpoint allows **300 requests per 5 minutes** for a given key, but that limit is tracked separately per resource. Concretely: a single key can make up to 300 requests to `/invoices`, and in that same 5-minute window, up to 300 more to `/clients`, 300 more to `/items`, and so on. There's no single combined ceiling across resources, the buckets are: `clients`, `items`, `expenses`, `invoices`, `estimates`, `taxes`, `expense-categories`, and `me`.

## What happens when you hit the limit

You'll get an `HTTP 429` with this body:

```json theme={null}
{
  "success": false,
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Please try again later."
  }
}
```

<Warning>
  This API doesn't currently return a `Retry-After` header, or any other machine-readable signal for how long to wait before retrying. If you're writing a client, build in a reasonable backoff (a fixed delay, or an increasing one) rather than relying on the response to tell you when to try again.
</Warning>

There's also no header exposing how much of your quota is left (no `X-RateLimit-Remaining` or similar), so you won't see a 429 coming, plan your request volume with the 300-per-5-minutes-per-resource number in mind rather than expecting an early warning.
