--- title: Limits description: Account, bucket, and object limits for Cloudflare R2 storage. pcx_content_type: concept products: - r2 --- import { Render } from "~/components"; | Feature | Limit | | ------------------------------------------------------------ | ------------------------------------------------- | | Data storage per bucket | Unlimited | | Number of objects per bucket | Unlimited | | Maximum number of buckets per account | Unlimited, with a default limit of 100,000. Each bucket above 100,000 costs [$0.10 per month](/r2/pricing/#r2-pricing). | | Maximum rate of bucket management operations per bucket [^1] | 50 per second | | Number of custom domains per bucket | 100 | | Object key length | 1,024 bytes | | Object metadata size | 8,192 bytes | | Object size | 5 TiB per object [^2] | | Maximum upload size [^3] | 5 GiB (single-part) / 4.995 TiB (multi-part) [^4] | | Maximum upload parts | 10,000 | | Maximum concurrent writes to the same object name (key) | 1 per second [^5] | [^1]: Bucket management operations include creating, deleting, listing, and configuring buckets. This limit does _not_ apply to reading or writing objects to a bucket. [^2]: The object size limit is 5 GiB less than 5 TiB, so 4.995 TiB. [^3]: Max upload size applies to uploading a file via one request, uploading a part of a multipart upload, or copying into a part of a multipart upload. If you have a Worker, its inbound request size is constrained by [Workers request limits](/workers/platform/limits#request-limits). The max upload size limit does not apply to subrequests. [^4]: The max upload size is 5 MiB less than 5 GiB, so 4.995 GiB. [^5]: Concurrent writes to the same object name (key) at a higher rate return HTTP 429 (rate limited) responses. Limits specified in MiB (mebibyte), GiB (gibibyte), or TiB (tebibyte) are storage units of measurement based on base-2. 1 GiB (gibibyte) is equivalent to 230 bytes (or 10243 bytes). This is distinct from 1 GB (gigabyte), which is 109 bytes (or 10003 bytes). ## Rate limiting on managed public buckets through `r2.dev` Managed public bucket access through an `r2.dev` subdomain is not intended for production usage and has a variable rate limit applied to it. The `r2.dev` endpoint for your bucket is designed to enable testing. - If you exceed the rate limit (hundreds of requests/second), requests to your `r2.dev` endpoint will be temporarily throttled and you will receive a `429 Too Many Requests` response. - Bandwidth (throughput) may also be throttled when using the `r2.dev` endpoint. For production use cases, connect a [custom domain](/r2/buckets/public-buckets/#custom-domains) to your bucket. Custom domains allow you to serve content from a domain you control (for example, `assets.example.com`), configure fine-grained caching, set up redirect and rewrite rules, mutate content via [Cloudflare Workers](/workers/), and get detailed URL-level analytics for content served from your R2 bucket. ## Cloudflare REST API The [Cloudflare REST API](/api/resources/r2/) is rate limited to 1,200 requests per five minutes across all R2 REST API operations on your account. For high-throughput object operations, use the [S3-compatible API](/r2/api/s3/api/) or [Workers API](/r2/api/workers/workers-api-reference/) instead. The Cloudflare REST API is best suited for lower-volume management and configuration operations.