S3 API compatibility·续

</details>

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 (❌).

Behaviors & Limitations

UploadPart: Uploading to the same part number replaces the previous part. If a subsequent upload to the same part fails, the original part is lost and must be re-uploaded.

Conditional operations: The conditional headers on PutObject (such as If-Match and If-None-Match) are evaluated atomically against the committed bucket state, as part of the same write that commits the object. For example, when multiple clients concurrently issue PutObject with If-None-Match: * for a previously absent key, at most one write succeeds and the others fail with 412 PreconditionFailed. Refer to Consistency model for details, including how negative reads interact with in-flight writes.

API Name Feature
✅ HeadObject ↗︎ ✅ Conditional Operations: <br>   ✅ If-Match <br>   ✅ If-Modified-Since <br>   ✅ If-None-Match <br>   ✅ If-Unmodified-Since <br> ✅ Range: <br>   ✅ Range (has no effect in HeadObject) <br>   ✅ partNumber <br> ✅ SSE-C: <br>   ✅ x-amz-server-side-encryption-customer-algorithm <br>   ✅ x-amz-server-side-encryption-customer-key <br>   ✅ x-amz-server-side-encryption-customer-key-MD5 <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner
✅ ListObjects ↗︎ Query Parameters: <br>   ✅ delimiter <br>   ✅ encoding-type <br>   ✅ marker <br>   ✅ max-keys <br>   ✅ prefix <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner
✅ ListObjectsV2 ↗︎ Query Parameters: <br>   ✅ list-type <br>   ✅ continuation-token <br>   ✅ delimiter <br>   ✅ encoding-type <br>   ✅ fetch-owner <br>   ✅ max-keys <br>   ✅ prefix <br>   ✅ start-after <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner
✅ GetObject ↗︎ ✅ Conditional Operations: <br>   ✅ If-Match <br>   ✅ If-Modified-Since <br>   ✅ If-None-Match <br>   ✅ If-Unmodified-Since <br> ✅ Range: <br>   ✅ Range <br>   ✅ PartNumber <br> ✅ SSE-C: <br>   ✅ x-amz-server-side-encryption-customer-algorithm <br>   ✅ x-amz-server-side-encryption-customer-key <br>   ✅ x-amz-server-side-encryption-customer-key-MD5 <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner
✅ PutObject ↗︎ ✅ Conditional Operations: <br>   ✅ If-Match <br>   ✅ If-Modified-Since <br>   ✅ If-None-Match <br>   ✅ If-Unmodified-Since <br> ✅ System Metadata: <br>   ✅ Content-Type <br>   ✅ Cache-Control <br>   ✅ Content-Disposition <br>   ✅ Content-Encoding <br>   ✅ Content-Language <br>   ✅ Expires <br>   ✅ Content-MD5 <br> ✅ Storage Class: <br>   ✅ x-amz-storage-class <br>     ✅ STANDARD <br>     ✅ STANDARD_IA <br> ❌ Object Lifecycle <br> ❌ Website: <br>   ❌ x-amz-website-redirect-location <br> ❌ SSE: <br>   ❌ x-amz-server-side-encryption-aws-kms-key-id <br>   ❌ x-amz-server-side-encryption <br>   ❌ x-amz-server-side-encryption-context <br>   ❌ x-amz-server-side-encryption-bucket-key-enabled <br> ✅ SSE-C: <br>   ✅ x-amz-server-side-encryption-customer-algorithm <br>   ✅ x-amz-server-side-encryption-customer-key <br>   ✅ x-amz-server-side-encryption-customer-key-MD5 <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Tagging: <br>   ❌ x-amz-tagging <br> ❌ Object Locking: <br>   ❌ x-amz-object-lock-mode <br>   ❌ x-amz-object-lock-retain-until-date <br>   ❌ x-amz-object-lock-legal-hold <br> ❌ ACL: <br>   ❌ x-amz-acl <br>   ❌ x-amz-grant-full-control <br>   ❌ x-amz-grant-read <br>   ❌ x-amz-grant-read-acp <br>   ❌ x-amz-grant-write-acp <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner
✅ DeleteObject ↗︎ ❌ Multi-factor authentication: <br>   ❌ x-amz-mfa <br> ❌ Object Locking: <br>   ❌ x-amz-bypass-governance-retention <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner
✅ DeleteObjects ↗︎ ❌ Multi-factor authentication: <br>   ❌ x-amz-mfa <br> ❌ Object Locking: <br>   ❌ x-amz-bypass-governance-retention <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner
✅ ListMultipartUploads ↗︎ ✅ Query Parameters: <br>   ✅ delimiter <br>   ✅ encoding-type <br>   ✅ key-marker <br>   ✅️ max-uploads <br>   ✅ prefix <br>   ✅ upload-id-marker
✅ CreateMultipartUpload ↗︎ ✅ System Metadata: <br>   ✅ Content-Type <br>   ✅ Cache-Control <br>   ✅ Content-Disposition <br>   ✅ Content-Encoding <br>   ✅ Content-Language <br>   ✅ Expires <br>   ✅ Content-MD5 <br> ✅ Storage Class: <br>   ✅ x-amz-storage-class <br>     ✅ STANDARD <br>     ✅ STANDARD_IA <br> ❌ Website: <br>   ❌ x-amz-website-redirect-location <br> ❌ SSE: <br>   ❌ x-amz-server-side-encryption-aws-kms-key-id <br>   ❌ x-amz-server-side-encryption <br>   ❌ x-amz-server-side-encryption-context <br>   ❌ x-amz-server-side-encryption-bucket-key-enabled <br> ✅ SSE-C: <br>   ✅ x-amz-server-side-encryption-customer-algorithm <br>   ✅ x-amz-server-side-encryption-customer-key <br>   ✅ x-amz-server-side-encryption-customer-key-MD5 <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Tagging: <br>   ❌ x-amz-tagging <br> ❌ Object Locking: <br>   ❌ x-amz-object-lock-mode <br>   ❌ x-amz-object-lock-retain-until-date <br>   ❌ x-amz-object-lock-legal-hold <br> ❌ ACL: <br>   ❌ x-amz-acl <br>   ❌ x-amz-grant-full-control <br>   ❌ x-amz-grant-read <br>   ❌ x-amz-grant-read-acp <br>   ❌ x-amz-grant-write-acp <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner
✅ CompleteMultipartUpload ↗︎ ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer
✅ AbortMultipartUpload ↗︎ ❌ Request Payer: <br>   ❌ x-amz-request-payer
✅ CopyObject ↗︎ ✅ Operation Metadata: <br>   ✅ x-amz-metadata-directive <br> ✅ System Metadata: <br>   ✅ Content-Type <br>   ✅ Cache-Control <br>   ✅ Content-Disposition <br>   ✅ Content-Encoding <br>   ✅ Content-Language <br>   ✅ Expires <br> ✅ Conditional Operations: <br>   ✅ x-amz-copy-source <br>   ✅ x-amz-copy-source-if-match <br>   ✅ x-amz-copy-source-if-modified-since <br>   ✅ x-amz-copy-source-if-none-match <br>   ✅ x-amz-copy-source-if-unmodified-since <br> ✅ Storage Class: <br>   ✅ x-amz-storage-class <br>     ✅ STANDARD <br>     ✅ STANDARD_IA <br> ❌ ACL: <br>   ❌ x-amz-acl <br>   ❌ x-amz-grant-full-control <br>   ❌ x-amz-grant-read <br>   ❌ x-amz-grant-read-acp <br>   ❌ x-amz-grant-write-acp <br> ❌ Website: <br>   ❌ x-amz-website-redirect-location <br> ❌ SSE: <br>   ❌ x-amz-server-side-encryption <br>   ❌ x-amz-server-side-encryption-aws-kms-key-id <br>   ❌ x-amz-server-side-encryption-context <br>   ❌ x-amz-server-side-encryption-bucket-key-enabled <br> ✅ SSE-C: <br>   ✅ x-amz-server-side-encryption-customer-algorithm <br>   ✅ x-amz-server-side-encryption-customer-key <br>   ✅ x-amz-server-side-encryption-customer-key-MD5 <br>   ✅ x-amz-copy-source-server-side-encryption-customer-algorithm <br>   ✅ x-amz-copy-source-server-side-encryption-customer-key <br>   ✅ x-amz-copy-source-server-side-encryption-customer-key-MD5 <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Tagging: <br>   ❌ x-amz-tagging <br>   ❌ x-amz-tagging-directive <br> ❌ Object Locking: <br>   ❌ x-amz-object-lock-mode <br>   ❌ x-amz-object-lock-retain-until-date <br>   ❌ x-amz-object-lock-legal-hold <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner <br>   ❌ x-amz-source-expected-bucket-owner <br> ❌ Checksums: <br>   ❌ x-amz-checksum-algorithm
✅ UploadPart ↗︎ ✅ System Metadata: <br>   ✅ Content-MD5 <br> ❌ SSE: <br>   ❌ x-amz-server-side-encryption <br> ✅ SSE-C: <br>   ✅ x-amz-server-side-encryption-customer-algorithm <br>   ✅ x-amz-server-side-encryption-customer-key <br>   ✅ x-amz-server-side-encryption-customer-key-MD5 <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner
✅ UploadPartCopy ↗︎ ✅ Copy Source: <br>   ✅ x-amz-copy-source (required) <br> ❌ Conditional Operations: <br>   ❌ x-amz-copy-source-if-match <br>   ❌ x-amz-copy-source-if-modified-since <br>   ❌ x-amz-copy-source-if-none-match <br>   ❌ x-amz-copy-source-if-unmodified-since <br> ✅ Range: <br>   ✅ x-amz-copy-source-range <br> ✅ SSE-C: <br>   ✅ x-amz-server-side-encryption-customer-algorithm <br>   ✅ x-amz-server-side-encryption-customer-key <br>   ✅ x-amz-server-side-encryption-customer-key-MD5 <br>   ✅ x-amz-copy-source-server-side-encryption-customer-algorithm <br>   ✅ x-amz-copy-source-server-side-encryption-customer-key <br>   ✅ x-amz-copy-source-server-side-encryption-customer-key-MD5 <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner <br>   ❌ x-amz-source-expected-bucket-owner
✅ ListParts ↗︎ Query Parameters: <br>   ✅ max-parts <br>   ✅ part-number-marker <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner

Caution

Even though ListObjects is a supported operation, it is recommended that you use ListObjectsV2 instead when developing applications. For more information, refer to ListObjects ↗︎.

Unimplemented object-level operations

<details>

<summary>

Unimplemented object-level operations

</summary>

API Name Feature
❌ <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html">GetObjectTagging ↗︎</a> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer
❌ <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html">PutObjectTagging ↗︎</a> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner <br> ❌ Request Payer: <br>   ❌ x-amz-request-payer <br> ❌ Checksums: <br>   ❌ x-amz-sdk-checksum-algorithm
❌ <a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html">DeleteObjectTagging ↗︎</a> ❌ Bucket Owner: <br>   ❌ x-amz-expected-bucket-owner

</details>

Was this helpful?

YesNo

On this page

S3 API compatibility·续 - 图1Docs

{"@context":"https://schema.org","@type":"TechArticle","@id":"https://developers.cloudflare.com/r2/api/s3/api/#page","headline":"S3 API compatibility","description":"Review which S3 API operations and features R2 supports, including implementation status.","url":"https://developers.cloudflare.com/r2/api/s3/api/","inLanguage":"en","image":"https://developers.cloudflare.com/r2/api/s3/api/og.png?v=073ff83b58b1dbf4","dateModified":"2026-10-14","publisher":{"@type":"Organization","name":"Cloudflare","description":"One platform for your apps, agents, and workforce. Build, secure, and scale without managing infrastructure","url":"https://www.cloudflare.com/","sameAs":["https://github.com/cloudflare","https://www.linkedin.com/company/cloudflare","https://x.com/cloudflare"],"logo":{"@type":"ImageObject","url":"https://developers.cloudflare.com/logo.svg"},"address":{"@type":"PostalAddress","streetAddress":"101 Townsend St","addressLocality":"San Francisco","addressRegion":"CA","postalCode":"94107","addressCountry":"US"},"contactPoint":[{"@type":"ContactPoint","contactType":"Customer Support","url":"https://support.cloudflare.com/","availableLanguage":["English"]},{"@type":"ContactPoint","contactType":"Sales","url":"https://www.cloudflare.com/contact/","availableLanguage":["English"]}]},"isPartOf":{"@type":"WebSite","@id":"https://developers.cloudflare.com/#website","name":"Cloudflare Docs","url":"https://developers.cloudflare.com/"}}


description: R2 extensions to the S3 API, including Unicode metadata and custom headers. title: Extensions image: https://developers.cloudflare.com/r2/api/s3/extensions/og.png?v=892da17f0eccc604


Skip to content

Documentation Index
Fetch the complete documentation index at: https://developers.cloudflare.com/r2/llms.txt
Use this file to discover all available pages before exploring further.