Open-Source Wikis

/

MinIO

/

API

/

S3 API

minio/minio

S3 API

MinIO implements the S3 REST API. The router is cmd/api-router.go; verbs are dispatched to handlers across several files. This page is an inventory, not a spec — refer to AWS S3 docs for argument details.

Object operations

Operation Handler file
PutObject cmd/object-handlers.go
GetObject / HeadObject cmd/object-handlers.go
DeleteObject / DeleteObjects cmd/object-handlers.go
CopyObject cmd/object-handlers.go
PutObjectTagging / GetObjectTagging / DeleteObjectTagging cmd/object-handlers.go
PutObjectAcl / GetObjectAcl cmd/acl-handlers.go
PutObjectRetention / PutObjectLegalHold cmd/object-handlers.go
RestoreObject cmd/object-handlers.go
SelectObjectContent cmd/object-handlers.go (delegates to internal/s3select/)

Multipart upload

Operation Handler file
CreateMultipartUpload cmd/object-multipart-handlers.go
UploadPart / UploadPartCopy cmd/object-multipart-handlers.go
CompleteMultipartUpload cmd/object-multipart-handlers.go
AbortMultipartUpload cmd/object-multipart-handlers.go
ListParts cmd/object-multipart-handlers.go
ListMultipartUploads cmd/object-multipart-handlers.go

Bucket operations

Operation Handler file
CreateBucket, DeleteBucket cmd/bucket-handlers.go
ListBuckets cmd/bucket-handlers.go
HeadBucket cmd/bucket-handlers.go
ListObjects (V1, V2) cmd/bucket-listobjects-handlers.go
ListObjectVersions cmd/bucket-listobjects-handlers.go
Put/Get/Delete BucketPolicy cmd/bucket-policy-handlers.go
Put/Get BucketVersioning cmd/bucket-versioning-handler.go
Put/Get BucketLifecycleConfiguration cmd/bucket-lifecycle-handlers.go
Put/Get BucketReplication cmd/bucket-replication-handlers.go
Put/Get BucketEncryption cmd/bucket-encryption-handlers.go
Put/Get BucketNotificationConfiguration cmd/bucket-notification-handlers.go
Put/Get BucketTagging cmd/bucket-handlers.go
Put/Get BucketObjectLockConfiguration cmd/bucket-object-lock.go
Get/Put BucketCors cmd/bucket-handlers.go
Get BucketLocation cmd/bucket-handlers.go
Get/Put BucketACL cmd/acl-handlers.go

Streaming and signed URLs

  • Streaming SigV4 (AWS-Chunked) is implemented in cmd/streaming-signature-v4.go.
  • Unsigned trailer mode is in cmd/streaming-v4-unsigned.go.
  • Pre-signed URL validation is in cmd/signature-v4.go.
  • POST policy uploads are in cmd/postpolicyform.go and cmd/post-policy-fan-out.go.

Rejected / not-implemented

cmd/api-router.go explicitly rejects a few S3 features (?torrent, ?accelerate, ?requestPayment, ...) with NotImplemented. The list is in the file's rejectedObjAPIs and rejectedBucketAPIs.

CORS

Standard AWS CORS rules with default-on per-bucket configuration support. Implemented in cmd/bucket-handlers.go and middleware in cmd/api-router.go (uses github.com/rs/cors).

CompleteMultipartUpload tweaks

MinIO supports a few non-standard tweaks the AWS spec doesn't cover:

  • "Fan-out" upload: a single uploaded object can be replicated into multiple keys via the x-minio-fan-out header (cmd/post-policy-fan-out.go).
  • Implicit checksums: when a client doesn't include x-amz-checksum-*, MinIO computes one anyway and surfaces it in the response.

Errors

Every S3 error code maps to an entry in cmd/api-errors.go (95 KB of switch + descriptors). The string table is generated by stringer (apierrorcode_string.go). Custom MinIO-only codes start with MinIO.

See also

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

S3 API – MinIO wiki | Factory