Organisations & buckets

Where buckets come from, why you cannot create one over the S3 API, and what a tier costs you.

The shape of an account

An organisation owns its buckets, credentials and team membership. People belong to an organisation; a credential belongs to exactly one. Nothing is shared between organisations, and the edge checks that on every request — a valid signature from one organisation cannot reach another’s bucket even if it knows the name.

A bucket lives in one region and holds objects under keys, exactly as it does on S3. Buckets are named pc-<org>-<label>: the prefix keeps names unique across the platform, and the label is yours.

One organisation can create multiple buckets. The internal prefix and shared storage pool are implementation details: the dashboard shows only that organisation’s buckets, and every bucket receives its own restricted upstream key so an edge mistake cannot cross the tenant boundary.

Creating them

Buckets are created in the dashboard, or with POST /v1/buckets. Not over the S3 API — and this is the single most common surprise for anyone whose tooling expects to provision its own bucket on first run.

You’ll see
405 MethodNotAllowed from CreateBucket or DeleteBucket — `aws s3 mb`, `mc mb`, or a tool provisioning its own bucket on first run.
Why
Bucket lifecycle belongs to the control plane, which also allocates the storage account, the data-plane key and the CORS rules that come with it. Letting the edge create buckets would create half of one.
Instead
Create buckets in the dashboard, or with `POST /v1/buckets` on the control-plane API. Everything object-level then works normally against that bucket.

The reason is that a bucket here is more than a namespace. Creating one allocates storage-account capacity, mints the internal key that signs upstream, and installs the CORS rules the dashboard’s own file browser needs. An S3-level CreateBucket would produce half of that, and the half it left out would fail later, somewhere less obvious.

Tiers

Each bucket is created in one of two tiers, and the tier is fixed for its lifetime. This replaces per-object storage classes, which do not exist here.

TierForTrade
HotAnything served to users: media, assets, uploads, active data.Costs more per byte stored, nothing extra to read.
CoolBackups, archives, anything written far more often than read.Cheaper to store, more expensive to read back.

To store colder data, create a cool-tier bucket and write to it — there is no automatic tier transition and no restore step, because nothing is ever archived out of reach. Bucket settings can separately remove older/deleted versions and abandoned multipart uploads after a retention period; those cleanup controls never move an object between Hot and Cool.

Canada East production currently has Hot capacity. Cool becomes available to an organisation only when the platform has assigned a healthy Cool storage pool; do not select it during the internal rollout unless the dashboard shows that capacity.

You’ll see
501 NotImplemented when a request sets x-amz-storage-class to GLACIER, STANDARD_IA, INTELLIGENT_TIERING or similar.
Why
Storage economics are expressed as a bucket's tier (hot or cool), chosen when the bucket is created, rather than per object.
Instead
Leave the storage class unset. If your tool sets one by default, point it at STANDARD. To store colder data, create a cool-tier bucket and write there. RestoreObject does not exist either, because nothing is ever archived.

Storage cleanup

Overwriting or deleting an object can leave an older version consuming storage, and an interrupted multipart upload can leave uploaded parts behind. The Usage page shows both in the last measured storage table.

Open a bucket’s Settings → Storage cleanup to choose how long to keep older/deleted versions and when to cancel unfinished multipart uploads. Cleanup runs asynchronously after the selected number of days; the latest visible object is never removed by these controls.

Visibility

A bucket is either private or public, and public means exactly one thing:

  • Private — every request must carry a valid signature, or be a presigned URL you issued.
  • Public — anonymous GET and HEAD work, with no credential at all. Writes still require a real, scoped identity. Public never means writable.

See public buckets & presigned URLs for which one to reach for.

You’ll see
An anonymous ListObjectsV2 request to a public bucket returns its object keys, even though the caller was only given one object's URL.
Why
Public visibility currently bypasses authentication for every bucket GET and HEAD, including bucket-level listing requests as well as object reads.
Instead
Keep the bucket private when object names or the bucket inventory are sensitive. Use short-lived presigned GET URLs for private downloads. Use a public bucket only for intentionally public assets until anonymous listing is restricted to signed callers.