Basalt speaks the S3 REST API. Anything that talks to AWS S3 talks to us with one changed line.
| Endpoint | https://ru3.trixycon.com |
| Region | eu-north-1 |
| Addressing | path-style and virtual-hosted both accepted |
| Signature | AWS Signature Version 4 |
| TLS | TLS 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.
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://ru3.trixycon.com s3 ls # presign a 15 minute download link aws --endpoint-url https://ru3.trixycon.com \ s3 presign s3://media/reel.mp4 --expires-in 900
| Operation | Method | Notes |
|---|---|---|
| ListBuckets | GET / | authenticated only |
| ListObjectsV2 | GET /{bucket} | prefix, delimiter, continuation-token |
| GetObject | GET /{bucket}/{key} | Range, If-None-Match, If-Modified-Since |
| HeadObject | HEAD /{bucket}/{key} | returns ETag, size, storage class |
| PutObject | PUT /{bucket}/{key} | up to 5 GiB single-shot |
| CreateMultipartUpload | POST ?uploads | up to 10 000 parts, 5 TiB total |
| UploadPart | PUT ?partNumber | 5 MiB minimum except last part |
| CompleteMultipartUpload | POST ?uploadId | ETag is a composite digest |
| DeleteObjects | POST ?delete | 1 000 keys per call |
| PutBucketLifecycle | PUT ?lifecycle | expiration and abort-incomplete rules |
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>
| Limit | Value |
|---|---|
| Max object size | 5 TiB |
| Max single-shot PUT | 5 GiB |
| Parts per multipart upload | 10 000 |
| Buckets per account | 1 000 |
| Keys per DeleteObjects call | 1 000 |
| Anonymous egress per IP | 2 MiB/s, 4 connections |
| Presigned URL max TTL | 7 days |
Anonymous limits apply to public buckets such as /b/public/. Authenticated traffic is not rate limited.
| Path | Returns |
|---|---|
/health | liveness JSON, no auth |
/status.json | component state and rolling metrics |