S3 API Compatibility
This page documents S3 APIs supported by MinIO Object Storage. For reference documentation on any given API, see the corresponding documentation for Amazon S3.
Warning
Important
MinIO strongly recommends using an S3-Compatible SDK for performing object storage operations.
Object APIs
- CopyObject
- DeleteObject
- DeleteObjects
- Conditional DELETE: published Server 20260903 ignores
If-Match. Server 20260916 supports nonemptyIf-Matchon singleDeleteObject(#145/#178), including addressed-version comparison. BatchDeleteObjectsstill ignores<Object><ETag>and provides no per-item conditional guard. See scope and limitations.
- Conditional DELETE: published Server 20260903 ignores
- DeleteObjectTagging
- GetObject
- GetObjectAttributes
- GetObjectTagging
- HeadObject
- ListObjects
- ListObjectsV2
- ListObjectVersions
- PutObject
- PutObjectTagging
- RestoreObject
- SelectObjectContent
Write commit errors
PR #232, targeting the next Server
release after 20261015, returns HTTP 503 SlowDownWrite when staged xl.meta
disappears at the final commit of PUT or multipart completion. Earlier code
could report 400 IncompleteBody for PUT or 404 NoSuchKey for completion.
Actual incomplete client uploads retain their existing error handling. This
classification allows SDK retries; it does not restore lost staging data.
See the source and release boundary.
Object Locking
- GetObjectRetention
- PutObjectRetention
- GetObjectLegalHold
- PutObjectLegalHold
- GetObjectLockConfiguration
- PutObjectLockConfiguration
Unsupported API Object Endpoints
Multipart Uploads
- AbortMultipartUpload
- CompleteMultipartUpload
- CreateMultipartUpload
- ListMultipartUploads
- ListParts
- UploadPart
- UploadPartCopy
Differences from S3 APIs for Multipart Uploads
- Published Server 20260903 treats a non-empty
ListMultipartUploadsprefix as an exact object name. An empty prefix uses node-local volatile state without complete pagination, marker or delimiter semantics. - Server 20260916 adds persistent scanning as an opt-in strict mode while retaining legacy exact-key/cache behavior by default. Its historical upgrade contract still applies to those binaries.
- Unreleased #79 follow-up: persistent listing becomes the only path, with global prefix, delimiter and pagination semantics. The mode environment variable is ignored. Readable old uploads missing both identity fields are omitted without blocking new uploads; the old exact-key shortcut is removed. This historical-record omission is an explicit S3 compatibility exception. Metadata errors, insufficient coverage and resource limits still return errors. Preflight becomes diagnostic, and cancellation keeps its previous default read-quorum/best-effort behavior. Every page still scans storage; delayed creation writes can still restore an upload after cancellation. See the candidate contract, capacity and limits.
- The
AbortIncompleteMultipartUploadlifecycle action is not supported withPutBucketLifecycle.
Bucket APIs
- CreateBucket
- DeleteBucket
- DeleteBucketEncryption
- DeleteBucketTagging
- GetBucketEncryption
- GetBucketLocation
- GetBucketTagging
- GetBucketVersioning
- HeadBucket
- ListBuckets
- ListDirectoryBuckets
- PutBucketEncryption
- PutBucketTagging
- PutBucketVersioning
Bucket Replication
Bucket Lifecycle
- GetBucketLifecycle
- GetBucketLifecycleConfiguration
- PutBucketLifecycle
- PutBucketLifecycleConfiguration
- DeleteBucketLifecycle
Bucket Notifications
- GetBucketNotification
- GetBucketNotificationConfiguration
- PutBucketNotification
- PutBucketNotificationConfiguration
Bucket Policies
- GetBucketPolicy
- GetBucketPolicyStatus
- PutBucketPolicy
- DeleteBucketPolicy
- GetBucketCors
- PutBucketCors
- DeleteBucketCors
Unsupported API Bucket Operations
MinIO alternatives for unsupported Bucket resources
- For calls to
BucketACLorObjectACLoperations, use Policies. BucketCORSoperations are supported sinceRELEASE.2026-09-03T13-18-01Z. A bucket with its own CORS configuration is served only by that configuration; buckets without one use the server-wideMINIO_API_CORS_ALLOW_ORIGINpolicy, which allows every origin by default.- For calls to
BucketWebsiteoperations, usecaddyornginx. - For calls to
BucketAnalytics,BucketMetrics, orBucketLoggingoperations, use Bucket Notifications.