Errors
Every failure is a JSON envelope with a stable machine code, an optional reason that refines it, a message for people and the request ID for support. Clients decide by code and reason, never by the message text.
json
{ "code": "conflict", "reason": "version_exists", "message": "…", "requestId": "…" }Codes
| Code | HTTP status | Meaning |
|---|---|---|
invalid_input | 400 | The request is malformed or a value is not allowed; fix the request before sending it again. |
not_found | 404 | The object does not exist, or the caller may not see it. |
conflict | 409 | The request conflicts with the current state; re-read the state, then decide. |
forbidden | 403 | The credential is valid but lacks the permission for this action. |
unauthorized | 401 | No valid credential: missing, wrong, expired or revoked. |
capacity_exceeded | 507 | A quota, capacity or limit would be exceeded. |
integrity_mismatch | 422 | The bytes do not match the declared size or SHA-256. |
busy | 503 | The server is at its admission limit; repeat after Retry-After. |
unavailable | 503 | A dependency is not available right now; repeat after Retry-After. |
rate_limited | 429 | Too many attempts; wait for Retry-After. |
read_only | 405 | This node does not accept changes (a read gateway answers this way; a mirror answers conflict with the reason mirror_read_only). |
internal | 500 | An unexpected server defect; the request ID helps support find it. Do not repeat blindly. |
Reasons
| Code | Reason | HTTP status | Meaning |
|---|---|---|---|
invalid_input | validation | 400 | A field is missing or has a value outside its rules; details name the field. |
invalid_input | malformed_json | 400 | The body is not valid JSON. |
invalid_input | body_too_large | 413 | The body is larger than this operation accepts. |
invalid_input | unsupported_media_type | 415 | The Content-Type is not one this operation accepts. |
invalid_input | method_not_allowed | 405 | The path exists but not with this method. |
invalid_input | range_not_satisfiable | 416 | The requested byte range lies outside the content. |
not_found | route_not_found | 404 | There is no such route. |
conflict | upload_expired | 409 | The upload session expired before it was completed. |
conflict | upload_state | 409 | The upload is not in a state that allows this step. |
conflict | revision_mismatch | 409 | The expected revision is not the current one (another change came first). |
conflict | version_exists | 409 | This version was already published with other content. |
conflict | part_mismatch | 409 | A part does not match its declared size or SHA-256. |
conflict | parts_incomplete | 409 | Not every part of the upload has arrived yet. |
conflict | idempotency_mismatch | 409 | The Idempotency-Key was used before with a different request. |
conflict | already_exists | 409 | An object with this name or path already exists. |
conflict | stage_limit | 409 | The artifact has the maximum number of stages. |
conflict | state_conflict | 409 | The object is in a state that does not allow this change. |
conflict | mirror_read_only | 409 | The repository is a mirror; it changes only through synchronization. |
forbidden | permission_missing | 403 | The credential lacks the action this operation needs. |
forbidden | read_only_token | 403 | A read-only personal token cannot change anything. |
forbidden | credential_revoked | 403 | The key or token was revoked. |
forbidden | session_required | 403 | Only a signed-in account session may do this, not a key. |
forbidden | administrator_required | 403 | Only an administrator may do this. |
forbidden | registration_disabled | 403 | Self-registration is turned off on this server. |
forbidden | origin_not_allowed | 403 | The browser origin is not in ARKVORY_CORS_ORIGINS. |
unauthorized | invalid_credentials | 401 | The account name or password is wrong. |
unauthorized | current_password_invalid | 401 | The current password is wrong. |
unauthorized | credential_missing | 401 | The request carries no credential. |
unauthorized | credential_invalid | 401 | The credential is not a valid key, token or session. |
unauthorized | session_expired | 401 | The session expired; sign in again. |
unauthorized | token_expired | 401 | The personal token expired. |
capacity_exceeded | storage_quota | 507 | The repository quota would be exceeded. |
capacity_exceeded | storage_full | 507 | The server disk keeps its free-space reserve; no room for more. |
capacity_exceeded | account_limit | 507 | The number of accounts is at its limit. |
capacity_exceeded | group_limit | 507 | The number of groups is at its limit. |
capacity_exceeded | membership_limit | 507 | The number of group members is at its limit. |
capacity_exceeded | grant_limit | 507 | The number of grants is at its limit. |
capacity_exceeded | key_limit | 507 | The number of keys is at its limit. |
capacity_exceeded | token_limit | 507 | The number of personal tokens is at its limit. |
capacity_exceeded | delegation_limit | 507 | The number of delegations is at its limit. |
capacity_exceeded | catalog_limit | 507 | The catalog capacity of the installation would be exceeded. |
capacity_exceeded | queue_full | 507 | The transfer queue is full. |
capacity_exceeded | transfer_limit | 507 | The caller has as many transfers as allowed. |
busy | request_limit | 503 | The server handles as many requests as it admits. |
busy | download_queued | 503 | The download waits in the queue; come back after Retry-After. Arkvory-Queue-Position and Arkvory-Starts-At tell the place and the expected start. |
unavailable | feedback_disabled | 503 | Feedback is turned off on this server. |
unavailable | hub_unreachable | 503 | The update hub cannot be reached. |
unavailable | replication_degraded | 503 | An HA cluster has fewer complete copies than a write needs, so the change was not acknowledged; repeat after Retry-After. Downloads still work. |
rate_limited | login_attempts | 429 | Too many sign-in attempts; wait. |
rate_limited | registration_attempts | 429 | Too many registration attempts; wait. |
rate_limited | password_attempts | 429 | Too many password attempts; wait. |
rate_limited | feedback_attempts | 429 | Too many feedback reports; wait. |