rate_limited
Too many requests
What the API answers
Too many requests. Slow down and retry after the delay in Retry-After.
The message stays in English, like every API response: branch your script on error.code, which never changes.
What to do
Too many requests in a minute. Wait the number of seconds given by the Retry-After header, which every route sends, then try again. The native API also gives error.details.retry_after_seconds, the same wait rounded down (Retry-After is one second more), and error.details.limit, the number of requests allowed per minute.
Quota and rate. The storage quota is full, or the key sent too many requests in a minute. Fixed by making room, raising the quota or slowing down.
For a media upload, retry with the same Idempotency-Key: if the first attempt had gone through, you get the same media back instead of a duplicate.
Full response
{
"status": "error",
"error": {
"code": "rate_limited",
"message": "Too many requests. Slow down and retry after the delay in Retry-After.",
"docs": "https://aperture-app.preview.moncompanion.cloud/docs/errors/rate_limited"
},
"meta": {
"request_id": "01K2R7M8QF3V9XZ4B6NCDT0YAH",
"api_version": "v1",
"duration_ms": 12,
"timestamp": "2026-10-27T14:32:08+00:00"
}
}The meta values are a sample. meta also carries app_version and commit, and a refusal may add error.details with the value at fault.
Codes of the same family
| HTTP | Code | What to do | Retry |
|---|---|---|---|
| 413 | quota_exceededQuota reached | The organisation's storage quota is full. Free some space or ask for a larger quota: files already online keep being served. | No |
| 429 | rate_limitedToo many requests | Too many requests in a minute. Wait the number of seconds given by the Retry-After header, which every route sends, then try again. The native API also gives error.details.retry_after_seconds, the same wait rounded down (Retry-After is one second more), and error.details.limit, the number of requests allowed per minute. | Yes |