Limits
Plan entitlements and operational bounds, in one table-shaped place.
Plans
Plans are billed per organization (via Polar); project entitlements derive from the org's plan. POST /v1/projects does not accept a plan - it is not a choice you make per project.
| Vibe | Ship | Business | |
|---|---|---|---|
| Storage per project | 2 GiB | 10 GiB | 25 GiB |
| Connections per project | 15 | 30 | 60 |
| Projects per organization | 1 | 3 | Unlimited |
| Preview databases per project | 1 | 5 | Unlimited |
| Statement timeout | 30s | 60s | 120s |
| Idle-in-transaction timeout | 60s | 90s | 120s |
| K/V store capacity | 32 MB | 128 MB | 512 MB |
The connection budget covers direct and pooled access together; the pooled endpoint exists so app traffic does not eat it. Statement and idle-in-transaction timeouts are server-enforced on project roles.
K/V stores
| Stores per project | 1 |
| Capacity | Plan-sized: 32 MB / 128 MB / 512 MB |
| Eviction policy | volatile-lru - only keys with a TTL are evictable |
| Persistence | Periodic snapshot - no backups, no point-in-time recovery, no replica |
| RESP port | 6379, TLS required |
| Token grace period on rotation | None; the old token stops immediately |
Capacity is the storable maxmemory. The KV cell's own memory ceiling is twice that so a snapshot
fork has headroom, and the difference is not usable capacity. See K/V.
Preview databases
| Default TTL | 24 hours |
| Maximum TTL | 168 hours (7 days) |
| TTL extension | Any value 1–168 hours, repeatable |
SQL runner (Studio, capydb sql, POST /v1/projects/{id}/sql)
| Statement timeout | 15 seconds |
| Result rows | Default 200, maximum 1000 |
| Query length | 20,000 characters |
Backups
| Scheduled backup cadence | Daily, at a UTC hour:minute you choose |
| Scheduled backup retention | 1–365 days |
| Point-in-time recovery window | 7 days (Ship and Business; see Disaster recovery) |
| On-demand backups | Unlimited within plan storage reason; subject to the same retention you configure |
Imports
- Source must be publicly reachable (private/internal addresses rejected)
- Source database size must fit the plan's storage limit (preflight warns above 80%)
- No Postgres major downgrades (source major must be ≤ the database's selected target major: 16, 17, or 18)
- Source extensions must be on the allowlist
Webhooks
| Delivery attempts | 8, exponential backoff 30s → 30m cap |
| Receiver requirements | HTTPS, publicly reachable |
Usage alerts
Storage and connection usage are evaluated against the plan limits above; see Alerts.
| Warning threshold | ≥ 80% of the limit |
| Critical threshold | ≥ 95% of the limit |
| Critical → warning downgrade | below 90% |
| Resolution | below 75% |
| Re-notification while open | at most every 24 hours (escalations notify immediately) |
| Resolved-alert history | 30 days |
Extensions
14 allowlisted extensions across the supported Postgres 16, 17, and 18 majors, including pgvector and PostGIS - the full list and trusted/superuser split is in Extensions.
API
Per-IP rate limiting applies across the API, with a stricter limit on CLI-login endpoints. Exact thresholds are operational and may change; treat 429 as a signal to back off, and contact support if a legitimate workload keeps hitting it.
Need more?
If a limit here is the only thing between you and shipping, contact support - several of these are policy, not physics.