Cloudflare Docs
R2
Visit R2 on GitHub
Set theme to dark (⇧+D)

S3 API compatibility

R2 implements the S3 API to allow users and their applications to migrate easily. When comparing to AWS S3, Cloudflare has removed some API operations' features and added others. The S3 API operations are listed below with their current implementation status. Feature implementation is currently in progress. Refer back to this page for updates. The API is available via the https://<ACCOUNT_ID>.r2.cloudflarestorage.com endpoint. Find your account ID in the Cloudflare dashboard.

How to read this page

This page has two sections: bucket-level operations and object-level operations.

Each section will have two tables: a table of implemented APIs and a table of unimplemented APIs.

Refer the feature column of each table to review which features of an API have been implemented and which have not.

✅ Feature Implemented
❌ Feature Not Implemented

Bucket region

When using the S3 API, the region for an R2 bucket is auto. For compatibility with tools that do not allow you to specify a region, an empty value and us-east-1 will alias to the auto region.

This also applies to the LocationConstraint for the CreateBucket API.

Bucket-level operations

The following tables are related to bucket-level operations.

Implemented bucket-level operations

Below is a list of implemented bucket-level operations. Refer to the Feature column to review which features have been implemented (✅) and have not been implemented (❌).

API NameFeature
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

Unimplemented bucket-level operations

Below is a list of unimplemented bucket-level operations.

API NameFeature

Object-level operations

The following tables are related to object-level operations.

Implemented object-level operations

Below is a list of implemented object-level operations. Refer to the Feature column to review which features have been implemented (✅) and have not been implemented (❌).

API NameFeature
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
ListObjectsV2Query 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
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
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

Unimplemented object-level operations

Below is a list of unimplemented object-level operations.

API NameFeature
ListObjects❌ Query Parameters:
  ❌ delimiter
  ❌ encoding-type
  ❌ marker
  ❌ max-keys
  ❌ prefix
❌ 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
ListParts❌ Query Parameters:
  ❌ max-parts
  ❌ part-number-marker
❌ Bucket Owner:
  ❌ x-amz-expected-bucket-owner
❌ Request Payer:
  ❌ x-amz-request-payer