Skip to content

Object storage API error reference

Reference · Updated Sep 2026

Coming from another cloud?

▸AWS·S3 Error Codes

This Quake AI feature maps to AWS’s S3 Error Codes.

▸DigitalOcean·Spaces Errors

This Quake AI feature maps to DigitalOcean’s Spaces Errors.

Object storage API error reference

This page documents common error responses from the Object Storage API, covering both the Swift-native and S3-compatible (SigV4) interfaces. Use this reference when S3 or Swift API calls return unexpected errors.

S3-compatible API errors#

The S3-compatible interface uses AWS-standard error response formats. Errors are returned as XML with an <Error> element containing <Code>, <Message>, <RequestId>, and <Resource>.

Endpoint configuration#

The S3 examples on this page use $RUMBLE_S3_ENDPOINT for the regional Object Storage endpoint. Set it before running them, and replace the region segment to match your region:

bash
export RUMBLE_S3_ENDPOINT=https://object.us-east-1.rumble.cloud

The AWS CLI also reads this value from its native AWS_ENDPOINT_URL variable or the --endpoint-url flag.

Example error response#

xml
<Error>
  <Code>InvalidAccessKeyId</Code>
  <Message>The access key does not exist</Message>
  <RequestId>tx00000abc123def456-00661234-default</RequestId>
  <Resource>/my-bucket/my-key</Resource>
</Error>

Authentication and authorization errors#

Error codeHTTP statusMeaningRetryable?Resolution
InvalidAccessKeyId403The access key does not match any known credentialsNoVerify your EC2 credentials exist: openstack ec2 credentials list. Regenerate if needed.
SignatureDoesNotMatch403The request signature does not match the computed signatureNoCheck region (use us-east-1), endpoint URL, and secret key. Regenerate credentials if needed.
AccessDenied403The credentials are valid but lack permission for this operationNoVerify credential project scope matches the container's project.
RequestTimeTooSkewed403Client clock is more than 15 minutes offset from server timeNoSync your system clock with NTP.

Credential type confusion#

The S3-compatible interface requires EC2 credentials, not application credentials. This is the most common cause of authentication failures.

Credential typeWorks withHow to create
EC2 credentialsS3-compatible API (aws s3, boto3, rclone)openstack ec2 credentials create
Application credentialsOpenStack API (openstack CLI, Keystone)openstack application credential create

If you are using application credentials with an S3 client, all requests will fail with InvalidAccessKeyId. Switch to EC2 credentials.

Project scope mismatch#

EC2 credentials are scoped to a specific project. If you create credentials in project A but attempt to access a container in project B, the request will fail with AccessDenied.

Diagnosis:

bash
openstack ec2 credentials list -c Access -c Project\ ID

Verify the Project ID matches the project that owns the container.

Resolution: Create credentials in the correct project:

bash
openstack ec2 credentials create --project CORRECT_PROJECT_ID

Signing configuration#

The S3-compatible interface uses AWS SigV4 signing. Common misconfigurations:

ConfigurationRequired valueWhat happens if wrong
Regionus-east-1 (unless region-specific)SignatureDoesNotMatch
Endpoint URLObject storage endpoint for your regionConnection refused or SignatureDoesNotMatch
Signature versionSigV4 (s3v4)SignatureDoesNotMatch or InvalidArgument

AWS CLI configuration example:

bash
aws configure set default.s3.signature_version s3v4
aws configure set default.region us-east-1

Transfer and upload errors#

EntityTooLarge#

HTTP status: 400

Cause: Single-part upload exceeds the maximum object size (5 GB for a single PUT). Files larger than 5 GB require multipart upload.

Resolution:

Configure your client for multipart upload:

bash
aws configure set default.s3.multipart_threshold 64MB
aws configure set default.s3.multipart_chunksize 64MB

Incomplete multipart uploads#

Symptom: Upload was interrupted. The object does not appear in the container, but storage is consumed by uploaded parts.

Diagnosis:

bash
aws s3api list-multipart-uploads --bucket YOUR_CONTAINER --endpoint-url $RUMBLE_S3_ENDPOINT

Resolution:

Abort the incomplete upload:

bash
aws s3api abort-multipart-upload --bucket YOUR_CONTAINER --key YOUR_KEY --upload-id UPLOAD_ID --endpoint-url $RUMBLE_S3_ENDPOINT

Timeout during large transfers#

Cause: Network bandwidth or latency causes individual part uploads to exceed the client's timeout.

Resolution:

  • Increase the chunk size to reduce the number of round trips
  • Increase client timeout settings
  • Use rclone for large or batch transfers (built-in retry and resumable uploads)

Swift-native API errors#

The Swift-native endpoint sits behind the same gateway as the S3-compatible interface. For several conditions the gateway returns S3-style error codes as plain-text bodies (for example NoSuchBucket and NoSuchKey) rather than the upstream Swift response. The entries below give the body string the gateway actually returns, so you can match on it.

401 Unauthorized#

Cause: The X-Auth-Token header carries no valid token: the token expired, was revoked, or never existed. The same response covers an expired token and a bogus or never-issued token.

Response body: AccessDenied (plain text, not Unauthorized).

Resolution: Re-source your credentials and issue a fresh token:

bash
source openrc.sh
openstack token issue

404 from an anonymous request#

Cause: A Swift request sent without an X-Auth-Token header is routed to the S3-compatible gateway, which reads the URL segments as a bucket and key. Anonymous Swift calls do not return 401.

Response body: 404 Not Found with the body NoSuchKey.

Resolution: Send a valid token. If a Swift call returns 404 where you expected an authentication error, confirm you are sending X-Auth-Token before investigating an authorization bug. The Object Storage API reference covers the shared S3 and Swift path behavior.

403 Forbidden#

Cause: The token is valid but does not have the correct role for the requested container or operation.

Resolution: Verify your role assignment and project scope:

bash
openstack role assignment list --user YOUR_USER --project YOUR_PROJECT

404 Not Found#

Cause: The container or object does not exist, or you are using the wrong account prefix.

Response body: The gateway rewrites the Swift 404 to an S3-style code: a missing container returns NoSuchBucket, and a missing object returns NoSuchKey. Both are plain text, so a search for "Container not found" or "Object not found" returns no match.

Resolution:

bash
openstack container list
openstack object list YOUR_CONTAINER

405 Method Not Allowed#

Cause: The HTTP verb is not supported for the target, for example a PATCH on an object.

Response body: MethodNotAllowed

Resolution: Use a supported verb (GET, PUT, POST, DELETE, HEAD, or COPY) for the operation.

409 Conflict#

Cause: The request conflicts with the current state of the resource. The common case is a DELETE on a container that still holds objects.

Response body: There was a conflict when trying to complete your request.

Resolution: Delete the objects first, then the container. To remove a container and its contents in one step:

bash
openstack container delete --recursive YOUR_CONTAINER

412 Precondition Failed#

Cause: A required or conditional header is missing or malformed, for example a COPY request without a Destination header.

Response body: Bad URL

Resolution: Supply the required header. For a COPY, set Destination to /CONTAINER/OBJECT.

400 EntityTooLarge#

HTTP status: 400

Cause: A single object upload exceeds the maximum object size (5 GB for a single PUT). On Quake AI the gateway returns HTTP 400 with the body EntityTooLarge on both the Swift-native and S3-compatible interfaces. A standalone Swift proxy without the Quake AI gateway returns 413 Request Entity Too Large; Quake AI does not emit 413 for this condition.

Response body: EntityTooLarge

Resolution: Use Swift's Static Large Object (SLO) or Dynamic Large Object (DLO) feature for files larger than 5 GB, or use the S3-compatible interface with multipart upload.

429 Too Many Requests#

Cause: Too many API requests in a short time window. Rate limits are enforced at the gateway layer, not by Swift itself.

Resolution: Wait and retry with exponential backoff. Check for a Retry-After header in the response; if present, wait at least that many seconds before retrying.


When to escalate#

Escalate to support when:

  • Freshly created EC2 credentials fail with InvalidAccessKeyId immediately after creation
  • AccessDenied persists despite correct project scope and credential verification
  • Multipart uploads fail consistently even with correct configuration and adequate quota
  • Swift-native 401 errors persist after re-sourcing valid credentials and issuing a fresh token

Escalation-ready evidence checklist#

ItemHow to get it
Access key (not the secret)openstack ec2 credentials list -c Access
Project IDopenstack project show -c id "$OS_PROJECT_ID" -f value (or echo $OS_PROJECT_ID)
Swift tokenopenstack token issue -f value -c id
Endpoint URLThe value of $RUMBLE_S3_ENDPOINT, AWS_ENDPOINT_URL, or --endpoint-url
Full error responseError XML or JSON from the API call
Request method and pathThe HTTP method and URL of the failed request
TimestampUTC time when the error occurred

See also#

Was this page helpful?