Rate Limits & Quotas
Rate limits
Section titled “Rate limits”Rate limits are enforced per API key using sliding window counters.
| Window | Default |
|---|---|
| Per minute | 60 requests |
| Per day | 10,000 requests |
Response headers
Section titled “Response headers”Every response includes:
| Header | Description |
|---|---|
X-RateLimit-Limit | Max requests per minute |
X-RateLimit-Remaining | Remaining in current window |
X-RateLimit-Reset | Seconds until window resets |
When rate limited, the API returns 429 with a Retry-After header:
{ "error": "Rate limit exceeded (per-minute)", "retryAfter": 42}Resource quotas
Section titled “Resource quotas”Quotas are per project.
| Resource | Default |
|---|---|
| Snapshots | 50 |
| Files | 100 |
| Storage | 100 MB |
When exceeded, the API returns 403:
{ "error": "Snapshot quota exceeded (max 50)" }Check current usage with GET /machine/usage.
Limits are configurable per project in the project_quotas table.