Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

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.

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.

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 Requests
Retry-After: 17
Content-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.

If the rate-limiting service cannot admit the request, the API fails closed with 503 Service Unavailable:

HTTP/1.1 503 Service Unavailable
Retry-After: 5
Content-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.