Limits
This page lists every limit that applies to your buckets, files, and credentials. Where a limit has its own error, the table gives the exact message.
Buckets per account
| Limit | Value |
|---|---|
| Buckets you can have | 50 |
| When you reach it | Create a bucket answers 400 with You can have at most 50 buckets. |
| Where to read it | data.summary.bucket_limit in the answer to List buckets. data.summary.bucket_count is how many you have now. |
Bucket names
These rules apply to the name you send to Create a bucket.
| Rule | Value |
|---|---|
| Length | 3 to 40 characters |
| Characters | Lowercase letters, numbers, and hyphens |
| First and last character | A letter or a number, never a hyphen |
| Unique | Among your own buckets. Two accounts can use the same name. |
| Spaces and capitals | Spaces around the name are removed, and capital letters are changed to lowercase, before the name is checked. |
| Error | 400 with Use 3-40 lowercase letters, numbers and hyphens. in the validation error format |
The name is not what you use in requests. Every bucket also has an identifier: kb-, then the name, then - and 12 random hexadecimal characters. It is at most 56 characters long.
File size
| Where | Limit |
|---|---|
| Dashboard | 1 GB (1,073,741,824 bytes) per file. The dashboard refuses a larger file before it uploads. |
| One upload request to the API | 5 GB. Storage accepts at most 5 GB in a single request. |
Upload a file does not check the 1 GB limit itself. data.summary.max_object_size_bytes in the answer to List buckets reports the dashboard's limit, 1073741824.
If storage refuses an upload for any reason, the answer is 502 with The storage backend could not complete that request.
A file larger than 5 GB is refused with 413 by the server in front of the gateway, before the upload starts. That answer does not use the {"error": "..."} form.
File names
A file's name is also called its key. It is the part of the address after the bucket identifier, for example reports/2026/summary.pdf.
| Rule | Value |
|---|---|
| Maximum length | 900 characters |
| What is counted | Characters, not bytes |
| Leading slash | Ignored. /reports/summary.pdf and reports/summary.pdf are the same name. |
| Surrounding spaces | Removed |
| Double slash | Refused, for example reports//summary.pdf |
. or .. as a folder name |
Refused, for example reports/../summary.pdf |
Backslash (\) |
Refused |
| Control characters | Refused: the characters from U+0000 to U+001F, which include tab and new line, and U+007F |
| Every other character | Allowed, including spaces inside the name and letters from any language |
Name that ends in / |
A folder. It cannot be used for visibility or links. |
| Error | 400 with That file path is not allowed. |
Storage itself accepts a name of at most 1,024 bytes. Letters outside the English alphabet take more than one byte each, so a name with many of them can pass 1,024 bytes before it reaches 900 characters.
These endpoints check names against the rules above:
- Create a folder, for
folder_path - Get visibility, for
key - Set visibility, for
object_key - Get a link, for
object_key
Upload a file, Download a file, Get a file's details, Delete a file, and List files do not check them. Use only names that follow the rules, because a file whose name breaks them cannot be given a link, and its visibility cannot be read or changed.
Credentials per account
| Limit | Value |
|---|---|
| Credentials you can have | 5 |
| When you reach it | Creating a sixth fails with You can have at most 5 credentials. Delete one you no longer use, then create the new one. |
| Credential name | Up to 60 characters |
You create credentials in the dashboard. See Credentials.
List page size
| Limit | List files | List buckets |
|---|---|---|
| Default | 100 entries | 50 buckets |
| Most | 1,000 entries | 100 buckets |
| Counted | Files and folders together | Buckets |
limit above the most |
Lowered to the most. It is not refused. | Lowered to the most. It is not refused. |
limit that is not a whole number, or is less than 1 |
Ignored, and the default is used. It is not refused. | Ignored, and the default is used. It is not refused. |
This is the limit query parameter of both endpoints. To read more than one page, see Pagination. You can have at most 50 buckets, so one answer of List buckets holds them all unless you ask for a smaller limit.
Temporary links
| Limit | Value |
|---|---|
| How long a temporary link works | 10 minutes by default |
| Where to read the exact time | data.expires_at in the answer to Get a link, and data.share_expires_at in the answer to Get visibility |
| Permanent links | A public file's link does not expire. expires_at and share_expires_at are null. |
You cannot extend a temporary link. Ask for a new one when it has expired.
Request bodies
| Limit | Value |
|---|---|
| Size of the JSON body on Create a bucket, Create a folder, Set visibility, and Get a link | 64 KB (65,536 bytes) |
| A larger body | Only the first 64 KB is read, and the rest is dropped. What is read is cut off part way, so it is not valid JSON. |
Every valid request is far smaller, because the largest value in one is a file name of at most 900 characters.
Total storage
There is no cap on the total size of your files. data.summary.limit_bytes in the answer to List buckets is null. You pay for what you store. See Pricing and billing.