rembrembdocs

S3 Compatibility

Learn about the compatibility of Supabase Storage with S3.


Supabase Storage is compatible with the S3 protocol. You can use almost any S3 client to interact with your Storage objects (such as Cyberduck).

Storage supports standard, resumable and S3 uploads and all these protocols are interoperable. You can upload a file with the S3 protocol and list it with the REST API or upload with Resumable uploads and list with S3.

Storage supports presigning a URL using query parameters. Specifically, Supabase Storage expects requests to be made using AWS Signature Version 4. To enable this feature, enable the S3 connection via S3 protocol in the Settings page for Supabase Storage.

S3 versioning is not supported. Supabase Storage does not enable S3's versioning capabilities for buckets. Deleted objects are permanently removed and cannot be restored.

Implemented endpoints#

The most commonly used endpoints are implemented, and more will be added. Implemented S3 endpoints are marked with ✅ in the following tables.

Bucket operations#

API Name

Feature

ListBuckets

HeadBucket

❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

CreateBucket

❌ ACL:
❌ x-amz-acl
❌ x-amz-grant-full-control
❌ x-amz-grant-read
❌ x-amz-grant-read-acp
❌ x-amz-grant-write
❌ x-amz-grant-write-acp
❌ Object Locking:
❌ x-amz-bucket-object-lock-enabled
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

DeleteBucket

❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

GetBucketLocation

❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

DeleteBucketCors

❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

GetBucketEncryption

❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

GetBucketLifecycleConfiguration

❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

GetBucketCors

❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

PutBucketCors

❌ Checksums:
❌ x-amz-sdk-checksum-algorithm
❌ x-amz-checksum-algorithm
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

PutBucketLifecycleConfiguration

❌ Checksums:
❌ x-amz-sdk-checksum-algorithm
❌ x-amz-checksum-algorithm
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

Object operations#

API Name

Feature

HeadObject

✅ Conditional Operations:
✅ If-Match
✅ If-Modified-Since
✅ If-None-Match
✅ If-Unmodified-Since
✅ Range:
✅ Range (has no effect in HeadObject)
✅ partNumber
❌ SSE-C:
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

ListObjects

Query Parameters:
✅ delimiter
✅ encoding-type
✅ marker
✅ max-keys
✅ prefix
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

ListObjectsV2

Query Parameters:
✅ list-type
✅ continuation-token
✅ delimiter
✅ encoding-type
✅ fetch-owner
✅ max-keys
✅ prefix
✅ start-after
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

GetObject

✅ Conditional Operations:
✅ If-Match
✅ If-Modified-Since
✅ If-None-Match
✅ If-Unmodified-Since
✅ Range:
✅ Range
✅ PartNumber
❌ SSE-C:
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

PutObject

System Metadata:
✅ Content-Type
✅ Cache-Control
✅ Content-Disposition
✅ Content-Encoding
✅ Content-Language
✅ Expires
❌ Content-MD5
❌ Object Lifecycle
❌ Website:
❌ x-amz-website-redirect-location
❌ SSE-C:
❌ x-amz-server-side-encryption
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ x-amz-server-side-encryption-aws-kms-key-id
❌ x-amz-server-side-encryption-context
❌ x-amz-server-side-encryption-bucket-key-enabled
❌ Request Payer:
❌ x-amz-request-payer
❌ Tagging:
❌ x-amz-tagging
❌ Object Locking:
❌ x-amz-object-lock-mode
❌ x-amz-object-lock-retain-until-date
❌ x-amz-object-lock-legal-hold
❌ ACL:
❌ x-amz-acl
❌ x-amz-grant-full-control
❌ x-amz-grant-read
❌ x-amz-grant-read-acp
❌ x-amz-grant-write-acp
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

DeleteObject

❌ Multi-factor authentication:
❌ x-amz-mfa
❌ Object Locking:
❌ x-amz-bypass-governance-retention
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

DeleteObjects

❌ Multi-factor authentication:
❌ x-amz-mfa
❌ Object Locking:
❌ x-amz-bypass-governance-retention
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

ListMultipartUploads

✅ Query Parameters:
✅ delimiter
✅ encoding-type
✅ key-marker
✅️ max-uploads
✅ prefix
✅ upload-id-marker

CreateMultipartUpload

✅ System Metadata:
✅ Content-Type
✅ Cache-Control
✅ Content-Disposition
✅ Content-Encoding
✅ Content-Language
✅ Expires
❌ Content-MD5
❌ Website:
❌ x-amz-website-redirect-location
❌ SSE-C:
❌ x-amz-server-side-encryption
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ x-amz-server-side-encryption-aws-kms-key-id
❌ x-amz-server-side-encryption-context
❌ x-amz-server-side-encryption-bucket-key-enabled
❌ Request Payer:
❌ x-amz-request-payer
❌ Tagging:
❌ x-amz-tagging
❌ Object Locking:
❌ x-amz-object-lock-mode
❌ x-amz-object-lock-retain-until-date
❌ x-amz-object-lock-legal-hold
❌ ACL:
❌ x-amz-acl
❌ x-amz-grant-full-control
❌ x-amz-grant-read
❌ x-amz-grant-read-acp
❌ x-amz-grant-write-acp
❌ Storage class:
❌ x-amz-storage-class
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

CompleteMultipartUpload

❌ Bucket Owner:
❌ x-amz-expected-bucket-owner
❌ Request Payer:
❌ x-amz-request-payer

AbortMultipartUpload

❌ Request Payer:
❌ x-amz-request-payer

CopyObject

✅ Operation Metadata:
⚠️ x-amz-metadata-directive
✅ System Metadata:
✅ Content-Type
✅ Cache-Control
✅ Content-Disposition
✅ Content-Encoding
✅ Content-Language
✅ Expires
✅ Conditional Operations:
✅ x-amz-copy-source
✅ x-amz-copy-source-if-match
✅ x-amz-copy-source-if-modified-since
✅ x-amz-copy-source-if-none-match
✅ x-amz-copy-source-if-unmodified-since
❌ ACL:
❌ x-amz-acl
❌ x-amz-grant-full-control
❌ x-amz-grant-read
❌ x-amz-grant-read-acp
❌ x-amz-grant-write-acp
❌ Website:
❌ x-amz-website-redirect-location
❌ SSE-C:
❌ x-amz-server-side-encryption
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ x-amz-server-side-encryption-aws-kms-key-id
❌ x-amz-server-side-encryption-context
❌ x-amz-server-side-encryption-bucket-key-enabled
❌ x-amz-copy-source-server-side-encryption-customer-algorithm
❌ x-amz-copy-source-server-side-encryption-customer-key
❌ x-amz-copy-source-server-side-encryption-customer-key-MD5
❌ Request Payer:
❌ x-amz-request-payer
❌ Tagging:
❌ x-amz-tagging
❌ x-amz-tagging-directive
❌ Object Locking:
❌ x-amz-object-lock-mode
❌ x-amz-object-lock-retain-until-date
❌ x-amz-object-lock-legal-hold
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner
❌ x-amz-source-expected-bucket-owner
❌ Checksums:
❌ x-amz-checksum-algorithm

UploadPart

✅ System Metadata:
❌ Content-MD5
❌ SSE-C:
❌ x-amz-server-side-encryption
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner

UploadPartCopy

❌ Conditional Operations:
❌ x-amz-copy-source
❌ x-amz-copy-source-if-match
❌ x-amz-copy-source-if-modified-since
❌ x-amz-copy-source-if-none-match
❌ x-amz-copy-source-if-unmodified-since
✅ Range:
✅ x-amz-copy-source-range
❌ SSE-C:
❌ x-amz-server-side-encryption-customer-algorithm
❌ x-amz-server-side-encryption-customer-key
❌ x-amz-server-side-encryption-customer-key-MD5
❌ x-amz-copy-source-server-side-encryption-customer-algorithm
❌ x-amz-copy-source-server-side-encryption-customer-key
❌ x-amz-copy-source-server-side-encryption-customer-key-MD5
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner
❌ x-amz-source-expected-bucket-owner

ListParts

Query Parameters:
✅ max-parts
✅ part-number-marker
❌ Request Payer:
❌ x-amz-request-payer
❌ Bucket Owner:
❌ x-amz-expected-bucket-owner