# Locations

Onidel offers S3-compatible Object Storage in the following locations:

* Singapore 🇸🇬 ([test file](https://hello.s3.ap-southeast-1.onidel.cloud/memtest86-iso.iso))

* Sydney, Australia 🇦🇺 ([test file](https://hello.s3.ap-southeast-2.onidel.cloud/memtest86-iso.iso))

# Technology

The underlying technology powering Onidel Object Storage is [CEPH](https://en.wikipedia.org/wiki/Ceph\_(software)) - an open-source, robust distributed storage solution. Your data is **triple replicated** to make ensure its integrity and availability.

# Supported Features

* CORS

* Lifecycle Rules

* Versioning support

* Pre-signed URLs

* Static Website Hosting

# Pricing

## Ingress

Ingress is **free** on Onidel Object Storage. You can upload as much data as you like.

## Egress

Egress is **free up to 3x** the storage size so for example, if you have 1TB object storage plan, you can use up to 3TB of egress data transfer without any additional cost.

Excess bandwidth is billed at $0.01 per GB.

# Creating Object Storage Service

1. Log into Onidel Cloud Panel and navigate to [Storage > Object Storage](https://cloud.onidel.com/cloud/storage/object-storage). Then, click on **Create Object Storage Service** button.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBamdCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--b2ac6985a81c9cb59738175ea1607c7fd3d93b60/01-create.png.webp)

2. Now, choose the:

   * Location - if unsure, you can test the speed and latency to both of our locations using the test files provided at the top of this page.

     ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBamNCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--8a4ff8bf32cd09ac39c6c2964c1b3504bde9ebbb/02.1-set-country.png.webp)

   * Billing Cycle - annual billing gives you 20% discount. The billing period can be adjusted after the service is created.

   * Service Name - it is **not the same** as the bucket name. Later, you can create up to 100 unique storage buckets within one service and give a different name for each of them.

   * Storage Size - desired maximum object storage size, starts at 1TB and can be upgraded later. **It can not be downgraded later**.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBanNCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--f86d0a3df94a2ea2b5a719b044f3cba41ad0f16f/02-set-and-deploy.png.webp)

   After that, click on **Deploy Now** and the service should appear in the [Object Storage](https://cloud.onidel.com/cloud/storage/object-storage) list.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBandCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--5a3d3b8e78df92282cf446e5560c423d1bf5e8cf/03-visible-in-the-list.png.webp)

# Creating a Bucket

1. After going to your newly created service, you can see stats about usage of capacity, traffic and active bucket amount. You can also create a new bucket.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBajBCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--c4469990ea8c0c0f334e759477b9d45d46a976b2/04-create-bucket.png.webp)

2. Now select the:

   1. Name of your bucket - it will be referenced in apps that use your S3 bucket.

   2. Versioning toggle - if you need to store separate versions of objects uploaded to this bucket. This can increase the storage used by the object if there are multiple versions of it, but it lets you access specific version of the object instead of overwriting it on update. If unsure, leave this disabled. It can be enabled later.

   3. Object Lock toggle - if you want to enable WORM (Write Once Read Many) feature of object storage. This ensures no data can be deleted and that there are always past versions of objects stored. Enabling WORM also turns on Versioning option.

   Then confirm creation by clicking the **Create** button.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBajhCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--a3f20ba0dc1abb2de6a641a6f4efe84c2d514387/05-name-and-create-bucket.png.webp)

3. After the bucket is created, you will see it in the Bucket List.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBa0FCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--30f8a245bb0606b5cec927aedfc3a336c671d027/06-bucket-created.png.webp)

# Managing Objects from the Panel

Onidel Cloud Panel offers a Web UI where you can upload files, create paths and manage them in an easy and intuitive way.

1. After choosing the bucket from the list, you can drag and drop files into it in the **Objects** tab.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbDRCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--3e1c55a30c18ec496dfa4a067fe76ae61626941b/07-bucket-manage-objects.png.webp)

2. After choosing a file, the upload will start.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbDhCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--273d3bd8e65337bae82090b4b527d0658942354c/07.1-uploading.png.webp)

3. You can also create Folders (S3 paths) for a better object structure inside the bucket.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbUFCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--7422ecce0f8ede6d2dd2d8055c955b1f55c82b44/07.2-new-folder.png.webp)

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbUVCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--1f277f5a373e3f24490c659cb1d665a897f8ea98/07.3-folder-name.png.webp)

4. You can upload objects there by navigating to the folder and uploading files there.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbU1CIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--ccdf47f3f345cd91374c46c18c662b07ef02f303/07.5-cats-view.png)

# External Applications

## s3cmd

[s3cmd](https://github.com/s3tools/s3cmd) is a free, open-source client for s3 compatible object storage. It allows managing your objects using with a simple command line interface.

We will use it as an example of external application connecting to Onidel Object Storage service. You can [install s3cmd](https://github.com/s3tools/s3cmd/blob/master/INSTALL.md) via [pip](https://pypi.org/project/s3cmd/) or as a [package](https://pkgs.org/search/?q=s3cmd) on many Linux distributions.

1. To access your Object Storage from external applications, you will first need to get a bucket access key. To get it, go to the **Access Keys** tab and note your Access and Secret key.

   ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbVFCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--c8470097a7494afbdeb107dbe97acfab89c66859/09-access-keys.png.webp)

   It is recommended that each application uses a dedicated Access/Secret Key pair. To generate a new one for another app, just click **Add Access Key** button.

2. Next, we will perform initial configuration of s3cmd to let it manage the bucket.

   ```
   $ s3cmd --configure
   ```

   When asked, provide:

   * `Access Key` (from Step 1.)

   * `Secret Key` (from Step 1.)

   * `S3 Endpoint` - you can view the bucket endpoint in the Settings tab

     ![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbkFCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--4437a2aa3dc23104e1ddc3ba19d34c959864b3a2/20-apps-view-region.png.webp)

     It should be:

     * `s3.ap-southeast-1.onidel.cloud` in Singapore

     * `s3.ap-southeast-2.onidel.cloud` in Australia

   * `DNS-style bucket+hostname:port template for accessing a bucket` - Same as `S3 endpoint` above but with `%(bucket)s.` prepended to it:

     * `%(bucket)s.s3.ap-southeast-1.onidel.cloud` in Singapore

     * `%(bucket)s.s3.ap-southeast-2.onidel.cloud` in Australia

3. After that's done, you will be presented with the full configuration and asked if you want to test and save it to a local file.

   ```
   New settings:
     Access Key: S40SVDFEQL2YZ3A7LALN
     Secret Key: [redacted]
     Default Region: SG
     S3 Endpoint: s3.ap-southeast-1.onidel.cloud
     DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.s3.ap-southeast-1.onidel.cloud
     Encryption password: 
     Path to GPG program: /usr/bin/gpg
     Use HTTPS protocol: True
     HTTP Proxy server name: 
     HTTP Proxy server port: 0
   
   Test access with supplied credentials? [Y/n] Y
   Please wait, attempting to list all buckets...
   Success. Your access key and secret key worked fine :-)
   
   Now verifying that encryption works...
   Not configured. Never mind.
   
   Save settings? [y/N] y
   Configuration saved to '/home/user/.s3cfg'
   ```

4. From there, you should be able to access your bucket directly from the command line using the s3cmd utility.

   ```
   $ s3cmd ls s3://cat-pictures
   2026-03-14 15:05        20425  s3://cat-pictures/cat1.jpg
   2026-03-14 15:05        57982  s3://cat-pictures/cat2.jpg
   2026-03-14 15:05        68630  s3://cat-pictures/cat3.webp
   2026-03-14 15:05        32602  s3://cat-pictures/cat4.jpg
   2026-03-14 15:05        67608  s3://cat-pictures/cat5.jpg
   ```

5. Refer to [s3cmd documentation](https://s3tools.org/usage) for more detailed usage instructions.

## MIME Types

Some S3 clients do not set proper `Content-Type` header which makes our S3 backend to fall back to `application/octet-stream` for all uploaded objects. It could also occur when making direct API calls without specifying content type.

Notably, the [s3cmd](https://s3tools.org/usage) client needs to be provided with `-M` (`--guess-mime-type`) option when performing the `sync` command.

Incorrect MIME type indicator may cause some applications (especially web browsers) to not properly handle the data. To verify the MIME type of an object, you can use curl and look at the `Content-Type` HTTP response header.

```
$ curl -I http://bucketname.s3-website.ap-southeast-1.onidel.cloud/data.bin
HTTP/1.1 200 OK
Server: openresty/1.27.1.2
Date: Fri, 03 Jul 2026 11:12:25 GMT
Content-Type: application/octet-stream
Content-Length: 19420
...

$ curl -I http://bucketname.s3-website.ap-southeast-1.onidel.cloud/index.html
HTTP/1.1 200 OK
Server: openresty/1.27.1.2
Date: Fri, 03 Jul 2026 14:44:31 GMT
Content-Type: text/html
Content-Length: 1683
...
```

## Renaming Object Storage Service

Object Storage services can be renamed after purchase in case you accidentally picked the wrong name on creation or the purpose of the object storage changes.

If you ever need to rename the service, go to Object Storage services list and pick **Rename** from the details menu.

![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbmtCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--7795dc5d5214979137a28a210021dccd796f3bb6/080-rename-service-from-menu.png.webp)

Then you can pick new desired name for the service and update it.

![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbm9CIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--10cc8cff574aded75f978e224d21aac7fb668433/081-update-name.png.webp)

Now you should see the new name in the list of services.

![](https://cw.hypercore-internal.com/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBbnNCIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--b00ebca9628adf3d1fe49ce37e70e213ac8608cf/082-renamed-success.png.webp)

Keep in mind this is entirely separate from the buckets inside the Object Storage service. Buckets can be created, removed and renamed independently.

# Adding Your Own Domain

If you want to use your own domain with Onidel Object Storage, take a look at a [dedicated tutorial](https://kb.onidel.com/hc/kb/articles/1766052912-how-to-use-your-own-domain-with-onidel-object-storage).

# Limits

## Minimum Size

Minimum Object Storage plan is **1TB**. You can upgrade to higher capacity later.

## Maximum Number of Objects

The default limit is **3 million** stored objects. This can be increased on request - just [open a ticket](https://cloud.onidel.com/account/tickets/new) explaining your purpose and needs.


