Errors and limits
Error format
Section titled “Error format”Every error has the same shape:
{ "error": "invalid_field", "message": "name too short" }error is a stable code you can program against. message is optional and meant for people; its wording can change.
Status codes
Section titled “Status codes”| Status | Typical codes | Meaning |
|---|---|---|
| 400 | invalid_field, invalid_json, body_must_be_object |
The request is malformed. message names the field. |
| 401 | unauthorized, invalid_credentials, invalid_server_key |
Login missing, expired or wrong. |
| 403 | forbidden, email_unverified, signup_closed, token_not_allowed, insufficient_scope |
Logged in, but not allowed. The last two are for access tokens. |
| 404 | not_found |
Does not exist, or you may not see it. |
| 409 | name_taken, slug_taken, version_exists, offset_mismatch, package_unavailable, *_limit_reached |
Conflicts with existing data or a limit. For an upload in pieces, message says where to continue. |
| 413 | body_too_large, file_too_large, quota_exceeded |
Too big. |
| 415 | unsupported_media_type |
Wrong Content-Type. |
| 416 | range_not_satisfiable |
The Range of a download lies outside the file. |
| 422 | rights_confirmation_required, checksum_mismatch, good_faith_confirmation_required |
Understood, but a required confirmation or check failed. |
| 429 | rate_limited, too_many_attempts |
Too many requests. Wait and try again. |
| 451 | unavailable_for_legal_reasons |
The version was blocked after a report. |
| 500 | internal_error |
Our fault. Try again later. |
| 503 | packages_unavailable, storage_disabled |
A feature is switched off on this server. |
| 507 | storage_full |
GAMPEON has no room for uploads right now. Try again later. |
Rate limits
Section titled “Rate limits”Limits protect the platform and other creators. Each operation lists its limit in the reference (x-gampeon-rate-limit). The most important ones:
| Operation | Limit |
|---|---|
| Sign-up | 5 per hour per IP address |
| Login | 5 failed attempts per email, 30 attempts per IP address, in 15 minutes |
| Create project | 10 per hour |
| Create studio | 5 per hour |
| Register server | 10 per hour |
| Heartbeat | 20 per minute per server |
| Create marketplace item | 20 per hour |
| New version, file upload, image upload | 30 per hour each |
Edits (PATCH) |
120 per hour per account |
| Download | 120 per hour per IP address |
| Report | 10 per hour per IP address |
| Appeal | 10 per day |
| Requests with one access token | 120 per minute, 2000 per hour |
| New access tokens | 10 per hour |
Account limits
Section titled “Account limits”| What | Limit |
|---|---|
| Projects you create | 20 |
| Studios you found | 5 |
| Members per studio | 50 |
| Projects per studio | 50 |
| Servers | 10 |
| Active access tokens | 20 |
| File per version | 256 MB |
| Storage | 2 GB |
| Preview image | 2 MB |
Good practice
Section titled “Good practice”- On
429, wait for the number of seconds in theRetry-Afterheader (currently 60) before retrying. Do not retry in a tight loop. - Treat
404and403as final; retrying does not help. - Never log tokens or server keys, also not in error reports.