reading node metrics… status
basalt/storage

home / api reference

S3 API reference

Basalt speaks the S3 REST API. Anything that talks to AWS S3 talks to Basalt with one changed line. Version v1, last updated 2026-06-11.

Endpoint

Endpointhttps://nl1.trixycon.com
Regioneu-west-3
Addressingpath-style and virtual-hosted
SignatureAWS SigV4
TLS1.2 / 1.3, HTTP/2
Anonymous requests to the endpoint root answer AccessDenied. Expected: the root is not a website.

Access keys

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

examples
# verify credentials, list buckets
aws --endpoint-url https://nl1.trixycon.com s3 ls

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

Supported operations

OperationRequestNotes
ListBucketsGET /authenticated only
ListObjectsV2GET /{bucket}prefix, delimiter, continuation-token
GetObjectGET /{bucket}/{key}Range, If-None-Match, If-Modified-Since
HeadObjectHEAD /{bucket}/{key}ETag, size, storage class
PutObjectPUT /{bucket}/{key}up to 5 GiB single-shot
CreateMultipartUploadPOST ?uploads10 000 parts, 5 TiB total
UploadPartPUT ?partNumber5 MiB minimum except the last part
CompleteMultipartUploadPOST ?uploadIdcomposite ETag
DeleteObjectsPOST ?delete1 000 keys per call
PutBucketLifecyclePUT ?lifecycleexpiration, abort-incomplete

Error format

Errors are S3-shaped XML with application/xml, whatever the key looks like. 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 egress2 MiB/s per connection
Anonymous concurrency32 connections
Presigned URL max TTL7 days
Anonymous limits apply to public buckets such as public/. Authenticated traffic is not rate limited.

Health and metering

PathReturns
/healthliveness JSON, no auth
/status.jsonnode counters, component state, 24 h history
Both are collected from the serving node every 5 minutes and are safe to poll.