Rate limits
Per-token, per-minute, sliding window. Buckets are per token, so multiple tokens on one account never share quota.
Limits
| Endpoint | Limit | Notes |
|---|---|---|
| POST /api/v1/analyses | 10 / minute / token | Charges a credit. Capped low to keep a runaway script from draining a balance. |
| GET /api/v1/analyses | 60 / minute / token | List endpoint. |
| GET /api/v1/analyses/{id} | 120 / minute / token | Read endpoint. Agents poll this hard. |
| GET /api/v1/credits | 120 / minute / token | Balance check. Cheap enough that agents poll it before every submit. |
429 response
Exceed a limit and the API returns 429 rate_limited with a Retry-After header. The value is the seconds remaining until the next minute boundary.
HTTP/1.1 429 Too Many Requests
Retry-After: 42
Content-Type: application/json
{
"error": {
"code": "rate_limited",
"message": "Too many requests; retry after 42s"
},
"retryAfterSeconds": 42
}Tips
- →Use exponential backoff, but cap it at the Retry-After value so you don't wait longer than needed.
- →Poll smartly. The worker pipeline takes 60-120s. Poll every 3-5s, not every second.
- →One token per consumer. Give the CI bot, your local script, and the Slack integration their own tokens. One runaway script then can't drain the others' quota.
Need higher limits?
Email hello@adrevila.com with your use case and expected req/min. The defaults are conservative on purpose; we raise them for real workloads.