Skip to content
Coritan Docs

Create and delete buckets

Create a bucket in any region that offers Object Storage, follow the naming rules, and delete a bucket with or without its objects.

View as Markdown

A bucket holds objects under one name. Each Object Storage service holds up to 25 buckets, and each bucket lives in one region. You create and delete buckets on the service's Buckets tab, or through the API. Access keys cannot create or delete buckets, so S3 commands such as aws s3 mb are refused.

  • Sign in to the dashboard and open the service.
  • The service must be active to create or delete a bucket. While it waits for payment, while we set it up and while it is suspended, you can browse its buckets and download objects.

Every bucket name on your account starts with your account namespace and a hyphen, such as u7-. The Name field shows this prefix in front of what you type, and every client uses the whole name. The Bucket prefix row on the Overview tab shows yours.

A bucket name must follow these rules:

  • The whole name, prefix included, is 3–63 characters long. With the prefix u7-, the part you type can be up to 60 characters.
  • It uses only lowercase letters, digits, hyphens (-) and dots (.).
  • It starts and ends with a letter or a digit.
  • A dot cannot sit next to another dot or next to a hyphen, so u7-my..files and u7-my.-files are refused. Two hyphens in a row are allowed.

We change uppercase letters to lowercase. When you type the prefix yourself, we do not add it a second time.

Names are unique across your account, so two of your services cannot both have a bucket called u7-assets. After you delete a bucket, its name stays taken for 7 days.

You cannot rename a bucket or move it to another region. To change either, create a new bucket and copy the objects into it with an S3 client.

  1. Open the service and select the Buckets tab, then select Create bucket…. From the Object Storage list, you can instead select Create bucket on the service's card, or Create bucket in its ... menu. Each opens the Create a bucket page. The page's address is /dashboard/storage/<service id>/buckets/new.
  2. Under Name, type the part after your prefix, such as assets. The hint shows the full name and its length, such as Full name: u7-assets · 9/63. When the name breaks a rule, the message under the field says which.
  3. Under Region, choose where the bucket lives. The service's home region is selected at first. The list holds every region that can take a bucket right now.
  4. Under Protection, tick Keep versions to keep what each overwrite and delete replaces (Keep earlier versions of objects). Tick Object Lock to stop anyone deleting a version before its retention ends (Protect objects with Object Lock). You can turn Object Lock on only now, and it keeps Keep versions ticked.
  5. When default encryption is available, Encrypt new objects is ticked. Untick it to leave the bucket's new objects unencrypted. You can change it later on the bucket's Settings tab (Encrypt the objects in a bucket). If the box is missing, default encryption is not available yet.
  6. Read the This bucket card beside the form. It names the region and says in words what encryption, versions and Object Lock will do. On a phone it sits under the form.
  7. Select Create bucket.

A message confirms it, such as u7-assets created., and the Buckets tab shows the bucket in its list. Cancel and the Buckets link at the top of the page return to the tab without creating anything. If the request is refused, the page stays open with everything you entered, and a Could not create the bucket message says why.

A new bucket starts with one lifecycle rule, abort-incomplete-uploads, which aborts multipart uploads left unfinished for 7 days (The default rule).

The Buckets card says how many buckets the service has out of its limit, such as 3 of 25 on this service. The list is sorted by name, and each column heading sorts it another way.

Bucket
The bucket's full name. Select it, or anywhere in its row, to open the bucket's page on its Objects tab (Upload, download and delete objects). A lock beside the name marks a bucket with Object Lock.
Region
The code of the region the bucket lives in, such as FRA.
Objects and Size
How many objects the bucket held, and their total size, at the last measurement. We measure every bucket once an hour.
Measured
When we last measured the bucket. Not yet means we have not measured it since you created it.
Created
The date you created the bucket.

The menu at the end of each row has Browse objects, Settings and, while the service is active, Delete bucket….

Caution

Deleting a bucket with its contents destroys every object in it straight away. There is no undo and no copy.

  1. On the Buckets tab, open the bucket's menu and select Delete bucket….
  2. Read the dialog. For an empty bucket, it says that you lose nothing. For a bucket that holds objects, it gives how many objects and how much data you would destroy.
  3. For a bucket that holds objects, tick the box that offers to destroy them, such as Destroy the 1,284 objects in it. Without the tick, we refuse to delete the bucket.
  4. Type the bucket's full name, such as u7-assets.
  5. Select Delete bucket, or Delete bucket and contents for a bucket that holds objects.

A message confirms it, such as u7-assets deleted. or u7-assets deleted with 1,284 objects.

On a bucket that keeps versions, the contents include every older version and delete marker. A bucket with no current objects can still hold them, and its dialog then offers Destroy any older versions and delete markers in it. On a bucket with Object Lock, we refuse while any version is locked (Delete a bucket with Object Lock).

The dialog decides whether a bucket holds objects from the last hourly measurement. When you added objects to an empty bucket since then, the dialog shows no box, and we refuse the delete with u7-assets is not empty. Delete it with force to destroy its contents as well. Wait for the next measurement and try again, delete the objects first (Delete objects and folders), or delete the bucket through the API with force=true.

Deleting a bucket turns off its public URL and unlinks its custom domains. You can then link each domain to another bucket (Serve a bucket on your own domain).

The bucket leaves the list at once, and:

  • Its objects are destroyed. Clients that address the bucket get NoSuchBucket.
  • Access keys whose scope is that one bucket stop working. They stay on the Access keys tab, marked Inactive, until we remove them with the bucket 7 days later.
  • The bucket's name stays taken for 7 days.
  • Within 5 minutes, we delete its replication rules, and the rules of other buckets that replicate into it (Replicate a bucket to another region).

A new bucket answers at its region's endpoint, such as https://s3.fra.coritan.com:7337/u7-assets, for every key whose scope covers it. A key whose scope is All buckets on this account covers it from the start.

A bucket named u7-assets already exists
Your account already has a bucket with that name, on this service or on another one. Choose another name.
u7-assets was deleted recently and is still being removed. Pick another name, or wait for the removal to finish.
You deleted a bucket with that name in the last 7 days. Choose another name, or wait until 7 days have passed since the delete.
This service already has 25 buckets, which is the most one service may hold
Delete a bucket you no longer need, or order another service. The Create bucket… button is greyed out while the service is at its limit, and the Create a bucket page says This service is at its bucket limit in place of the form.
An error under Name, such as Dots and hyphens cannot be next to each other.
The name breaks one of the rules in Bucket names. Change it.
No region is available right now
No region can take a bucket at the moment. Try again later, or contact support.
That region does not offer object storage
The region stopped taking buckets after you opened the page. Choose another region.
u7-assets is not empty. Delete it with force to destroy its contents as well.
The bucket holds objects that the last measurement did not count. Delete a bucket gives three ways forward.
u7-assets still holds object versions. Delete it with force to destroy every version as well.
The bucket keeps versions, and older versions or delete markers are left in it. Tick the box in the dialog, or add force=true through the API.
u7-backups holds 3 locked versions, so it cannot be deleted yet.
Versions in the bucket are under retention or have a legal hold. Delete a bucket with Object Lock says what to do.
This service is suspended; it can be changed once it is active
You can create and delete buckets only while the service is active. Pay the overdue invoice (Failed payments and suspended services), then try again. The same message names the status pending while the service waits for payment.
Create bucket… is missing
The service is not active. The tab says Buckets can be created and deleted once the service is active; browsing works now.
Gateway refused the bucket: followed by a reason
The region's storage refused the request. Try again in a minute. If it keeps happening, contact support with the whole message.

Each request takes the service ID. A service that is not Object Storage on your account answers 404 with Object storage service not found.

GET /api/v1/client/object-storage/{service_id}/buckets lists the service's buckets, sorted by name:

Shell
curl https://api.coritan.com/api/v1/client/object-storage/1207/buckets \
  -H "Authorization: Bearer $CORITAN_TOKEN"
JSON
{
  "items": [
    {
      "id": 31,
      "name": "u7-assets",
      "region": "fra",
      "location_id": 1,
      "location_name": "Frankfurt",
      "quota_bytes": null,
      "used_bytes": 48318382080,
      "object_count": 1284,
      "usage_measured_at": "2026-09-26T09:00:00",
      "created_at": "2026-09-01T10:01:00",
      "deleted_at": null,
      "versioning": "enabled",
      "object_lock": {"enabled": false, "mode": null, "days": null, "years": null},
      "encryption": true,
      "cors_rules": 1,
      "lifecycle_rules": 2,
      "public_url": null,
      "custom_domains": 0,
      "endpoint": "https://s3.fra.coritan.com:7337",
      "url": "https://s3.fra.coritan.com:7337/u7-assets"
    },
    {
      "id": 32,
      "name": "u7-backups",
      "region": "fra",
      "location_id": 1,
      "location_name": "Frankfurt",
      "quota_bytes": null,
      "used_bytes": 0,
      "object_count": 0,
      "usage_measured_at": null,
      "created_at": "2026-09-26T08:40:00",
      "deleted_at": null,
      "versioning": "off",
      "object_lock": {"enabled": false, "mode": null, "days": null, "years": null},
      "encryption": false,
      "cors_rules": 0,
      "lifecycle_rules": 1,
      "public_url": null,
      "custom_domains": 0,
      "endpoint": "https://s3.fra.coritan.com:7337",
      "url": "https://s3.fra.coritan.com:7337/u7-backups"
    }
  ],
  "total": 2,
  "bucket_prefix": "u7-",
  "max_buckets": 25
}

Use id as the bucket_id in the other bucket and object requests, and name in S3 clients. endpoint is the regional endpoint the bucket answers at, and url is the bucket's address there. used_bytes and object_count come from the last hourly measurement at usage_measured_at, which is null until the first one. The list leaves out deleted buckets, so deleted_at is null.

versioning
off, enabled or suspended. Once it is enabled, it is never off again (Keep earlier versions of objects).
object_lock
enabled says whether the bucket has Object Lock. mode with days or years is the default retention, all null when there is none (Protect objects with Object Lock).
cors_rules and lifecycle_rules
How many CORS and lifecycle rules the bucket has. The dashboard's own CORS rule is not counted (Let websites use a bucket with CORS rules, Delete objects on a schedule with lifecycle rules).
encryption
true when the bucket encrypts the objects written to it. Objects written before it turned true are not encrypted (Encrypt the objects in a bucket).

GET /api/v1/client/object-storage/{service_id}/buckets/{bucket_id} returns one bucket in the same shape. A bucket that is not on this service, or that you deleted, answers 404 with Bucket not found.

public_url is the bucket's public URL while it is on, and null otherwise. custom_domains counts the domains linked to the bucket (Serve a bucket publicly).

url is the endpoint with the bucket's name added, as in https://s3.fra.coritan.com:7337/u7-assets. Where the region offers virtual-hosted addresses, url is the bucket's own hostname instead, such as https://u7-assets.s3.fra.coritan.com:7337, with no :7337 when the region answers on port 443. A name with a dot stays path style (Endpoints, ports and addressing styles).

Create a bucket through the API

Section titled Create a bucket through the API

POST /api/v1/client/object-storage/{service_id}/buckets takes the name, with or without your prefix, and optionally a region's location_id from GET /api/v1/client/object-storage/regions. Without location_id, the bucket goes in the service's home region.

Shell
curl -X POST https://api.coritan.com/api/v1/client/object-storage/1207/buckets \
  -H "Authorization: Bearer $CORITAN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "assets", "location_id": 1}'

To keep versions, add "versioning": true. To create the bucket with Object Lock, add object_lock, with a default retention or without one, such as "object_lock": {"mode": "COMPLIANCE", "years": 7} or "object_lock": {}. Object Lock turns versioning on whatever versioning says (Protect objects with Object Lock).

To leave out encryption, add "encryption": false. Without it, a new bucket encrypts its objects whenever default encryption is available, and "encryption": true answers 409 while it is not. The bucket in the answer has encryption set to true when its new objects are encrypted (Encrypt the objects in a bucket).

It answers 201 with the new bucket in the shape above. The errors:

Status detail Cause
409 This service is pending; it can be changed once it is active The service is not active. The message names its status.
409 This service already has 25 buckets, which is the most one service may hold The service is at its limit.
409 A bucket named u7-assets already exists Your account has a bucket with that name.
409 u7-assets was deleted recently and is still being removed. Pick another name, or wait for the removal to finish. You deleted a bucket with that name in the last 7 days.
422 Bucket name is required The name is empty, or holds only your prefix.
422 Bucket names are 3 to 63 characters including the account prefix The full name is too long.
422 Bucket names use lowercase letters, digits, hyphens and dots, and start and end with a letter or digit The name has another character, or starts or ends with a dot or hyphen.
422 Bucket names cannot have a dot next to another dot or a hyphen The name holds .., .- or -..
422 That region does not offer object storage The location cannot take a bucket.
502 Gateway refused the bucket: and a reason The region's storage refused the request.

Delete a bucket through the API

Section titled Delete a bucket through the API

DELETE /api/v1/client/object-storage/{service_id}/buckets/{bucket_id} deletes an empty bucket. Add force=true to destroy its objects as well:

Shell
curl -X DELETE "https://api.coritan.com/api/v1/client/object-storage/1207/buckets/31?force=true" \
  -H "Authorization: Bearer $CORITAN_TOKEN"
JSON
{"ok": true, "bucket": "u7-assets", "region": "fra", "objects_destroyed": 1284}

objects_destroyed counts the objects the request destroyed. Without force, a bucket that holds objects answers 409 with u7-assets is not empty. Delete it with force to destroy its contents as well., and nothing is deleted. A service that is not active answers 409 as it does for a create.

On a bucket that keeps versions, force=true destroys every version and delete marker as well. Without it, a bucket that holds any answers 409 with u7-assets still holds object versions. Delete it with force to destroy every version as well. On a bucket with Object Lock, the delete answers 409 while any version is locked, with a message such as u7-backups holds 3 locked versions, so it cannot be deleted yet.

The delete also turns off the bucket's public URL and unlinks its custom domains.

API operations on this page