Rate limits
How many requests a Simple Feedback API key may send per minute, how to read the rate-limit headers, and how to back off after a 429.
Die Entwickler-Dokumentation gibt es nur auf Englisch, wie die API selbst.
Each API key has its own budget for each route, so polling responses never uses up the budget for creating surveys.
Limits
| Applies to | Limit |
|---|---|
| Each key, per route | 60 requests per minute |
Each key, POST /v1/surveys/{id}/insights/generate |
2 requests per minute |
| Each organization or IP address, per route | 300 requests per minute |
Generating insights has its own small budget because every call runs an AI analysis over all of a survey's
responses. Read the stored result with GET /v1/surveys/{id}/insights first, which is free, and generate a new one
only when its status is stale or not_generated.
The last row protects the service as a whole. It counts per organization once a key is known, otherwise per IP address. An integration that stays within its per-key limit never reaches it.
Windows are fixed, not sliding: a window starts with the first request and resets a minute later.
Headers
Every /v1 response tells you where you stand within the per-key limit:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 60| Header | Meaning |
|---|---|
X-RateLimit-Limit |
Requests allowed in the current window |
X-RateLimit-Remaining |
Requests left in it |
X-RateLimit-Reset |
Seconds until the window starts over |
When you hit the limit
The request answers 429 with a Retry-After header and the same number of seconds in the body:
{
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit of 60 requests per 60s exceeded for this API key",
"details": { "retryAfterSeconds": 34 }
}
}Wait that long, then retry. Both limits send Retry-After, so your client can rely on the header alone.
MCP
The MCP server has its own budgets, separate from /v1, and higher defaults because an assistant makes many small
calls. See Connect an AI assistant.