Every request to api.ferrlens.com is counted against the caller's IP address. There is no
per-account quota yet: signing in does not change the limit.
The bucket
Each IP has a token bucket. A request costs one token.
| Setting | Default |
|---|---|
| Burst (bucket size) | 30 requests |
| Refill | 0.5 tokens per second (30 per minute) |
A new IP starts with a full bucket, so a short burst of up to 30 requests goes through
immediately. After that you are limited to the refill rate. GET /health is not counted.
Response headers
Every counted response carries:
| Header | Meaning |
|---|---|
x-ratelimit-limit |
Bucket size |
x-ratelimit-remaining |
Tokens left after this request |
When you are throttled
The API answers 429 Too Many Requests with a Retry-After header (whole seconds until a
token is available, at least 1) and a JSON body:
{
"code": "RATE_LIMITED",
"message": "too many requests - slow down and retry",
"retry_after_secs": 2
}
Wait Retry-After seconds and retry. x-ratelimit-remaining is 0 on a throttled response.
Things to know
- Some endpoints do more work per request than others. A link check still costs one token, but it runs for up to 60 seconds.
- IPs behind a shared NAT share a bucket.