S3 operations
Every S3 operation Overcast declares — 45 of 53 implemented — with status, behaviour notes and a link to the AWS API reference for each.
45 of 53 listed operations are implemented. Back to S3.
Summary
| Category | ✅ Supported | ⚠️ Partial | ❌ Unsupported |
|---|---|---|---|
| Buckets | 8 | ||
| CORS | 1 | 2 | |
| Website | 1 | 2 | |
| Objects | 11 | 3 | |
| Multipart uploads | 6 | 1 | |
| ACLs & policies | 3 | 4 | |
| Versioning | 3 | ||
| Tagging | 3 | ||
| Lifecycle | 2 | 1 | |
| Notifications | 2 |
Endpoints
Buckets
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
CreateBucket | ✅ Supported | Account regional namespaces via x-amz-bucket-namespace: account-regional | docs |
DeleteBucket | ✅ Supported | Bucket must be empty | docs |
HeadBucket | ✅ Supported | docs | |
ListBuckets | ✅ Supported | docs | |
GetBucketLocation | ✅ Supported | docs | |
GetBucketEncryption | ✅ Supported | Returns default SSE-S3 config; stores AES256/KMS bucket encryption rules | docs |
PutBucketEncryption | ✅ Supported | Stores AES256/KMS bucket encryption rules | docs |
DeleteBucketEncryption | ✅ Supported | docs |
CORS
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
GetBucketCors | ⚠️ Partial | CORS rules; rule Id is not yet preserved | docs |
PutBucketCors | ⚠️ Partial | CORS rules; rule Id is not yet preserved | docs |
DeleteBucketCors | ✅ Supported | docs |
Website
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
GetBucketWebsite | ⚠️ Partial | Returns the whole configuration — IndexDocument, ErrorDocument, RedirectAllRequestsTo and RoutingRules; Overcast serves no website endpoint, so nothing is actually redirected | docs |
PutBucketWebsite | ⚠️ Partial | Stores IndexDocument, ErrorDocument, RedirectAllRequestsTo and RoutingRules with AWS’s mutual exclusion and Protocol enum enforced; HttpRedirectCode values are not validated, and Overcast serves no website endpoint | docs |
DeleteBucketWebsite | ✅ Supported | docs |
Objects
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
PutObject | ✅ Supported | Stores body + x-amz-meta-* headers; If-None-Match: * and If-Match make the write conditional, failing 412 — or 404 when If-Match finds no current version | docs |
GetObject | ✅ Supported | Returns body, ETag, metadata headers; versionId selects a specific version, and a delete-marked key answers 404 with x-amz-delete-marker | docs |
HeadObject | ✅ Supported | docs | |
DeleteObject | ✅ Supported | Idempotent — 204 for missing keys; in a versioned bucket a delete adds a delete marker, and versionId removes one version permanently | docs |
CopyObject | ✅ Supported | x-amz-copy-source may name a source versionId | docs |
ListObjectsV2 | ✅ Supported | prefix, delimiter, max-keys (validated, clamped to 1000), start-after, continuation-token, encoding-type=url and fetch-owner; x-amz-request-payer and x-amz-optional-object-attributes accepted but Requester Pays and RestoreStatus are not emulated | docs |
DeleteObjects | ✅ Supported | Batch delete up to 1000 keys; quiet mode supported; per-entry VersionId, DeleteMarker and DeleteMarkerVersionId reported | docs |
ListObjects | ✅ Supported | Marker-based pagination; supports prefix, delimiter, encoding-type=url and the same max-keys validation as ListObjectsV2 | docs |
GetObjectAttributes | ❌ Unsupported | stub; returns 501 | docs |
PutObjectTagging | ✅ Supported | Up to 10 tags, unique keys, key 1-128 and value 0-256 characters; the tag character set is not validated | docs |
GetObjectTagging | ✅ Supported | docs | |
DeleteObjectTagging | ✅ Supported | docs | |
RestoreObject | ❌ Unsupported | Glacier restore simulation | docs |
SelectObjectContent | ❌ Unsupported | S3 Select (SQL queries on objects) | docs |
Multipart uploads
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
CreateMultipartUpload | ✅ Supported | docs | |
UploadPart | ✅ Supported | docs | |
UploadPartCopy | ❌ Unsupported | stub; returns 501 | docs |
CompleteMultipartUpload | ✅ Supported | Honours the same If-None-Match: * and If-Match conditional writes as PutObject, evaluated at completion time | docs |
AbortMultipartUpload | ✅ Supported | docs | |
ListMultipartUploads | ✅ Supported | docs | |
ListParts | ✅ Supported | docs |
ACLs & policies
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
GetBucketAcl | ❌ Unsupported | stub; returns 501 | docs |
PutBucketAcl | ❌ Unsupported | stub; returns 501 | docs |
GetObjectAcl | ❌ Unsupported | stub; returns 501 | docs |
PutObjectAcl | ❌ Unsupported | stub; returns 501 | docs |
GetBucketPolicy | ✅ Supported | docs | |
PutBucketPolicy | ✅ Supported | docs | |
DeleteBucketPolicy | ✅ Supported | docs |
Versioning
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
GetBucketVersioning | ✅ Supported | docs | |
PutBucketVersioning | ✅ Supported | Enabled and Suspended, with AWS’s semantics for both; objects that predate the change become their key’s null version | docs |
ListObjectVersions | ✅ Supported | Versions and delete markers in AWS’s order (key ascending, then most recent first), with prefix, delimiter, max-keys and key-marker/version-id-marker pagination | docs |
Tagging
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
GetBucketTagging | ✅ Supported | docs | |
PutBucketTagging | ✅ Supported | Up to 50 tags, unique keys, key 1-128 and value 0-256 characters; the tag character set is not validated | docs |
DeleteBucketTagging | ✅ Supported | docs |
Lifecycle
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
GetBucketLifecycleConfiguration | ✅ Supported | NoSuchLifecycleConfiguration when none is set; reports x-amz-transition-default-minimum-object-size | docs |
PutBucketLifecycleConfiguration | ⚠️ Partial | Expiration, Transition, NoncurrentVersionExpiration, NoncurrentVersionTransition, ExpiredObjectDeleteMarker, AbortIncompleteMultipartUpload and prefix/tag/size filters are applied by an hourly sweeper; x-amz-transition-default-minimum-object-size gates transitions of objects under 128 KB, noncurrent ones included; expiring the current version of a versioned object adds a delete marker rather than deleting it | docs |
DeleteBucketLifecycle | ✅ Supported | docs |
Notifications
| Operation | Status | Notes | AWS Docs |
|---|---|---|---|
GetBucketNotificationConfiguration | ✅ Supported | Returns empty config if none set | docs |
PutBucketNotificationConfiguration | ✅ Supported | SQS, SNS, Lambda and EventBridge destinations; prefix/suffix filters. Records carry versionId and sequencer; SNS deliveries carry the Records JSON as the notification envelope’s Message string with Subject “Amazon S3 Notification”, as real S3 does; EventBridge events carry AWS’s Object Created/Object Deleted shape, including deletion-type, minus the fields Overcast has no value for | docs |
Related
- S3 — quick start, what works, and the differences from AWS
- All service pages