Basalt Storage

S3 API reference

Basalt speaks the S3 REST API. Anything that talks to AWS S3 talks to us with one changed line.

Endpoint

Endpointhttps://ru1.trixycon.com
Regioneu-north-1
Addressingpath-style and virtual-hosted both accepted
SignatureAWS Signature Version 4
TLSTLS 1.2 and 1.3 only, HTTP/2 enabled

Anonymous requests to the endpoint root return AccessDenied. That is expected — the root is not a website.

Access keys

Create scoped key pairs in the console under Access keys. Keys can be limited to a bucket prefix and to a set of operations.

# check credentials and list buckets
aws --endpoint-url https://ru1.trixycon.com s3 ls

# presign a 15 minute download link
aws --endpoint-url https://ru1.trixycon.com \
    s3 presign s3://media/reel.mp4 --expires-in 900

Supported operations

OperationMethodNotes
ListBucketsGET /authenticated only
ListObjectsV2GET /{bucket}prefix, delimiter, continuation-token
GetObjectGET /{bucket}/{key}Range, If-None-Match, If-Modified-Since
HeadObjectHEAD /{bucket}/{key}returns ETag, size, storage class
PutObjectPUT /{bucket}/{key}up to 5 GiB single-shot
CreateMultipartUploadPOST ?uploadsup to 10 000 parts, 5 TiB total
UploadPartPUT ?partNumber5 MiB minimum except last part
CompleteMultipartUploadPOST ?uploadIdETag is a composite digest
DeleteObjectsPOST ?delete1 000 keys per call
PutBucketLifecyclePUT ?lifecycleexpiration and abort-incomplete rules

Error format

Errors are S3-shaped XML. Keep the RequestId — support asks for it first.

HTTP/2 404
content-type: application/xml
x-amz-request-id: 8f2b1c6d4a9e0731

<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>NoSuchKey</Code>
  <Message>The specified key does not exist.</Message>
  <Key>2026/dataset.tar.zst</Key>
  <RequestId>8f2b1c6d4a9e0731</RequestId>
</Error>

Service limits

LimitValue
Max object size5 TiB
Max single-shot PUT5 GiB
Parts per multipart upload10 000
Buckets per account1 000
Keys per DeleteObjects call1 000
Anonymous egress per IP2 MiB/s, 4 connections
Presigned URL max TTL7 days

Anonymous limits apply to public buckets such as /b/public/. Authenticated traffic is not rate limited.

Health checks

PathReturns
/healthliveness JSON, no auth
/status.jsoncomponent state and rolling metrics