Limits in the Aetherfy vector database
Per-request caps in the Aetherfy vector API
These caps are enforced in Aetherfy’s code on every request, on every tier. They do not scale with your plan.
| Operation | Cap | Error |
|---|---|---|
search / scroll — limit | 1 to 1000 | 400 VALIDATION_ERROR, with field and max in the body |
points/retrieve — ids | 256 ids | 400 |
points/delete — points[] | 512 ids | 400 |
Payload set / overwrite / delete — points[] | 512 ids | 400 |
upsert — point count | 10 000 per call | 400 TOO_MANY_POINTS |
upsert — wire body | 500 MB | 413 PAYLOAD_TOO_LARGE |
upsert — idle timeout | 30 s with no bytes received | 408 REQUEST_IDLE_TIMEOUT |
| Any response body | 10 MB | 413 RESPONSE_TOO_LARGE, with size_mb and max_size_mb |
| Per-point payload | 64 KB | 400 PAYLOAD_TOO_LARGE |
| Buffered (non-upsert) request body | 10 MB | 413 |
| Collection name | 1 to 100 characters, [a-zA-Z0-9_-] only | 400 |
| Collection description | 500 characters, no HTML angle brackets | 400 |
Every one of these is a hard refusal from Aetherfy, not a truncation. A search asking for 5000 results does not silently return 1000 — it returns 400.
How Aetherfy caps an upsert
Upserts to the Aetherfy vector database are streamed, which means there is no buffered body-size cap in the ordinary sense. Three separate ceilings apply instead, and they measure different things:
| Ceiling | What it measures | Error |
|---|---|---|
| 10 000 points | Number of points in one call | 400 TOO_MANY_POINTS |
| 500 MB | Bytes on the wire | 413 PAYLOAD_TOO_LARGE |
| 30 s idle | Time since the last byte arrived | 408 REQUEST_IDLE_TIMEOUT |
The 10 000-point cap is a request-level ceiling on count, not on size. A batch of 10 001 tiny points is refused; a batch of 9 999 large ones is not — it will instead be judged against the 500 MB wire ceiling. Split large loads into batches sized by point count first, and check the byte size second.
The idle timeout is measured against silence, not total duration. A slow but continuously-transmitting upload does not trip it; a stalled connection does.
Per-tier caps in the Aetherfy vector database
These caps come from your plan. The request rate is per minute; storage is counted as described in the storage section below.
| Tier | Requests per minute | Maximum collections | Maximum storage |
|---|---|---|---|
| Free | 1 000 | 3 | 512 MB |
| Starter | 5 000 | 30 | 10 GB |
| Performance | 20 000 | 200 | 200 GB |
| Enterprise | 50 000 | unlimited | unlimited |
Exceeding the collection cap returns 400 COLLECTION_LIMIT_EXCEEDED. Plan
details are at https://aetherfy.com/pricing ;
current usage is in the Aetherfy dashboard at
https://app.aetherfy.com/dashboard/billing .
Note that Free and Starter are single-region plans — the region is fixed by the first resource created — and multi-region replication begins at the tier named Performance. That distinction interacts directly with the storage cap.
Rate limiting in the Aetherfy vector database
Aetherfy meters requests in a fixed 60-second bucket, not a sliding window. The counter resets at the bucket boundary; it does not decay continuously. A burst that fills the bucket early leaves the rest of that minute refused, and the full allowance returns at the boundary rather than trickling back.
Exceeding the allowance returns HTTP 429 with error.code set to
RATE_LIMIT_EXCEEDED.
There is no Retry-After header on an Aetherfy 429. Do not write a client
that waits for one — it will not arrive. Back off on your own schedule.
How Aetherfy counts storage
max_storage_bytes counts every replica. Storage is measured as bytes
stored, summed across the regions holding your data — not as the logical size of
your data set.
| Layout | Counted against your cap |
|---|---|
| 100 GB in one region | 100 GB |
| 33 GB replicated across three regions | 99 GB |
This is why the tier that unlocks replication also raises the storage cap: replication multiplies the number, and on a multi-region plan a collection consumes its bytes once per region that holds it.
When you exceed the cap, Aetherfy refuses writes with 429
STORAGE_LIMIT_EXCEEDED. Reads are never blocked. A collection over its
storage cap is still fully searchable; you simply cannot add to it until space is
freed.
One detail about the crossing itself: the batch that takes you over the threshold is allowed through. Aetherfy refuses subsequent writes, so you will observe the limit as a rejection after the fact, not as a partially-applied batch.
Vector dimensions and point counts in the Aetherfy vector database
Two limits people expect to find here do not exist:
| Expected limit | Reality on Aetherfy |
|---|---|
| Maximum vector dimension | No dimension cap is enforced anywhere in the code |
| Maximum points per collection | No per-collection point-count cap |
What is enforced at the collection level is storage bytes and the collection count from your tier — nothing else. A collection’s practical size ceiling is therefore your storage cap, reached through however many points and however many dimensions get you there.
Error codes attached to Aetherfy limits
Every cap on this page surfaces as one of these codes. Full definitions, including which are retryable, are on errors.
| Code | HTTP | Cap it enforces |
|---|---|---|
VALIDATION_ERROR | 400 | limit, id-array and point-array caps |
TOO_MANY_POINTS | 400 | 10 000 points per upsert |
PAYLOAD_TOO_LARGE | 400 / 413 | 64 KB per-point payload / 500 MB upsert wire body |
RESPONSE_TOO_LARGE | 413 | 10 MB response body |
REQUEST_IDLE_TIMEOUT | 408 | 30 s upsert idle |
COLLECTION_LIMIT_EXCEEDED | 400 | Tier collection count |
RATE_LIMIT_EXCEEDED | 429 | Tier requests per minute |
STORAGE_LIMIT_EXCEEDED | 429 | Tier storage bytes |
Frequently asked questions about Aetherfy limits
Does storage count once, or once per region?
Once per replica. Aetherfy’s max_storage_bytes is measured across every region
that holds a copy of your data, so a 33 GB collection replicated to three regions
consumes 99 GB of your cap — the same as 99 GB sitting in a single region. This
only affects plans that replicate: Free and Starter are single-region, so on
those tiers stored bytes and counted bytes are the same number.
What happens if I exceed my storage cap?
Writes are refused with 429 STORAGE_LIMIT_EXCEEDED; reads are never blocked. An
Aetherfy collection over its cap remains fully searchable and retrievable — only
the write path closes. Note also that the batch which crosses the threshold is
allowed to complete, so the first error you see arrives on the write after the
one that put you over. To recover, delete points or collections, or move to a
tier with a larger cap.
Why is my upsert rejected at 10 000 points when there is no body-size limit?
Because the two are different ceilings. The 10 000 figure is a per-call cap on
the number of points in the request, enforced by Aetherfy before the data is
processed; it says nothing about bytes. Upserts stream, so there is no ordinary
buffered body limit — but there is still a 500 MB wire ceiling that returns 413
PAYLOAD_TOO_LARGE. A batch can therefore be refused for having too many points
while being nowhere near any size limit, and vice versa. Batch by point count
first.
Is there a Retry-After header on an Aetherfy 429?
No. Aetherfy does not send Retry-After on a 429, on either
RATE_LIMIT_EXCEEDED or STORAGE_LIMIT_EXCEEDED. Clients must implement their
own backoff. Since the rate-limit bucket is a fixed 60-second window, waiting for
the next boundary is a sound strategy for RATE_LIMIT_EXCEEDED; for
STORAGE_LIMIT_EXCEEDED, waiting achieves nothing, because nothing frees itself
— you have to delete data or raise the cap.
Is the Aetherfy rate-limit window sliding?
No — it is a fixed 60-second bucket. The count resets wholesale at each boundary rather than ageing out request by request. Practically, this means a client that spends its entire minute’s allowance in the first second is refused for the rest of that minute and then has the full allowance again, and that smoothing your request rate across the minute is what keeps you under the cap.