# Rate limits (/docs/rate-limits)



Limits apply per API key, per UTC clock hour. The tier is set on the key when it is issued.

| Tier      | Requests per hour |
| --------- | ----------------- |
| Standard  | 1,000             |
| Premium   | 10,000            |
| Unlimited | 100,000           |

Every response carries the current state of the window:

| Header                  | Meaning                                         |
| ----------------------- | ----------------------------------------------- |
| `X-RateLimit-Limit`     | Requests allowed in the current hour            |
| `X-RateLimit-Remaining` | Requests left in the current hour               |
| `X-RateLimit-Reset`     | Unix timestamp (seconds) when the window resets |

Once the limit is reached, requests fail with HTTP 429 until the window resets:

```json
{
  "status": "error",
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Limit: 1000 requests per hour."
  }
}
```

<Callout title="Staying under the limit">
  Read `X-RateLimit-Remaining` and pause before it reaches zero rather than reacting to 429s.
  Use cursor pagination with a large `limit` instead of many small pages, and subscribe to
  [webhooks](/docs/webhooks) instead of polling for changes.
</Callout>

If your integration needs more than the Standard tier, contact [hello@karma.life](mailto:hello@karma.life) with the API key name.
