S3 Compatibility
Endpoint
https://<org-id>.buckets.excloud.inYour org ID is shown in exc me. Every org gets its own subdomain — that’s how bucket name uniqueness is scoped.
Region
Pick any value; SDKs require one for signature calculation but the server doesn’t care. The recommended value is auto.
Signature
AWS Signature Version 4 (SigV4). Path-style and virtual-hosted-style addressing both work.
Supported operations
| Category | Supported |
|---|---|
| Service / bucket | ListBuckets, HeadBucket, CreateBucket, DeleteBucket, GetBucketLocation, GetBucketAcl, PutBucketAcl |
| Objects | GetObject, HeadObject, PutObject, DeleteObject, DeleteObjects (bulk), CopyObject, ListObjectsV2, ListObjectVersions |
| Multipart | CreateMultipartUpload, UploadPart, UploadPartCopy, CompleteMultipartUpload, AbortMultipartUpload, ListMultipartUploads, ListParts |
| Presigned URLs | Yes (GET, PUT) |
| Range reads | Yes (Range: bytes=...) |
| Conditional requests | Yes (If-Match, If-None-Match, If-Modified-Since) |
| Server-side encryption | Yes (encryption at rest is on by default) |
Not supported (yet)
- S3 Object Lock / WORM
- S3 Lifecycle policies (object expiry, transition)
- Replication
- Inventory
- Event notifications
- Static website hosting (use
is_public=true+ presigned URLs or a CDN in front)
If you need one of these, email [email protected].
SDK configuration examples
AWS CLI (~/.aws/config profile)
[profile excloud]
region = auto
endpoint_url = https://<org-id>.buckets.excloud.inOr have exc write it for you:
exc buckets keys configure AKIA... --profile excloudThen:
aws --profile excloud s3 ls
aws --profile excloud s3 cp ./file.txt s3://my-bucket/boto3 (Python)
import boto3
s3 = boto3.client(
"s3",
endpoint_url="https://<org-id>.buckets.excloud.in",
region_name="auto",
aws_access_key_id="AKIA...",
aws_secret_access_key="...",
)Go (aws-sdk-go-v2)
cfg, err := config.LoadDefaultConfig(ctx,
config.WithRegion("auto"),
config.WithEndpointResolverWithOptions(aws.EndpointResolverWithOptionsFunc(
func(service, region string, opts ...interface{}) (aws.Endpoint, error) {
return aws.Endpoint{
URL: "https://<org-id>.buckets.excloud.in",
}, nil
},
)),
)
client := s3.NewFromConfig(cfg)Node.js (AWS SDK v3)
import { S3Client } from "@aws-sdk/client-s3";
const s3 = new S3Client({
region: "auto",
endpoint: "https://<org-id>.buckets.excloud.in",
forcePathStyle: false,
credentials: {
accessKeyId: "AKIA...",
secretAccessKey: "...",
},
});rclone
[excloud]
type = s3
provider = Other
access_key_id = AKIA...
secret_access_key = ...
endpoint = https://<org-id>.buckets.excloud.in
region = autoSanity check
aws --endpoint-url https://<org-id>.buckets.excloud.in s3 lsIf credentials are correct you’ll see every bucket in your org. A 403 means the access key isn’t valid (or has been deleted); a network error means the endpoint URL is wrong.
Prev
QuickstartNext
Access Keys