Object Storage limits
The limits on billing, budgets, buckets, bucket names, object keys, access keys, listings, presigned URLs, usage history and API requests in Object Storage.
This page lists every fixed limit in Object Storage, with the message you see when you reach one. Pay as you go has no storage allowance, and How Object Storage is billed explains the rates and the free amounts.
| What |
Limit |
| Storage |
No allowance on pay as you go. We bill what the buckets hold by the GB-month, above the account's free amounts. On a plan that is no longer sold, the plan's included storage, with a rate per GB-month above it. A GB is 1024³ bytes. |
| Buckets |
25 on each service. Over it: This service already has 25 buckets, which is the most one service may hold. |
| Access keys |
No fixed number. |
| Plan change |
Pay as you go has one plan. A plan that is no longer sold can switch to it (Switch to pay as you go). |
Changes while the service is not active |
You cannot create or delete a bucket or create a key: This service is suspended; it can be changed once it is active, with the service's status in place of suspended. The dashboard shows Upload… and New folder… only while the service is active. You can revoke a key in any status. |
| Suspension |
Keys stop working within a couple of minutes and work again when the service is active. The objects stay where they are, and we bill nothing for the hours it is suspended. |
| After the service ends |
Keys stop working within a couple of minutes. We keep the objects for 7 days, then delete them with their buckets (Cancel the service). |
| What |
Limit |
| Free each month |
10 GB-month of storage on the Free plan, 250 on Pro, 1,024 on Business and what your agreement sets on Enterprise, with 1 million Class A and 10 million Class B operations on every plan (Free each month). |
| Who shares the free amounts |
Every pay as you go service on the account. A second service adds no free use. |
| When the free amounts start again |
00:00 UTC on the 1st of each month. Unused amounts do not carry over. |
| Rating |
Every hour, two to three hours after the hour ends. Until then, the hour is not in Estimated so far. |
| Rounding |
None on the use. Each amount is rounded to the cent on the invoice. |
| A meter under half a cent |
Waits for the next invoice. Once the service has ended, we do not bill it. |
| Final invoice after the service ends |
Due 3 days after we make it, by default. |
| Budget |
One on each service, from $1 to $1,000,000 a month. Alerts at 50%, 80% and 100%, each once a month for each amount. A budget never stops the service. |
| Budget changes |
30 an hour for each account, across all its services (Rate limits). Over it: Too many requests for this action. Try again later. |
| Usage download |
One calendar month in each file, with a row for each bucket and day. |
| What |
Limit |
| Prefix |
Every name starts with your account namespace and a hyphen, such as u7-. We add it when you leave it out. |
| Length |
3–63 characters, prefix included. With the prefix u7-, you can type up to 60. Over it: Use at most 63 characters, including the prefix. |
| Characters |
Lowercase letters, digits, hyphens and dots. We change uppercase letters to lowercase. Anything else: Use lowercase letters, digits, hyphens and dots, and start and end with a letter or digit. |
| First and last character |
A letter or a digit. |
| Dots |
Not next to another dot or a hyphen: Dots and hyphens cannot be next to each other. |
| Uniqueness |
One bucket with each name across your account, whichever service holds it: A bucket named u7-assets already exists. |
| After a delete |
The name stays taken for 7 days: u7-assets was deleted recently and is still being removed. Pick another name, or wait for the removal to finish. |
| Rename or move |
Not possible. Create a new bucket and copy the objects into it with an S3 client. |
The dashboard checks the length, the characters and the dots as you type, and shows the message under Name. It shows the messages about a name that is taken after you select Create bucket. Create a bucket through the API lists the messages the API gives for each rule.
| What |
Limit |
| Region |
One, chosen when you create the bucket. The bucket answers only at that region's endpoint. |
| Objects in a bucket |
No fixed number. |
| Public access |
Off until you turn on the bucket's public URL or link a custom domain (Serve a bucket publicly). Nobody can list a bucket without a key. |
| Versions |
Off until you turn on versioning. An upload then keeps the version it replaces, and a delete adds a delete marker (Keep earlier versions of objects). |
| Custom domains |
10 on each bucket. A hostname serves one bucket. |
| Deleting a bucket that holds objects |
Needs the tick box in the dashboard, or force=true through the API. Otherwise: u7-assets is not empty. Delete it with force to destroy its contents as well. |
| What |
Limit |
| Requests to a public URL |
1,200 a minute from one visitor address by default. The Public URL card shows the current figure. Over it: 429. Custom domains have no such limit. |
| Methods |
GET and HEAD, and OPTIONS for CORS. Anything else answers 405. |
While the service is not active |
Public URLs and custom domains answer 404. |
| Cached copies |
Objects of 10 MB or less, for an hour, or for as long as the object's Cache-Control allows, up to a day. |
| Purges |
60 an hour for each account, each of up to 100 paths or everything. |
| Changes to public URLs, websites and domains |
60 an hour for each account. |
| Domain checks |
120 an hour for each account. |
| A domain another bucket linked and never verified |
Released after 72 hours. |
| Index and error documents |
Object keys of up to 1,024 bytes. |
Serve a bucket publicly, Serve a bucket on your own domain and Host a static website in a bucket explain each one.
| What |
Limit |
| Object key |
Up to 1,024 bytes in UTF-8 for uploads in the dashboard and presigned URLs from the API. Over it: Object keys are at most 1024 bytes. |
| Object size |
The dashboard and the API check no size. The dashboard sends each file in one request, so upload files of several gigabytes with an S3 client, which sends them in parts. |
| Uploads in the dashboard |
Files only, one request each. Upload a folder with its contents from an S3 client. |
| Downloads in the dashboard |
One object at a time. |
| Folder names in the dashboard |
No backslash: Enter a folder name without backslashes. We remove a / at the start or the end. |
| What |
Limit |
| Turning versioning off |
Not possible once it is on. You can suspend it, and the bucket keeps the versions it holds. A bucket with Object Lock keeps it on. |
| Object Lock |
Turned on when you create the bucket, and never removed. |
| Default retention |
1–36,500 days, or 1–100 years. A year is 365 days. |
| Retention on one version |
Ends at least 1 minute and at most 36,500 days from now. |
| Versions on a page |
200 in the dashboard. 1–1000 through the API, 100 by default. |
| Versions in an object's details |
The newest 50. |
| Restoring a version |
Up to 5 GB, in the dashboard or through the API. Over it: This version is larger than 5 GB, which is the most we copy in one request. Copy it with an S3 client instead. |
| Deleting a bucket with Object Lock |
Refused while any version is locked. We read the locks of up to 10,000 versions, and in a larger bucket we delete the versions that are not locked and then refuse. |
| Changes to versioning, retention, legal holds and versions |
300 an hour for each account. Over it: 429 with Retry-After. |
Keep earlier versions of objects and Protect objects with Object Lock explain each one.
| What |
Limit |
| CORS rules on a bucket |
99. The dashboard keeps one more so its file browser can upload. |
| Lifecycle rules on a bucket |
100. |
| The rules as one document |
64 KB, for CORS and for lifecycle. |
| Tags in a lifecycle rule |
10. |
| Keep the newest |
1–100 old versions of each key. |
| Lifecycle runs |
Once a day. Each run checks at most 100,000 objects in a bucket, and the next run carries on from there. |
| Rule changes |
60 an hour for each account, CORS and lifecycle together. Over it: 429 with Retry-After. |
Let websites use a bucket with CORS rules and Delete objects on a schedule with lifecycle rules explain each one.
| What |
Limit |
| Keys on a service |
No fixed number. |
| Label |
1–64 characters: letters, digits, spaces, dots, hyphens and underscores, starting with a letter or a digit. Otherwise: Labels use letters, digits, spaces, dots, hyphens and underscores. |
| Label on a service |
Each key on a service has a label of its own, and labels that differ only in upper and lower case count as the same: A key labelled ci deploy already exists on this service. |
| Access key ID |
24 characters, starting with AKIA. |
| Secret key |
43 characters, shown once when you create the key. |
| Permissions |
Read only or Read and write. No key can create or delete a bucket. |
| Bucket settings |
No key can change them. Writes to versioning, CORS, lifecycle and the other settings answer 403 with Change this setting in the dashboard or the Object Storage API. Reading them works (Bucket settings). |
| Scope |
One bucket of the service, or All buckets on this account. |
| Regions |
A key works at every regional endpoint. |
| Time to take effect |
Up to a couple of minutes after you create or revoke a key. |
What a key can do explains the permissions and scopes.
| What |
Limit |
| Lifetime |
900–43200 seconds (15 minutes to 12 hours). The default is 3600. The dashboard offers 15 minutes, 1 hour and 12 hours. |
| Permissions |
Read only or Read and write, as for an access key. Never a bucket setting, an ACL, Object Lock, or creating or deleting a bucket. |
| Scope |
One bucket of the service, or All buckets on this account, and optionally a key prefix. |
| Key prefix |
At most 256 bytes. No *, ?, $ or backslash, and no leading slash. A request that reads or writes an object does not tell upper and lower case apart in it. |
| Revoking |
Not possible. They stop at their expiry. |
| Regions |
Send each request to the endpoint of the region that holds the bucket, as for an access key. |
| Creating them |
120 an hour for each account. Over it: 429 with the header Retry-After: 3600 and Too many requests for this action. Try again later. |
| Availability |
Only while we have the feature on: Temporary credentials are not available yet. Create an access key instead. While a region's storage servers catch up: Temporary credentials are not ready in this region yet. Try again in a few minutes. |
Create temporary credentials explains each one.
| What |
Limit |
| Availability |
Only while we have default encryption on. Until then a bucket's Default encryption card reads Not available yet, and turning it on answers 409 with Default encryption is not available yet. We are getting it ready and will turn it on soon. |
| Which objects |
Those written after you turn it on. Objects already in the bucket keep the state they were written in. |
| Algorithm |
AES-256 (AES256). |
| Turning it off |
Always possible while the service is active. Encrypted objects stay readable. |
Changes while the service is not active |
Refused with 409 and This service is suspended. You can change encryption once it is active., with the service's status in place of suspended. |
| Changes |
60 an hour for each account. Over it: 429 with the header Retry-After: 3600. |
| Your own key (SSE-C) |
A 256-bit key, sent with each upload and each read. It needs no setup and works with default encryption on or off. |
Encrypt the objects in a bucket explains each one.
| What |
Limit |
| Lifetime of a link from the API |
60–3600 seconds, 900 by default. We shorten a request for up to 86400 seconds to 3600. Below 60 or above 86400, the API answers 422. |
| What a link does |
One operation on one object: get, put or delete. |
| Older versions |
A get link can name a version_id, and then downloads that version. |
| Uses |
Any number, until the link expires. |
| Object key |
Up to 1,024 bytes: Object keys are at most 1024 bytes. |
| Content type |
Up to 255 characters, for put. |
| Links from an S3 client |
Signed with your key. They stop working when they expire or when you revoke the key. |
Share a file with a presigned URL shows both ways to create one.
| What |
Limit |
| Entries per page in the dashboard |
200. Load more lists the next 200. |
| Entries per page through the API |
1–1000 (max_keys), 200 by default. |
prefix through the API |
Up to 1,024 characters. |
token through the API |
Up to 2,048 characters. |
| Keys in one delete request through the API |
1–1000. |
| Deleting a folder in the dashboard |
Up to 10,000 objects under each folder in one run. Over it: A folder had more than the browser deletes at once; run the delete again for the rest. |
| What |
Limit |
| Endpoint |
https://s3.<region>.coritan.com, one for each region, with :7337 unless the region also answers on port 443. |
| Port |
7337 in every region, and 443 in a region whose endpoint the dashboard shows without a port. |
| Protocol |
HTTPS with TLS 1.2 or 1.3. A plain HTTP request to port 7337 answers 400 Bad Request. |
| Addressing |
Path style in every region. Virtual-hosted style where the dashboard offers it. A bucket name with a dot is path style only. |
| Signature |
AWS Signature Version 4, with any region name. |
| Host |
The host and port of the address you connect to, exactly: the endpoint, or the bucket's own hostname in virtual-hosted style. A request sent to an IP address, or through a proxy that changes the Host header, fails with SignatureDoesNotMatch. |
Connect an S3 client explains each setting, and Endpoints, ports and addressing styles says which ports and addresses a region answers.
| What |
Limit |
| Rules on a bucket |
100. Over it: A bucket has at most 100 notification rules. |
| Events |
object-create and object-delete (Events). |
| Prefix and suffix |
1024 characters each, matched exactly, capitals included. |
| Description |
100 characters. |
| Overlapping rules |
Refused: two rules may not share an event for any one key (Overlapping rules). |
| Address |
https:// only, on the public internet and outside Coritan, at most 2048 characters. |
| Answer we wait for |
10 seconds. Only a 2xx status counts as delivered. We do not follow redirects. |
| Attempts |
6: at once, then after 1 minute, 5 minutes, 30 minutes, 2 hours and 6 hours. |
| Pause |
We pause a rule whose every delivery failed for a day, and email the account's owner. |
| Delivery log |
30 days. |
| Rule changes |
120 an hour for each account: adding, editing, pausing and deleting a rule, and rotating its secret. Over it: 429 with Retry-After: 3600. |
| Test events |
30 an hour for each account. Over it: 429 with Retry-After: 3600. |
Get notified when objects change explains each one.
| What |
Limit |
| Migrations queued or running in one service |
3. |
| Largest object a migration or replication copies |
625 GB. |
| Failed objects kept for each migration |
1000. |
| Starting, cancelling and retrying migrations |
30 an hour for each account. |
| Check source |
30 in 10 minutes for each account. |
| Replication rules on a bucket |
10. |
| Replication passes |
Every 5 minutes, with a full comparison once a day. |
| Replication rule changes |
60 an hour for each account. |
Migrate objects from another provider and Replicate a bucket to another region explain each one.
| What |
Limit |
| Setting or removing a budget |
30 requests an hour for each account, shared by PUT and DELETE on /api/v1/billing/object-storage/{service_id}/budget and by Save budget and Remove budget in the dashboard. Over it: 429 with the header Retry-After: 3600 (Set or remove a budget). |
| Creating temporary credentials |
120 requests an hour for each account, by the dashboard and by POST /api/v1/client/object-storage/{service_id}/credentials. Over it: 429 with the header Retry-After: 3600 (Create temporary credentials). |
| Every Object Storage route of the Coritan API |
Counts towards the limits on requests from one address that Rate limits describes. |
| S3 requests |
Go to the regional endpoint, and do not count towards the Coritan API's limits. |
Changes to a bucket's settings and rules have hourly limits of their own, which the sections above list. Over one, the API answers 429 with Retry-After, and the dashboard shows Too many requests for this action. Try again later.