The S3 API

Amazon S3 24 's REST API is the de facto standard for object storage: MinIO 30,943 , Ceph 205,849 , SeaweedFS 35,029 , Garage and Cloudflare 2 R2 all speak it. A bucket is a flat namespace of objects, byte strings stored under keys such as orders/2026/06/a.json; the slashes mean nothing to the server. Operations are HTTP verbs on /<bucket>/<key> (PUT, GET with an optional byte Range, HEAD, DELETE), and GET /<bucket>?list-type=2 lists keys, grouping them into folder-like CommonPrefixes when you pass a delimiter. Every request is signed with AWS 24 Signature Version 4, an HMAC-SHA256 over the method, path, headers and body hash, keyed by a secret derived from your secret key, the date, the region and the service. curl 7.75 3,008 and later can sign requests itself, so you can drive the MinIO server of MinIO in Docker with no SDK at all:

s3api.sh: buckets, keys, prefixes and ranges over plain HTTPShell
# The S3 API with nothing but curl: every request signed with AWS Signature Version 4.
S3=http://localhost:31900
AUTH=(--user booknest-admin:booknest-secret-2026 --aws-sigv4 "aws:amz:us-east-1:s3")
s3() { curl -s "${AUTH[@]}" "$@"; }
s3 -X PUT $S3/booknest-demo -o /dev/null -w "PUT /booknest-demo -> %{http_code}\n"
for key in orders/2026/06/a.json orders/2026/06/b.json orders/2026/07/c.json books.json; do
  s3 -X PUT --data-binary '{"book_id": 1, "title": "The Quiet Harbor"}' $S3/booknest-demo/$key
done
s3 "$S3/booknest-demo?list-type=2&prefix=orders/2026/&delimiter=/" | xmllint --format - |
  grep -E "<(Prefix|KeyCount)>"
s3 -r 0-12 $S3/booknest-demo/books.json -w "  <- %{http_code}, %{size_download} bytes\n"
Output
PUT /booknest-demo -> 200
  <Prefix>orders/2026/</Prefix>
  <KeyCount>2</KeyCount>
    <Prefix>orders/2026/06/</Prefix>
    <Prefix>orders/2026/07/</Prefix>
{"book_id": 1  <- 206, 13 bytes

The "folders" are only key prefixes, and the ranged GET returned 206 Partial Content, the read Parquet 129 readers rely on (httpfs and Object Storage). Rename and append do not exist; table formats are designed around both gaps.