# Rate limits

Anonymous requests share one free-tier rate limit, enforced per client IP, so you can try the API with no signup. A valid API key applies your key's own limit instead (higher, or unlimited for granted keys). [Sign up](/dashboard/) to get a key.

## Checking the limit

```bash
curl "https://dev.ziffi.xyz/v1/quota"
```

```json
{
  "data": {
    "rate_limit_rps": 10,
    "burst": 20,
    "daily_limit": null,
    "note": "Free tier is per-IP. Send an API key for your own higher limit."
  },
  "tier": "live"
}
```

## When you exceed it

You get a `429` with `code: rate_limit` and a `Retry-After` header in seconds. Back off and retry. See the [Errors](#/errors) page for a ready-made retry helper.

## Designing for the limit

- Cache graph-tier responses using the `ETag`. A hot product viewed many times should hit your cache, not the API.
- Batch where the API allows it, for example `POST /v1/prices` prices up to twenty products in one call.
- Throughput at scale comes from spreading work over time, not from bursting.

## Next steps

- [Errors](#/errors): handling `429`.
- [Get live price](#/price): the batch price endpoint.
