A request that would take a quota past its value is refused with the error code
quota_exceeded. Nothing is created or processed.
| Kind | Status | quota also contains |
|---|---|---|
| Allocation | 409 Conflict |
used |
| Rate | 429 Too Many Requests |
window |
| Usage | 429 Too Many Requests |
used, periodStart, resetsAt |
| Concurrency | 429 Too Many Requests |
inFlight |
Every quota object has id, kind, scope and limit (the value that applied), and
scopeResourceName when the error names the organization or project.
{
"error": {
"code": "quota_exceeded",
"message": "This organization already has 10 projects, and can have at most 10 (organizations.projects.count)",
"quota": {
"id": "organizations.projects.count",
"kind": "allocation",
"scope": "organization",
"scopeResourceName": "ezgh::org_k3f9a0x2m7qp",
"limit": 10,
"used": 10
}
}
}Handling the error
The response has no Retry-After header: the refusal means you are at the quota, not that the
service is busy. Don’t retry on a timer.
- Allocation: delete resources you no longer need, then try again.
- Rate: send requests more slowly. Capacity refills over the quota’s
window. - Usage: usage resets at
resetsAt, the start of the next billing period. - Concurrency: wait for requests in flight to finish.
A refused request with an Idempotency-Key is not stored, so you can send the same key again
once there is room.