Skip to content

Object Storage Service API Reference

Reference · Updated Sep 2026

Coming from another cloud?

▸AWS·Amazon S3

This Quake AI feature maps to AWS’s Amazon S3.

▸Azure·Blob Storage

This Quake AI feature maps to Azure’s Blob Storage.

▸DigitalOcean·API

DigitalOcean APIhigh

  • Uses REST API over HTTPS with Bearer token authentication via personal access tokens, not OpenStack's Keystone token-based auth.
  • Base URL https://api.digitalocean.com/v2, incompatible with OpenStack APIs like Nova/Neutron.
  • Scoped permissions tied to granular API scopes based on team roles, unlike OpenStack role/project assignments.
  • Rate limits: 5000/hour, 250/minute.
DigitalOcean docs ↗
▸Google Cloud·Storage

This Quake AI feature maps to Google Cloud’s Storage.

▸Hetzner·Cloud API

Cloud APIhigh

  • Proprietary REST API over HTTPS with Bearer token auth, not OpenStack Identity API (keystone) endpoints or mechanisms.
  • Base URL https://api.hetzner.cloud/v1/ with resource-specific endpoints (e.g., /servers) vs OpenStack service endpoints (nova, cinder).
  • No multi-project handling in single auth; separate per-project tokens vs keystone scopes/projects.
  • Missing identity/catalog endpoints; no service discovery via API.
Hetzner docs ↗

Object storage service API reference

Endpoint documentation lives on the Object Storage API reference (Swift) and the S3-compatible API reference.

See https://docs.openstack.org/api-ref/object-store/. For error handling guidance, see the API error reference.

In these methods, \{account\} is the account or project identifier, \{container\} is the name of the container, and \{object\} is the name of the object. These methods manage containers and objects in the OpenStack Object Storage (Swift) service: creating, listing, uploading, downloading, and deleting containers and objects, and managing their metadata.

Base URL and account#

The Swift API is served under the /swift/ path prefix on the regional object storage host:

bash
https://object.{region}.rumble.cloud/swift/v1/{account}

\{account\} resolves to AUTH_\{project_id\}, where \{project_id\} is the Keystone project (tenant) UUID. For a project in us-east-1, the base URL has this form:

bash
https://object.us-east-1.rumble.cloud/swift/v1/AUTH_{project_id}

Discover the base URL for the current project from the service catalog:

bash
openstack catalog show object-store -c endpoints -f value

The paths below are relative to the host. Prepend https://object.{region}.rumble.cloud to each one. Every path includes the /swift/ prefix.

Authentication#

Every Swift request carries an X-Auth-Token header. Issue a token with the OpenStack CLI and pass it on each call:

bash
TOKEN=$(openstack token issue -f value -c id)
curl -H "X-Auth-Token: $TOKEN" \
  https://object.us-east-1.rumble.cloud/swift/v1/AUTH_{project_id}
HeaderRequiredValue
X-Auth-TokenYesA Keystone token scoped to the project that owns the account.

Methods#

List containers#

bash
GET /swift/v1/{account}

Create a container#

bash
PUT /swift/v1/{account}/{container}

Delete a container#

bash
DELETE /swift/v1/{account}/{container}

A container must be empty before deletion. Deleting a container that still holds objects returns 409 Conflict.

List objects in a container#

bash
GET /swift/v1/{account}/{container}

Upload an object#

bash
PUT /swift/v1/{account}/{container}/{object}

The request body carries the object data.

Download an object#

bash
GET /swift/v1/{account}/{container}/{object}

Delete an object#

bash
DELETE /swift/v1/{account}/{container}/{object}

Copy an object#

bash
COPY /swift/v1/{account}/{container}/{object}

The Destination header names the target as \{container\}/\{object\}, with no leading slash and no host. The response confirms the source with X-Copied-From and X-Copied-From-Account headers. A COPY without a valid Destination returns 412 Precondition Failed.

Get container metadata#

bash
HEAD /swift/v1/{account}/{container}

Set container metadata#

bash
POST /swift/v1/{account}/{container}

Set a custom key with an X-Container-Meta-\{name\} request header. A successful update returns 204 No Content. To remove a key, send an empty X-Remove-Container-Meta-\{name\} header.

Get object metadata#

bash
HEAD /swift/v1/{account}/{container}/{object}

Set object metadata#

bash
POST /swift/v1/{account}/{container}/{object}

Set a custom key with an X-Object-Meta-\{name\} request header. A successful update returns 202 Accepted. To remove a key, send an empty X-Remove-Object-Meta-\{name\} header.

Listing options#

Account and container listings return plain-text, newline-delimited names by default. The query parameters below control the response format and pagination. They apply to GET /swift/v1/\{account\} and GET /swift/v1/\{account\}/\{container\}.

ParameterDescription
format=jsonReturn a JSON array instead of plain text. Each entry carries name, count, bytes, and last_modified for containers, or name, bytes, last_modified, hash, and content_type for objects.
format=xmlReturn the same listing as XML.
limit=NReturn at most N entries.
marker=NAMEReturn entries after NAME (pagination cursor).
end_marker=NAMEReturn entries before NAME.
prefix=STRINGReturn only entries that begin with STRING.
delimiter=CHARACTERRoll up names that share a prefix up to CHARACTER, for pseudo-directory listings.
bash
curl -H "X-Auth-Token: $TOKEN" \
  "https://object.us-east-1.rumble.cloud/swift/v1/AUTH_{project_id}?format=json"
JSON
[{"name":"app-assets","count":537,"bytes":93412560,"last_modified":"2026-05-24T15:37:32.353Z"},
 {"name":"db-backups","count":689,"bytes":141128122,"last_modified":"2026-05-22T12:03:38.060Z"}]

Response status codes#

StatusMeaningBody
200 OKListing or download succeeded.Listing or object data.
201 CreatedContainer or object created (PUT), or object copied (COPY).Empty.
202 AcceptedObject metadata update accepted (POST on an object).Empty.
204 No ContentSuccess with no body (DELETE, HEAD, container metadata POST).Empty.
400 Bad RequestRequest rejected, for example an object larger than the size limit.EntityTooLarge.
401 UnauthorizedToken missing or invalid.AccessDenied.
404 Not FoundContainer or object absent.NoSuchBucket or NoSuchKey.
405 Method Not AllowedVerb unsupported on the path.MethodNotAllowed.
409 ConflictDelete attempted on a container that still holds objects.Conflict message.
412 Precondition FailedCOPY without a valid Destination.Bad URL.

Quake AI-specific behavior#

Default quotas#

Each container reports its quota in metadata headers, returned on a container HEAD or GET. The platform defaults:

HeaderDefaultApproximate value
X-Container-Meta-Quota-Bytes1125899906842624About 1.1 petabytes.
X-Container-Meta-Quota-Count1000000One million objects.

Account-level quotas appear on an account HEAD or GET:

HeaderDefaultApproximate value
X-Account-Meta-Quota-Bytes1099511627776About 1.1 terabytes.
X-Account-Meta-Quota-Containers1000One thousand containers.

Gateway fall-through and error bodies#

The object storage host serves both the Swift proxy (under /swift/) and the S3-compatible gateway. Two consequences follow:

  • An unauthenticated Swift request falls through to the gateway and returns 404 with a plain-text NoSuchKey body instead of a Swift 401. Pass X-Auth-Token to reach the Swift proxy.
  • Authenticated 404 responses on Swift paths return gateway-rewritten plain-text bodies: NoSuchBucket for a missing container, NoSuchKey for a missing object. They do not return the Swift-standard JSON or HTML error body.

Extended features#

The proxy supports the standard Swift capabilities below. This page does not detail them. Each entry links to the upstream reference:

Was this page helpful?