Skip to content
T4

s3-api

S3 API

S3 API

T4 implements the subset of S3 that everyday tools use. Path-style endpoint:

https://t4.dalang.io/{bucket}/{key}

Supported

OperationNotes
ListBuckets, CreateBucket, HeadBucket, DeleteBucketa bucket must be empty before deletion
PutObject, GetObject, HeadObject, DeleteObjectRange supported
DeleteObjectsup to 1,000 keys per request
ListObjectsV2prefix, delimiter, max-keys, continuation-token, start-after
CopyObjectwithin the same bucket
Multipartcreate, upload part, complete, abort, list parts
Presigned URLsGET, PUT, HEAD, DELETE; maximum 7 days
GetBucketLocation, GetBucketVersioningversioning is always Suspended

Unsupported operations return 501 NotImplemented rather than half-working behaviour: ACL, policy, CORS, lifecycle, tagging, object lock, select, inventory, and ListObjects v1.

Authentication

Header Authorization: AWS4-HMAC-SHA256 or a presigned query. service must be s3; any region is accepted. The payload hash may be SHA-256, UNSIGNED-PAYLOAD, or STREAMING-AWS4-HMAC-SHA256-PAYLOAD (aws-chunked).

The server clock must be within ±15 minutes of the client.

ETag

  • PutObject and CopyObject: MD5 of the content.
  • Multipart: md5(concat(md5(part)))-part_count, exactly like S3.

Errors

Standard XML:

<Error>
  <Code>NoSuchKey</Code>
  <Message>objek tidak ditemukan</Message>
  <Resource>assets/report.pdf</Resource>
  <RequestId>…</RequestId>
</Error>

Common codes: SignatureDoesNotMatch, InvalidAccessKeyId, RequestTimeTooSkewed, NoSuchBucket, NoSuchKey, BucketNotEmpty, BucketAlreadyOwnedByYou, InvalidBucketName, EntityTooLarge, InvalidRange, NotImplemented.

Metadata

  • Content-Type is stored and returned.
  • x-amz-meta-* headers are stored as-is.
  • Last-Modified is UTC.

See also Limits and Signed URLs.