# KV Store limits

[KV Store](/en/documentation/platform/kv-store/) bounds the name a namespace takes, the number of namespaces one list request returns, and what an account may change after a namespace exists. This page states each bound, the response the platform returns past it, and the storage and keys an account includes on each billing meter. KV Store is a Preview product on every service plan, and it is not enabled by default. On Hobby and on Pro, access is requested and approved case by case; on Enterprise it is arranged with the account. To request access, contact the [Technical Support](/en/documentation/support/) team.

---

## Default limits

KV Store applies each bound below on every service plan. A rejected request arrives in one of two error envelopes, and which one arrives depends on what rejected it. The KV service answers a validation failure with `state` set to `error` and an `error` object carrying a snake\_case `code` and a `message`. The platform gateway answers an unsupported method with an `errors` array carrying a numeric `code` and a `title`. The Past the limit column names the status, the code, and the text each one returns.

| Scope                                                     | Limit                                                                                                               | Past the limit                                                                                                                                           |
| --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Namespace name length (`name`)                            | 3 to 63 characters                                                                                                  | `400` `validation_error`, with `Name must be at least 3 characters long` below 3 characters and `Name must be no more than 63 characters long` above 63. |
| Namespace name characters                                 | Letters, numbers, the hyphen (`-`), and the underscore (`_`), matching `^[a-zA-Z0-9_-]+$`. Names are case-sensitive | `400` `validation_error`, `Name can only contain alphanumeric characters, hyphens and underscores`.                                                      |
| Namespace name uniqueness                                 | One name per account                                                                                                | `400` `validation_error`, `Namespace already exists`.                                                                                                    |
| Namespaces per list response (`page_size`)                | 1 to 100, default 50                                                                                                | `400` `invalid_page_size`, `Page size must be between 1 and 100`.                                                                                        |
| Renaming, deactivating, emptying, or deleting a namespace | Not supported. A namespace is permanent                                                                             | `PUT`, `PATCH`, and `DELETE` each answer `405` `10007`, title `Method Not Allowed`.                                                                      |

A create request that carries no `name`, or a `name` set to an empty string, is rejected the same way: `400` `validation_error`, with the message `Name is required`. Uppercase letters pass every check in the table above, so a name is accepted whatever its case. Lowercase is a convention rather than a rule, and [Best practices](/en/documentation/platform/kv-store/best-practices/) covers it.

The name is the namespace's identifier, and it is read-only once the namespace exists. Because no interface removes a namespace, every name an account creates stays on that account, and a name chosen badly cannot be corrected in place. For the three operations the bounds above apply to, refer to [Namespaces](/en/documentation/platform/kv-store/namespaces/).

---

## Limits on keys and values

The bounds below apply to the data a function stores, rather than to the namespace that holds it.

| Scope                   | Limit                              |
| ----------------------- | ---------------------------------- |
| Key size                | Up to 512 bytes, UTF-8 encoded     |
| Value size              | Up to 25 MB per item               |
| Metadata size           | Up to 1,024 bytes, JSON-serialized |
| Writes to one key       | 1 write per second to the same key |
| Minimum `expirationTtl` | 60 seconds                         |
| Minimum `cacheTtl`      | 60 seconds                         |

The client applies none of these itself. It checks that `expirationTtl` and `expiration` are numbers and that `metadata` is a string or an object, and it passes everything else through, so a value past one of these bounds is rejected by the platform rather than by the code that sent it. For what each option does, refer to [KV client](/en/documentation/devtools/runtime/api-reference/kv-store/).

---

## Limits per plan

| Ceiling                | Hobby | Pro   | Enterprise |
| ---------------------- | ----- | ----- | ---------- |
| Namespaces per account | 1,000 | 1,000 | 1,000      |
| Storage per account    | 5 GB  | 50 GB | 300 GB     |

The storage ceiling is the most an account holds at once. It is separate from the storage a plan includes before a charge applies, which the next section states.

---

## Included usage

KV Store is billed on three metrics: Storage, Keys Read, and Keys Written. Each account includes an amount of each metric before a charge applies, and the three amounts are flat: they do not vary by service plan.

| Metric       | Included             | What it counts                           |
| ------------ | -------------------- | ---------------------------------------- |
| Storage      | 1 GB per month       | The data KV Store holds for the account. |
| Keys Read    | 100,000 keys per day | Every key a read returns.                |
| Keys Written | 1,000 keys per day   | Every key a write affects.               |

Two of the three meters reset every day, which bounds a workload more tightly than the monthly storage amount does. For example, a function that writes one key on every request it serves reaches the included 1,000 keys after 1,000 requests, whatever the size of the values it wrote.

Azion offers three service plans: Hobby, Pro, and Enterprise. The plan comparison carries exactly one KV Store row, and that row is access rather than a quota: it reads `Upon request (subject to approval)` on Hobby and on Pro, and `Custom` on Enterprise. Preview access is the only dimension of KV Store that varies by plan.

For the rate that applies past an included amount, refer to [Pricing](/en/documentation/fundamentals/pricing/#kv-store). For what each of the three plans carries, refer to [Azion pricing](https://www.azion.com/en/pricing/).

---

## Related resources

- [Namespaces](/en/documentation/platform/kv-store/namespaces.md): The fields, operations, and error envelopes the name and paging bounds apply to.
- [KV client](/en/documentation/devtools/runtime/api-reference/kv-store.md): The methods a function calls against a namespace, and what each one returns.
- [Best practices](/en/documentation/platform/kv-store/best-practices.md): How to name a namespace that cannot be renamed, and how to read both error envelopes.
- [Troubleshooting](/en/documentation/platform/kv-store/troubleshooting.md): What to do about a request that one of these bounds rejected.
- [Pricing](/en/documentation/fundamentals/pricing.md#kv-store): The rate that applies past an included amount of storage, reads, or writes.
