Limits & errors
Hard limits cannot be changed. Quotas marked as adjustable can be raised by support for Team and Enterprise workspaces.
Objects
| Limit | Value |
|---|---|
| Maximum object size | 5 TiB |
| Maximum single PUT | 5 GiB |
| Multipart part size | 5 MiB – 5 GiB |
| Parts per upload | 10 000 |
| Object key length | 1 024 bytes |
| User metadata per object | 2 KiB |
| Tags per object | 10 |
| Presigned URL maximum expiry | 7 days |
| Incomplete multipart upload lifetime | 7 days (default) |
Request rates
Rates scale automatically with the number of prefixes. Spread hot keys across prefixes to go beyond the per-prefix numbers.
| Limit | Value |
|---|---|
| Write requests per prefix | 3 500 / s |
| Read requests per prefix | 5 500 / s |
| Management API per token | 1 200 / min |
| Edge purge requests per workspace | 60 / min |
| Webhook deliveries per bucket | 500 / s |
Quotas
| Limit | Value |
|---|---|
| Buckets per workspace (adjustable) | 1 000 |
| Access keys per workspace (adjustable) | 500 |
| Lifecycle rules per bucket | 1 000 |
| Replication rules per bucket | 100 |
| Custom edge hostnames per bucket (adjustable) | 25 |
| Webhook subscriptions per bucket | 20 |
S3 error codes
S3 API errors follow the standard XML error format with Code, Message, RequestId and HostId elements.
| HTTP | Code | Meaning |
|---|---|---|
| 400 | InvalidArgument | A parameter or header is malformed. |
| 400 | EntityTooSmall | A multipart part other than the last is smaller than 5 MiB. |
| 400 | EntityTooLarge | A single PUT exceeds 5 GiB. Use multipart upload. |
| 403 | AccessDenied | The key or policy does not allow this action. |
| 403 | SignatureDoesNotMatch | The request signature is invalid. Check the secret key and clock skew. |
| 403 | RequestTimeTooSkewed | Client clock differs from server time by more than 15 minutes. |
| 404 | NoSuchBucket | The bucket does not exist in this region. |
| 404 | NoSuchKey | The object does not exist, or is a delete marker. |
| 409 | BucketAlreadyExists | Bucket names are global. Choose another name. |
| 409 | BucketNotEmpty | Delete all objects and versions before deleting the bucket. |
| 412 | PreconditionFailed | An If-Match or If-None-Match condition was not met. |
| 429 | TooManyRequests | Management API rate limit exceeded. Honour Retry-After. |
| 503 | SlowDown | Request rate on a prefix is too high. Retry with exponential backoff. |
Retries
Retry 500, 503 and network errors with exponential backoff and jitter, starting at 100 ms and capped at 20 s. The AWS SDKs do this by default in standard retry mode.
Python
from botocore.config import Config
config = Config(retries={"mode": "standard", "max_attempts": 8})