Storage

Preview — pending review

This reference is generated from the platform API contract and is still under review. Operations, fields, and descriptions can change before publication.

Refresh the bucket object listing and counters

POST
/scopes/{scopeId}/storage/buckets/{bucketId}/actions/refresh

Re-reads the bucket's object inventory and recomputes the derived counters (object count, total size, last-modified), backing the "Refresh" control in the object browser toolbar. The command forces the read model to re-synchronise with the underlying object store so that recently uploaded, deleted or lifecycle-transitioned objects appear immediately instead of waiting for the periodic inventory sweep. The bucket configuration itself is not modified. Validation: bucketId must reference an existing, non-deleted bucket in the scope (unknown → 404 NOT_FOUND); the current bucket state must permit refresh — a bucket already in its deleting workflow cannot be refreshed (→ 409 CONFLICT); caller must hold reader-or-higher RBAC on the scope, otherwise 403 FORBIDDEN. Async & state: Synchronous — returns 200 with the refreshed Bucket resource carrying up-to-date objectCount, sizeBytes and updatedAt. The stored object listing (the BucketDetail objects) is capped at 10000 objects; past that objectCount/sizeBytes come from the container itself. If counters changed, a single resource.updated SSE frame is emitted (kind storage.bucket, patch {objectCount, sizeBytes, updatedAt}) so other open views converge. Errors: 401 unauthenticated; 403 caller lacks read access to the scope; 404 unknown scopeId or bucketId; 409 bucket is mid-deletion and cannot be refreshed; 429 refresh invoked too frequently (the UI can retry, so the backend rate-limits the sweep); 500 unexpected backend failure. Idempotency/Concurrency: This operation does not use Idempotency-Key; it may be omitted and a sent one is ignored. Every call re-lists the container and rewrites the stored inventory and counters, so repeated requests converge on the same counters while the container is unchanged.

Authorization

bearerToken
headerAuthorizationBearer <token>

An API token (pc_live_…) or a service-account key (sak_live_…), created in Identity & Access Management and sent as Authorization: Bearer <token>. Requests are rate limited per credential and per tenant: every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and a refused request gets 429 RATE_LIMITED with Retry-After.

Path Parameters

scopeId*string

Opaque ownership+authorization scope resolving to tenant + subscription + project.

bucketId*string

Identifier of the bucket.

Response Body

Refreshed bucket resource with recomputed object count and size.

application/json
  1. response

Object storage bucket, as listed and shown in the bucket detail header and properties.

origin?string

Where the resource was made -- portal for a create on the console, api for an object made straight against the OpenStack API (CLI, Terraform, the Kubernetes cloud provider) that discovery adopted. Informational; nothing behaves differently. Absent from a backend that predates it, which means portal.

Value in"portal""api""system""imported"
status*BucketStatus

Lifecycle status of a bucket. creating until its Swift container exists; active; deleting while the delete Operation drains and removes it (object operations, rule changes and a second delete are refused with 409); error when a create or delete failed (the bucket can be deleted again).

Value in"creating""active""deleting""error"
id*string
name*string

Globally unique, DNS-compatible bucket name used as the S3 endpoint host.

region*RegionId

Platform region code (a DNS-label-shaped slug, e.g. ist-1). No longer a closed enum: the set of valid region codes is operator-managed in the platform-region registry, so this carries only a shape guard. The authoritative set of activated regions is read from GET /regions; invalid-shape codes are VALIDATION_FAILED and codes absent from the registry are rejected at the resolving endpoint.

Match^[a-z][a-z0-9-]{1,39}$
objectCount*integer
sizeBytes*integer
visibility*BucketVisibility

Access visibility of a bucket. Authenticated can no longer be set (no container ACL is written for it); a bucket that carries it from before is reported as stored, but the only read ACL ever written for it is the private one.

Value in"Private""Public""Authenticated"
versioning*boolean
encryption*BucketEncryption

Whether the bucket's data is encrypted at rest. NONE = not encrypted; AT_REST = encrypted at rest by the object store with platform-managed keys. Set at bucket creation from the region's operator-asserted capability and never changed afterwards (the object store encrypts at write time). There are no S3 modes and no customer-managed keys.

Value in"NONE""AT_REST"
kmsKeyId*|

Always null -- customer-managed (KMS) keys are not offered.

storageClass*ObjectStorageClass

Storage class of a bucket, echoed on its objects. Saved with the bucket; it doesn't change how objects are stored or billed.

Value in"Standard""Infrequent Access""Archive"
blockPublicAcls*boolean

Ignore ACLs that grant public access.

blockPublicPolicy*boolean

While true, visibility cannot be set to Public (409). Bucket policy statements are not supported at all.

objectLock*boolean

Legacy platform delete protection. Enforced only on this API and the console; the object store itself does not enforce it. Direct OpenStack Swift access with the project's own credentials can delete objects. No new bucket can enable it.

accessLogging*boolean
logTarget*string

Server access log target bucket.

owner*string
createdAt*string
Formatdate-time
updatedAt*string
Formatdate-time
curl -X POST "https://example.com/scopes/string/storage/buckets/string/actions/refresh"
{  "origin": "portal",  "status": "creating",  "id": "string",  "name": "string",  "region": "string",  "objectCount": 0,  "sizeBytes": 0,  "visibility": "Private",  "versioning": true,  "encryption": "NONE",  "kmsKeyId": "string",  "storageClass": "Standard",  "blockPublicAcls": true,  "blockPublicPolicy": true,  "objectLock": true,  "accessLogging": true,  "logTarget": "string",  "owner": "string",  "createdAt": "2019-08-24T14:15:22Z",  "updatedAt": "2019-08-24T14:15:22Z"}