Skip to content

S3 operations reference

The S3 data-plane client implements the S3 API surface that Lockwell supports. If you have used the AWS SDK, the operation names and option names will look familiar.

This page lists every operation in one place so you can see the full breadth at a glance. Each operation is available in the Go, Node, and Java SDKs with matching names.

For the JSON alternative (bearer tokens instead of SigV4, no XML), see the native data-plane API. For tenant and key management, see the Admin API.

Buckets

OperationPurposeKey options
CreateBucketCreate a private bucketObject Lock enabled at creation
HeadBucketCheck that a bucket exists and you can reach it
DeleteBucketDelete an empty bucket
PutBucketVersioningEnable or suspend versioningEnabled, Suspended
GetBucketVersioningRead the versioning state

Buckets are always private. There is no public-bucket or anonymous-access toggle.

A public-bucket or anonymous-access toggle is a deliberate non-goal. Share objects with a presigned GET URL or

a native signed URL instead. :::

Objects: write

OperationPurposeKey options
PutObjectWrite an object from a buffer or a streamcontent type, user metadata, idempotency key, checksum algorithm, SSE-S3, retention, legal hold
CopyObjectServer-side copy within or across bucketsmetadata directive (COPY or REPLACE), copy-source conditionals, SSE
DeleteObjectDelete one object or one versionversion id
DeleteObjectsDelete up to 1000 objects in one requestquiet mode, per-key errors with partial success

PutObject accepts a stream, so you can upload an object larger than memory without buffering it. See Upload & download.

Objects: read

OperationPurposeKey options
GetObjectStream an object bodybyte range, version id, part number, response header overrides
HeadObjectRead object metadata without the bodybyte range, version id, response header overrides

Listing

OperationPurposeKey options
ListObjectsV2List objects by prefix, token-pagedprefix, delimiter, start-after, continuation token, max keys
ListObjectsList objects, marker-paged (the v1 form)prefix, delimiter, marker, max keys
ListObjectVersionsList versions and delete markersprefix, delimiter, key marker, version-id marker, max keys
ListMultipartUploadsList in-progress multipart uploadsprefix, delimiter, key marker, upload-id marker, max uploads
ListPartsList the parts of one multipart uploadpart-number marker, max parts

Every listing operation has a paginator that follows the continuation tokens for you: ListObjectsV2Paginator, ListObjectVersionsPaginator, ListMultipartUploadsPaginator, and ListPartsPaginator. Each exposes HasMorePages() and NextPage(). See Listing & pagination.

Multipart uploads

OperationPurposeKey options
CreateMultipartUploadStart a multipart uploadsame write options as PutObject
UploadPartUpload one partper-part checksum
UploadPartCopyFill a part by server-side copy from another objectcopy-source range and conditionals
CompleteMultipartUploadAssemble the uploaded parts into one objectidempotency key
AbortMultipartUploadDiscard an upload and its parts

See Multipart uploads for a full large-file example.

Tagging

OperationPurposeKey options
PutObjectTaggingReplace the tag set on an objectversion id
GetObjectTaggingRead the tag setversion id
DeleteObjectTaggingRemove all tagsversion id

Versioning

Versioning is controlled with PutBucketVersioning and GetBucketVersioning (above). Once enabled, every write keeps the prior version, a delete writes a delete marker, and you can read or delete a specific versionId. List versions with ListObjectVersions. See Versioning.

Object Lock

OperationPurposeKey options
GetObjectRetentionRead the retention mode and retain-until dateversion id
GetObjectLegalHoldRead the legal-hold statusversion id

Retention and legal holds are set when you write the object, through the PutObject options (retention mode and retain-until date, legal hold on or off). Object Lock must be enabled when the bucket is created. Governance-mode bypass is not supported. See Object Lock.

Presigned URLs

OperationPurposeKey options
PresignGetObjectBuild a signed GET URL a browser can fetch directlyexpiry (capped by the server)

The S3 client presigns GET only. To let a browser upload directly, use a native signed PUT URL from the app kit or native client.

That is a deliberate split: presigned writes on the S3 surface stay off, and the native signed URL is the supported upload path.

Checksums and integrity

Request a checksum on any write with the checksum option, using CRC32, CRC32C, CRC64NVME, SHA-1, or SHA-256. The SDK computes the digest on the client, the server verifies it, and the value comes back on the response. Multipart uploads support a checksum per part. See Checksums & integrity.

Conditional writes and idempotency

The S3 client does not put conditional headers on PutObject. Create-only (If-None-Match: *) and overwrite-only (If-Match: <etag>) writes are a feature of the native client.

CopyObject does support copy-source conditionals (If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since evaluated against the source object). Set an idempotency key on a write so a retried request is applied once. See Conditional writes & idempotency.

Retries

Construct a client with a retry policy. The default policy makes three attempts with exponential backoff and jitter, and retries idempotent requests (GET, HEAD, DELETE) along with writes that carry an idempotency key. The disabled policy makes a single attempt. See Errors & retries.

Server-side encryption

Objects are encrypted at rest by default with a per-tenant data key. Request the SSE-S3 server-managed mode explicitly with the encryption option on a write. SSE-KMS and SSE-C (external KMS and customer-provided keys) are not supported.

What the S3 client does not do

These are deliberate non-goals. They are not roadmap gaps, and the SDK will not expose them:

  • Presigned PUT, HEAD, or DELETE (use the native signed PUT URL for browser uploads).
  • Public or anonymous buckets, public sharing, ACLs.
  • SSE-KMS and SSE-C.
  • IAM, STS, AssumeRole, and bucket policies (use Lockwell access keys and scopes).
  • Website hosting, S3 Select, Inventory, Intelligent-Tiering, Object Lambda, S3 Express.
  • Event notifications on the S3 client (configure them on the native client instead).

For the reasoning behind these boundaries, see the repository's final replacement contract.

Released under the Apache-2.0 License. License