All errors return JSON with an error field:
{ "error": "A human-readable error message" }
| Error | Cause |
|---|
projectName is required | Bootstrap missing project name |
machineName is required | Snapshot missing machine name |
name is required | Project missing name |
A "file" field is required (multipart/form-data) | File upload missing file field |
url is required | Webhook missing URL |
events array is required and must not be empty | Webhook missing events |
Invalid events: ... | Unrecognized event types |
Invalid role. Must be one of: admin, member, viewer | Invalid role |
No fields to update | PATCH with no fields |
snapshotA and snapshotB are required | Compare missing IDs |
Cannot revoke your own API key | Self-revocation |
Cannot change the owner role | Modifying owner role |
Cannot remove the project owner | Removing owner |
Cannot remove yourself | Self-removal |
| Error | Cause |
|---|
Missing X-API-Key header | No key provided |
Invalid API key | Key doesn’t match any stored hash |
| Error | Cause |
|---|
Forbidden: requires one of [...] | Insufficient role |
Only owner or admin can create API keys | Non-privileged key creation |
Access denied | Not a project member |
Can only update your current project context | Wrong project |
Snapshot quota exceeded (max N) | Snapshot limit |
File count quota exceeded (max N) | File limit |
Storage quota exceeded (max NMB) | Storage limit |
| Error | Cause |
|---|
Snapshot not found | Snapshot doesn’t exist in project |
File not found | File doesn’t exist in project |
API key not found | Key doesn’t exist in project |
Project not found | Project doesn’t exist |
Member not found | Member doesn’t exist in project |
Webhook not found | Webhook doesn’t exist in project |
Not found | Route doesn’t exist |
| Error | Cause |
|---|
Rate limit exceeded (per-minute) | Over 60 req/min |
Rate limit exceeded (per-day) | Over 10,000 req/day |
Includes a Retry-After header with seconds to wait.
{ "error": "Internal server error" }