Rate limits
Rate limits protect the API from bursts and apply independently of pricing. They are calculated per account and operation, not per IP address or API token. Resetting a token therefore does not reset the counters.
Limits
Section titled “Limits”| Endpoint | Requests per 60 seconds | Concurrent requests |
|---|---|---|
GET /v1/me/ |
120 | 5 |
GET /v1/users/{identifier} |
120 | 5 |
GET /v1/groups/{identifier} |
120 | 5 |
GET /v1/search/ |
60 | 3 |
GET /v1/users/{identifier}/similar |
60 | 3 |
GET /v1/groups/{identifier}/similar |
30 | 2 |
GET /v1/groups/{identifier}/members |
30 | 2 |
Each row has its own counter. For example, calls to the user lookup endpoint do not consume the group lookup quota.
429 response
Section titled “429 response”When either limit is exceeded, the API returns 429 Too Many Requests and a
Retry-After header containing the number of whole seconds to wait:
HTTP/1.1 429 Too Many RequestsRetry-After: 17Content-Type: application/json{ "detail": "Rate limit exceeded", "reason": "rpm"}reason can be:
rpm— the rolling requests-per-minute quota is exhausted;concurrency— too many requests for the operation are already in progress.
For concurrency, Retry-After is normally 1. Retry after the indicated
delay; do not immediately launch the same number of parallel requests again.
Limiter unavailable
Section titled “Limiter unavailable”If the rate-limiting service cannot admit the request, the API fails closed with
503 Service Unavailable:
HTTP/1.1 503 Service UnavailableRetry-After: 5Content-Type: application/json{ "detail": "Rate limiter is temporarily unavailable" }Retry after the value in Retry-After. Successful responses do not currently
include quota, remaining-request, or reset-time headers.