
S3-compatible storage is object storage that accepts the same API requests as Amazon S3. Tools built for AWS, like the AWS CLI, boto3 and rclone, work with another provider once you change the endpoint and keys. Support differs at the edges, so test before you move data.
TL;DR:
Updated Oct 19, 2026: rewritten from a general overview into a definition, a pre-migration test list and AIOZ Storage's exact settings. Corrected the encryption claim (AIOZ encrypts server-side by default), added the upload checksum setting AIOZ's endpoint needs, and added a diagram, FAQ and references.
The AIOZ Storage docs define an S3-compatible service as one that "adheres to the same application programming interface (API) specifications and functionality as Amazon Simple Storage Service (S3)". Put simply, your code sends the HTTP requests it would send to AWS, and the provider answers in the same format.
Amazon S3 is the reference design: it keeps data as objects inside buckets, and each object has a key, its bytes and some metadata. If you want a refresher on that model first, start with our explainer on how S3 object storage works.
So the label describes a contract between the client on your side and the server on the provider's side. It says nothing about where your data lives, how it is protected or what it costs, since each provider decides those.
Every S3 call is an HTTPS request to an endpoint, and the AWS SDKs and CLI sign it with your secret key using Signature Version 4 (SigV4). A compatible provider checks that signature, runs the operation on its own backend and returns the response an S3 client expects.

That is why switching rarely needs code changes, since you only edit configuration, and the table shows the four values that move.
| Setting | Amazon S3 | A typical S3-compatible provider |
|---|---|---|
| Endpoint | s3.<region>.amazonaws.com (SDK default) | The provider's own URL |
| Credentials | IAM access key and secret | Keys issued in the provider's dashboard |
| Region | A real AWS Region | Often a fixed value used only for signing |
| Addressing style | Virtual-hosted (bucket in the hostname) | Often path-style (bucket in the URL path) |
Addressing style trips people up most, because AWS puts the bucket in the hostname by default while path-style puts it after the endpoint, as in endpoint/bucket/key. AWS says its own path-style URLs "will be discontinued in the future". Many compatible providers still expect them, and rclone's S3 backend uses path-style unless the provider needs the other form.
No. A compatible service matches the calls you make every day, but it doesn't have to copy every AWS feature around them, and the usual gaps fall into four areas:
The physical design can differ as well, and AWS states that S3 Standard stores objects across at least three Availability Zones in a Region. A decentralized provider spreads data over independent nodes instead, yet your client sees the same API.
Even plain uploads can differ. Recent AWS SDKs and the AWS CLI add a checksum to uploads by default and can send the body in aws-chunked encoding. Some compatible endpoints reject that, and AIOZ Storage's endpoint answered with MissingContentLength when we checked on Oct 19, 2026. One client setting fixes it, as the AIOZ section below shows.
Run these checks against a test bucket before you send production traffic to a new provider. Each item below is a common reason an S3 tool that works on AWS fails on a new endpoint.
addressing_style in boto3, forcePathStyle in the JavaScript SDK, UsePathStyle in Go.rclone check, which matches sizes and hashes. The checksum explainer covers why that matters.The payoff is that you keep your scripts, SDKs and backup tools, and you can leave a provider later without rewriting code. That is the main reason teams pick S3-compatible storage for backups, static assets, media libraries and datasets.
AIOZ Storage runs an S3-compatible API on top of AIOZ DePIN, a peer-to-peer network that the homepage puts at 191,285 edge nodes. We encrypt each object on the server side, then split it with Reed-Solomon erasure coding into data and parity pieces on different nodes. No single node holds a complete copy. The SDK and CLI examples in the docs all use the values in this table:
| Setting | AIOZ Storage value |
|---|---|
| Endpoint | https://s3.aiozstorage.network |
| Signing region | us-east-1 |
| Addressing style | Path-style (bucket subdomains don't resolve) |
| Upload checksums | Request checksum calculation set to "when required" |
| Credentials | Access key and secret from an access grant in the dashboard |
| Encryption | Server-side by default |
| Limits | 100 requests per second, 100 buckets and 100 sub-users per account |
| Price | 0.017 USD per GB-month stored, 0.005 USD per GB downloaded |
With the AWS CLI, you add one flag to the commands you already know, and this line from the CLI docs lists your buckets:
aws s3 --endpoint-url https://s3.aiozstorage.network lsIn boto3, the same settings go into the client, as in this version adapted from the Python SDK page:
import boto3
from botocore.config import Config
s3 = boto3.client(
"s3",
endpoint_url="https://s3.aiozstorage.network",
region_name="us-east-1",
aws_access_key_id="YOUR_ACCESS_KEY_ID",
aws_secret_access_key="YOUR_SECRET_ACCESS_KEY",
config=Config(
request_checksum_calculation="when_required",
response_checksum_validation="when_required",
s3={"addressing_style": "path"},
),
)
print([b["Name"] for b in s3.list_buckets()["Buckets"]])The two checksum options matter because the endpoint rejects the aws-chunked uploads that current AWS tools send by default (checked Oct 19, 2026). For CLI uploads, set the same behavior with an environment variable and turn on path-style addressing:
export AWS_REQUEST_CHECKSUM_CALCULATION=when_required
aws configure set default.s3.addressing_style path
aws s3 --endpoint-url https://s3.aiozstorage.network cp ./report.pdf s3://bucket-name/We did not run these snippets for this article, so no output is shown. The same idea extends past files: the AIOZ Storage Vector Database speaks the AWS S3 Vectors API, so the AWS vector SDKs work against it too.
What the docs don't cover yet: support for versioning, Object Lock, lifecycle rules, bucket policies and event notifications. The docs also describe end-to-end encryption through a self-hosted gateway, but that gateway is announced and not yet available to download. Test anything on this list before your app depends on it.
Next step: read the S3 Compatibility page in the AIOZ Storage docs, create an access grant, and run the CLI line above against your account.
What is S3-compatible storage in simple terms?
It is object storage from any provider that accepts Amazon S3 API calls, so tools written for S3 work after you change the endpoint and keys.
Do I need to change my code to use S3-compatible storage?
Usually you only change configuration: the endpoint URL, access keys, signing region and, for many providers, path-style addressing.
What is the difference between path-style and virtual-hosted-style requests?
Virtual-hosted style puts the bucket name in the hostname, while path-style puts it in the URL path after the endpoint. AWS defaults to virtual-hosted style, and many compatible providers expect path-style.
Can I use the AWS CLI with S3-compatible storage?
Yes, add --endpoint-url with the provider's URL to each command, or set the endpoint in your AWS CLI profile.
Does AIOZ Storage support the full Amazon S3 API?
Its docs cover bucket and object operations through the AWS CLI and the AWS SDKs for Python, JavaScript and Go. They don't list versioning, Object Lock, lifecycle rules or bucket policies, so test those first.
Is my data encrypted on AIOZ Storage?
Yes, AIOZ Storage encrypts data on the server side by default, before it is stored on AIOZ DePIN nodes.

Create a bucket and upload a file on AIOZ Storage in five steps: sign up, set a passphrase, add credits, and upload. Plus what the passphrase cannot recover.

The AIOZ Storage rate limit is 100 requests per second. See what the docs do and don't say, and how to stay under it with boto3 retries and a limiter.

AIOZ Storage erasure coding splits each object into pieces on DePIN nodes, so it survives node loss. See what it covers, what it doesn't, and what to back up.

Rename a file in an S3 bucket on AIOZ Storage from the dashboard, then move, delete and download files, and see which actions the docs say are not supported.

AIOZ Storage publishes llms.txt, a 46-link docs index, and llms-full.txt, all docs in one 164 KB file. See what each file contains and when to use which.

Vector database vs agent memory on AIOZ Storage: use the vector database for control over embeddings and metadata, Memory for simple Record and Recall calls.