Skip to main content

Included transfer

Bucket internet downloads consume the shared billing pool: 1 TB per organization per month plus earned instance allowances, including load balancer and database instances. Only overage is charged. Storage capacity and request prices remain separate.

Objects and their limits

These are S3’s own numbers, and they are enforced at S3’s values:
The single-upload ceiling is checked against the size you declare, before any payload is read. An oversized Content-Length is refused with EntityTooLarge (413 on the storage API) without transferring a byte — and a body that streams past the limit is cut off too.
The 5 MiB floor applies to every part except the last one named at completion, and it is checked at completion, not when the part is uploaded. A part list whose non-final part is short fails with EntityTooSmall after the bytes are already staged. Uploads you start and never finish keep their staged parts until something removes them. Add an abort_incomplete_multipart_upload lifecycle rule rather than relying on remembering.

Declare the upload length

Object uploads and multipart part uploads must promise their payload length. Send Content-Length on the storage API and on ordinary S3 uploads. Empty uploads remain supported with length 0; server-side copies do not need an upload body length. For supported S3 aws-chunked streaming modes, send X-Amz-Decoded-Content-Length: it counts payload bytes, excluding framing and trailers. The encoded wire length cannot replace it. Adding this header to a bare chunked request does not make that request an AWS streaming upload. Uploads without a declared payload length receive HTTP 411 before storage: MISSING_CONTENT_LENGTH on the storage API, or MissingContentLength on S3. A body that ends short of its declared length is rejected; a rejected part retry leaves the previously stored part intact. If you produce a pipe, generator, or archive of unknown size, buffer it to a file and send its measured length. For larger streams, buffer each multipart part and declare that part’s length. You do not need the complete object’s length in advance. Keep the multipart size limits above in mind. The Go SDK determines the remaining length of seekable bodies, including files, starting with v0.3.2. An arbitrary reader still needs a known length or buffering. An ETag alone cannot tell whether a producer delivered all the bytes it intended to send.

Storage classes

Two classes, and they name device tiers rather than access patterns: They keep S3’s uppercase spelling because the vocabulary is S3’s. Set a class per object with x-amz-storage-class on the upload, or move objects between classes with a lifecycle transition. The two classes bill separately, so the label an object carries decides which counter and which price its bytes land on. An unsupported class — STANDARD_IA, GLACIER, anything else S3 defines — is rejected rather than quietly stored as STANDARD.

Working with objects through the storage API

You do not need an S3 client. The storage API exposes the same object plane under /v1/buckets/{bucket}/objects, authenticated with your ordinary Basaltic credentials exactly like every other call to this API — useful for a service that already holds them and should not carry an S3 SDK as well:
A bucket’s Objects tab is a file browser over the same routes. Upload opens the Upload objects page, where you set a Folder prefix, pick a Storage class — Standard or Cold — and add Files. New folder creates a prefix, and selecting rows gives you Delete selected, which issues one delete per key rather than a bulk request — see the note below.Opening an object gives you Download and Delete, a Versions tab, and a Properties tab carrying its Tags alongside the retention controls.
Per-object sub-resources ride as query parameters on these routes — ?tagging, ?retention, ?legal-hold — and the same X-Amz-* headers apply on upload for storage class, encryption and object-lock settings. delimiter gives you the usual folder semantics through common_prefixes, and max_keys is capped at 1000 per page.
Bulk delete (POST ?delete) and server-side copy (x-amz-copy-source) are S3 endpoint features. Through the storage API, delete objects one at a time.