
The AIOZ Storage CLI is the standard AWS CLI with one extra flag: --endpoint-url https://s3.aiozstorage.network. You configure it once with your access grant keys, then run the usual aws s3 commands. Two settings need care on recent CLI versions: path-style addressing and upload checksums.
TL;DR:
aws configure with your AIOZ Storage access key and secret, and add --endpoint-url https://s3.aiozstorage.network to each command.endpoint_url in a profile, so plain aws s3 ls talks to AIOZ Storage.s3.aiozstorage.network don't resolve in DNS.MissingContentLength, so set request_checksum_calculation = when_required.Updated Oct 19, 2026: added a table of how CLI settings differ between Amazon S3 and AIOZ Storage, a profile that sets everything once, real output from a test against the endpoint, and fixes for the errors you're most likely to hit.
No. The AIOZ Storage CLI docs use the AWS CLI, pointed at our S3 endpoint. You install it from AWS's own guide and authenticate with the same access key and secret you'd use in an SDK.
The docs link to AWS's install and configure pages, since there's no AIOZ installer:
# Install (see AWS's official guide for your OS)
# https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html
aws configureaws configure asks for an access key ID, a secret access key, a default region and an output format. Paste the key pair from your AIOZ Storage access grant and use us-east-1 as the region, the value the AIOZ SDK docs sign with.
You can pass the endpoint on every command, or set it once. A named profile is the cleanest way, because it also holds the two settings below:
# ~/.aws/config
[profile aioz]
region = us-east-1
endpoint_url = https://s3.aiozstorage.network
request_checksum_calculation = when_required
s3 =
addressing_style = path
# ~/.aws/credentials
[aioz]
aws_access_key_id = YOUR_ACCESS_KEY_ID
aws_secret_access_key = YOUR_SECRET_ACCESS_KEYexport AWS_PROFILE=aioz
aws s3 ls # lists your buckets on AIOZ Storage
aws s3 cp ./report.pdf s3://my-bucket # no --endpoint-url needed nowThe endpoint_url profile setting and the AWS_ENDPOINT_URL and AWS_ENDPOINT_URL_S3 environment variables are standard AWS CLI v2 options. A --endpoint-url flag on the command line overrides them.
The commands are the same on both, and what changes is the setup around them:
| Setting | Amazon S3 | AIOZ Storage |
|---|---|---|
| Endpoint | none, the CLI picks one per region | --endpoint-url https://s3.aiozstorage.network or endpoint_url in the profile |
| Region | the bucket's real region | us-east-1 for signing |
| Addressing style | auto (virtual-hosted) | path style; bucket subdomains don't resolve |
| Upload checksums | default when_supported works | set when_required (see our test below) |
| Credentials | IAM user or role keys | access key and secret from an access grant |
| Rate limit | per-prefix S3 limits | 100 requests per second per account |
The AWS CLI is built on botocore, the same library as boto3. On Oct 19, 2026 we used botocore 1.43.107 with a fake key against s3.aiozstorage.network. A fake key can't upload anything, but the error tells you how far a request got. InvalidAccessKeyId means the request passed the endpoint's checks up to the key lookup, as the output shows:
botocore 1.43.107
addressing_style=auto (default) list_objects_v2: url=https://s3.aiozstorage.network/my-bucket?list-type=2&encoding-type=url -> InvalidAccessKeyId
addressing_style=auto (default) put_object: url=https://s3.aiozstorage.network/my-bucket/hello.txt -> MissingContentLength: You must provide the Content-Length HTTP header.
addressing_style=virtual list_objects_v2: url=https://my-bucket.s3.aiozstorage.network/?list-type=2&encoding-type=url -> EndpointConnectionError: Could not connect to the endpoint URL
request_checksum_calculation=when_supported: sent Transfer-Encoding: chunked, Content-Encoding: aws-chunked, X-Amz-Trailer: x-amz-checksum-crc32 -> MissingContentLength
request_checksum_calculation=when_required: sent Content-Length: 5 -> InvalidAccessKeyIdThree things follow from this run. With a custom endpoint, botocore's default auto mode already used path style, while forcing virtual failed because my-bucket.s3.aiozstorage.network doesn't exist in DNS. The default checksum mode streamed the upload without a Content-Length header, and the endpoint rejected it before checking the key. With when_required, the same upload sent Content-Length and got as far as the key check.
We didn't run the AWS CLI binary itself, and we had no real key, so a full upload is unconfirmed. AWS's data integrity guide lists the AWS CLI v2 among the tools that now checksum uploads by default, which is why the profile above sets when_required. If you'd rather not edit the profile, export AWS_REQUEST_CHECKSUM_CALCULATION=WHEN_REQUIRED does the same for one shell.
# Create a bucket
aws s3 --endpoint-url https://s3.aiozstorage.network mb s3://my-bucket
# List your buckets
aws s3 --endpoint-url https://s3.aiozstorage.network ls
# Delete an empty bucket
aws s3 --endpoint-url https://s3.aiozstorage.network rb s3://my-bucketrb only removes empty buckets, so add --force to delete a bucket and everything in it, the same as on Amazon S3, and keep in mind that each account can hold up to 100 buckets.
# List objects in a bucket
aws s3 --endpoint-url https://s3.aiozstorage.network ls s3://my-bucket
# Upload a file
aws s3 --endpoint-url https://s3.aiozstorage.network cp ./local-file.txt s3://my-bucket
# Download a file
aws s3 --endpoint-url https://s3.aiozstorage.network cp s3://my-bucket/local-file.txt ./downloaded.txt
# Copy an object within AIOZ Storage
aws s3 --endpoint-url https://s3.aiozstorage.network cp s3://my-bucket/file.txt s3://my-bucket/file-copy.txt
# Delete one object
aws s3 --endpoint-url https://s3.aiozstorage.network rm s3://my-bucket/local-file.txt
# Delete every object under a prefix
aws s3 --endpoint-url https://s3.aiozstorage.network rm s3://my-bucket/ --recursivecp works in both directions: it uploads when s3:// is the destination and downloads when it's the source. Add --recursive to copy a whole folder or prefix. A big recursive copy sends up to 10 requests at a time by default. With many small files that can pass 100 requests per second, so lower max_concurrent_requests in the profile if you hit the limit.
addressing_style = path in the profile.cp or put-object: set request_checksum_calculation = when_required or export AWS_REQUEST_CHECKSUM_CALCULATION=WHEN_REQUIRED.aws configure list --profile aioz.--endpoint-url or use the aioz profile.We run one S3 endpoint, https://s3.aiozstorage.network, for the CLI, the SDKs and tools like rclone. Your CLI keys come from an access grant, and objects are encrypted server-side on arrival. The usage limits page sets 100 requests per second, 100 buckets and 100 sub-users per account.
What the docs don't cover yet: aws s3api features beyond the listed bucket and object commands, such as versioning or Object Lock. The docs' encryption page also mentions an "AIOZ Storage CLI" for end-to-end encryption, which isn't documented or published yet.
Next step: the AIOZ Storage CLI docs list every command shown here.
Is there a dedicated AIOZ Storage CLI?
No. You use the standard AWS CLI with --endpoint-url https://s3.aiozstorage.network.
Do I need separate keys for the CLI and the SDKs?
No. The same access key and secret from your access grant work in the CLI, the SDKs and Postman.
How do I stop typing --endpoint-url on every command?
Set endpoint_url in a named profile, or export AWS_ENDPOINT_URL_S3=https://s3.aiozstorage.network for the session.
Why does aws s3 cp fail with MissingContentLength?
Recent AWS tools stream uploads with a checksum trailer and no Content-Length, and the endpoint rejected that in our test. Set request_checksum_calculation = when_required.
Do I need addressing_style = path?
Set it to be safe, even though in our test the default auto mode already chose path style with a custom endpoint, and virtual-hosted style failed because bucket subdomains don't resolve.
Does aws s3 rb delete a bucket that still has files in it?
Not by default, but adding --force deletes the bucket and its contents together.
Can aws s3 cp copy whole folders?
Yes, add --recursive to copy a local directory or a bucket prefix in one command.
aws configure asks for.
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.