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
{"@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
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.
Docs