The problem document every failed request returns, and every error code the Storage API uses.

The problem document

Every failure is an RFC 9457 problem document, sent as application/problem+json:

{
  "type": "https://docs.digitospace.com/problems/conflict",
  "title": "Conflict",
  "status": 409,
  "code": "bucket_not_empty",
  "detail": "the bucket still holds 3 files; delete them first, or delete with force=true",
  "instance": "/v1/projects/01k5ztq3jb9y2a1m9v2xw8e0ha/buckets/invoices",
  "requestId": "01m3c081dbf3j55x7hsa7wc1yj",
  "retryable": false
}

Handle a failure

  • type links to a page about that kind of problem. See Problems.
  • code is the contract. Branch on it. It changes only with a deprecation.
  • type and status are the class of failure, for handling whole categories.
  • detail is a sentence for a person and may be reworded at any time.
  • retryable says whether the same request could succeed if sent again later.
  • resource names the missing thing on not_found: project, bucket, object, folder, or upload.
  • issues lists every field that is wrong on validation_failed, each with a field, a code (required, too_long, out_of_range or invalid) and a message.

Codes

CodeStatusRetryableWhen
already_exists409noSomething with that identity already exists
bucket_limit_reached403noThe project already holds as many buckets as it can
bucket_name_taken409noAnother bucket in the project has that name
bucket_not_empty409noThe bucket still holds files; delete them, or delete with force=true
conflict409noThe request clashes with the current state
folder_not_empty409noThe folder still holds files; delete them first
forbidden403noThe caller may not do this
internal500noSomething went wrong on our side
invalid_request400noThe request is malformed: a bad cursor, limit, query value or JSON body
method_not_allowed405noThe route exists but not for that method; see Allow
not_found404noThe route, project, bucket, file or upload does not exist
payload_too_large413noThe body is over 1 MB
preset_limit_reached403noThe bucket already has 20 presets; delete one first
public_buckets_unavailable403noBuckets cannot be made public yet
storage_quota_reached403noThe file does not fit in the project’s storage
taken_down403noWe took the file or its bucket down because it broke our terms, so it cannot be downloaded or copied
unauthenticated401noThe bearer token is missing or not one we accept
unavailable503yesSomething the request depends on is not available right now
unsupported_media_type415noThe body is not application/json
upload_finished409noThe upload expired, was cancelled or refused, or its file was since replaced
upload_incomplete409noThe file has not arrived; send it with the upload link, then finish again
upload_limit_reached403noThe project has too many uploads in progress
upload_size_mismatch409noThe file is larger than declared, or its digest does not match
validation_failed422noFields are wrong; see issues

Last updated