Skip to content

Plans & quotas

Every account is on a plan — Free by default, Pro for more resources and extra features (managed databases, dev sync). Plans define every limit the platform enforces.

Limits are per-plan, not hardcoded

Plan limits live in the platform's plans table and can be adjusted by the administrators, so this page describes the dimensions rather than exact numbers. Check your current limits and usage on the dashboard (plan usage card) or via GET /account/usage on the HTTP API.

What a plan controls

Per-container resources (SSR apps):

DimensionMeaning
MemoryRAM limit per container
CPUvCPU share (millicores) per container
Process limitMax processes/threads (pids) per container

Project & deploy limits:

DimensionMeaning
Max projectsHow many projects you can create
Deploys per hourRate cap on deployments (RATE_LIMITED, HTTP 429)
Upload sizeMax source archive size per deploy (UPLOAD_TOO_LARGE, HTTP 413)
OCI image sizeMax existing-image transfer and inspected size; 0 disables dockerimage projects/deploys
Env varsMax environment variables per project (QUOTA_EXCEEDED)
StorageDisk footprint for static files and images

Traffic:

DimensionMeaning
Rate limit / minutePer-minute request rate limit on your sites
Monthly requestsRequest quota per calendar month (UTC)
Monthly bandwidthBandwidth quota per calendar month (UTC)

Pro features:

DimensionMeaning
Managed database projectsHow many projects may use a managed database (0 disables it); Production/Preview/Dev branches together consume one slot
Database sizeSize cap per channel database — one branch going over does not make another branch read-only
Database connectionsConnection cap per channel database role
Database backupsCompleted backups kept per project across all channels (0 disables backups)
SSE connectionsConcurrent realtime connections your plan is sized for
Dev syncWhether apco dev --sync is available
Preview deploysWhether Preview-channel deployments are available
Active PR PreviewsMaximum simultaneous GitHub App PR Previews per project; reaching it rejects the new Preview without evicting another PR
Scheduled jobsMaximum active manifest definitions per project; 0 disables scheduling/execution
Concurrent job runsMaximum running logical jobs per project across definitions/channels; excess work waits

What happens when you hit a quota

Monthly request and bandwidth usage is checked hourly, summed across all your projects for the current UTC calendar month:

  1. At 80% of either limit — you receive a warning email (once per calendar month).
  2. At 100% — all of your active projects are suspended: containers stop, visitors see a suspension page (503), and dev-channel deployments are taken down too. New deploys are rejected with SUSPENDED (HTTP 403).

Suspension is not automatic to undo

Suspended projects are never auto-resumed — not even when the month rolls over. Upgrade your plan or wait for the monthly reset, then contact an administrator to resume your projects.

Suspended projects show up in apco projects list with a suspendedAt timestamp and a suspendReason ("quota" or "admin").

Hard limits vs quotas

Most limits reject the specific action (a too-large upload, one deploy too many this hour, an extra env var) with a clear error code and leave everything else running. Only the monthly request/bandwidth quotas suspend projects.

Checking your usage

  • Dashboard — the plan usage card shows month-to-date requests and bandwidth against your limits, plus per-project resource usage.
  • APIGET /account/usage returns your plan (including devSyncEnabled, previewEnabled, maxActivePreviews, maxImageMb, maxDatabases, dbSizeMb, dbConnectionLimit, maxBackups, maxScheduledJobs, maxConcurrentJobRuns, maxSseConnections) and usage vs limits. Note it requires a full-access key, not a scoped token.

APCO Cloud — ship apps with one command.