---
title: "Every plan's limits: the default, this server's PLATFORM_DEFAULT_LIMITS (Free), the operator's setting and what applies, plus the Free capacity pool and Free vs paid allocation"
method: GET
path: "/operator/plan-limits"
tags: ["Operator"]
---

# Every plan's limits: the default, this server's PLATFORM_DEFAULT_LIMITS (Free), the operator's setting and what applies, plus the Free capacity pool and Free vs paid allocation

`GET /operator/plan-limits`

## Request

- Base URL: `https://hostingsurge.com/api/v1`
- URL: `https://hostingsurge.com/api/v1/operator/plan-limits`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Host-hs_session`

## Response `200`

Plans & limits

- object
  - `plans` object[], required
    - `planId` 'free' | 'pro' | 'business', required
    - `name` string, required
    - `defaults` object, required: the plan catalog (billing/plans.ts): what applies without any setting
      - `projects` integer, nullable, required
      - `databases` integer, nullable, required
      - `seats` integer, nullable, required
      - `cpus` number, required: per project and per database
      - `memoryMb` integer, required: per project and per database
      - `totalCpus` number, nullable, required: the whole organization: every project and database together
      - `totalMemoryMb` integer, nullable, required
      - `buildMinutes` integer, nullable, required
      - `bandwidthGb` integer, nullable, required
      - `storageGb` integer, nullable, required: persistent volume storage of the whole organization, GB (docs/VOLUMES.md); null = no limit
      - `aiCredits` integer, required
    - `server` object, nullable, required: PLATFORM_DEFAULT_LIMITS keys this server sets (Free only; they sit between the catalog and this page)
      - `projects` integer, nullable
      - `databases` integer, nullable
      - `cpus` number
      - `memoryMb` integer
    - `setting` object, required
      - `projects` integer, nullable, required
      - `databases` integer, nullable, required
      - `seats` integer, nullable, required
      - `cpus` number, nullable, required
      - `memoryMb` integer, nullable, required
      - `totalCpus` number, nullable, required
      - `totalMemoryMb` integer, nullable, required
      - `buildMinutes` integer, nullable, required
      - `bandwidthGb` integer, nullable, required
      - `storageGb` integer, nullable, required
      - `aiCredits` integer, nullable: the plan-level Build Credits allowance (migration 203)
      - `deployedSitesMax` number, nullable
      - `trialDays` number, nullable
      - `requestsPerMonth` number, nullable
      - `cpuHoursPerMonth` number, nullable
      - `previewsPerTeam` number, nullable
      - `previewsPerProject` number, nullable
      - `agents` number, nullable
      - `builderSessions` number, nullable
      - `importsOpen` number, nullable
      - `buildConcurrency` number, nullable
      - `buildTimeoutMinutes` number, nullable
      - `pidsPerContainer` number, nullable
      - `cpuShares` number, nullable
      - `oomScoreAdj` number, nullable
      - `diskGbPerProject` number, nullable
      - `uploadMb` number, nullable
      - `crashLoopRestartsPerHour` number, nullable
      - `allowedClasses` string[], nullable
      - `rateLimitProfile` 'off' | 'default' | 'strict' | 'null', nullable
      - `note` string, nullable, required
      - `updatedBy` string, uuid, nullable, required
      - `updatedByEmail` string, nullable, required
      - `updatedAt` string, nullable, required: ISO-8601 timestamp
    - `effective` object, required: what the plan resolves to, before any organization's own override
      - `projects` integer, nullable, required
      - `databases` integer, nullable, required
      - `seats` integer, nullable, required
      - `cpus` number, required: per project and per database
      - `memoryMb` integer, required: per project and per database
      - `totalCpus` number, nullable, required: the whole organization: every project and database together
      - `totalMemoryMb` integer, nullable, required
      - `buildMinutes` integer, nullable, required
      - `bandwidthGb` integer, nullable, required
      - `storageGb` integer, nullable, required: persistent volume storage of the whole organization, GB (docs/VOLUMES.md); null = no limit
      - `aiCredits` integer, required
    - `sources` object, required
      - `projects` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `databases` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `seats` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `cpus` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `memoryMb` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `totalCpus` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `totalMemoryMb` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `buildMinutes` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `bandwidthGb` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `storageGb` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
      - `aiCredits` 'default' | 'server' | 'plan' | 'override' | 'unlimited', required
    - `policy` object: the plan policy (migration 203): allowed site classes, the site cap, the Free period, usage caps, engine limits
      - `defaults` object, required: the catalog (billing/plans.ts PLAN_POLICY_DEFAULTS)
        - `deployedSitesMax` number, nullable, required
        - `trialDays` number, nullable, required
        - `requestsPerMonth` number, nullable, required
        - `cpuHoursPerMonth` number, nullable, required
        - `previewsPerTeam` number, nullable, required
        - `previewsPerProject` number, nullable, required
        - `agents` number, nullable, required
        - `builderSessions` number, nullable, required
        - `importsOpen` number, nullable, required
        - `buildConcurrency` number, nullable, required
        - `buildTimeoutMinutes` number, nullable, required
        - `pidsPerContainer` number, nullable, required
        - `cpuShares` number, nullable, required
        - `oomScoreAdj` number, nullable, required
        - `diskGbPerProject` number, nullable, required
        - `uploadMb` number, nullable, required
        - `crashLoopRestartsPerHour` number, nullable, required
        - `allowedClasses` string[], nullable, required
        - `rateLimitProfile` 'off' | 'default' | 'strict', required
        - `aiCredits` number, nullable, required
      - `effective` object, required: what the plan resolves to with the setting of this page
        - `deployedSitesMax` number, nullable, required
        - `trialDays` number, nullable, required
        - `requestsPerMonth` number, nullable, required
        - `cpuHoursPerMonth` number, nullable, required
        - `previewsPerTeam` number, nullable, required
        - `previewsPerProject` number, nullable, required
        - `agents` number, nullable, required
        - `builderSessions` number, nullable, required
        - `importsOpen` number, nullable, required
        - `buildConcurrency` number, nullable, required
        - `buildTimeoutMinutes` number, nullable, required
        - `pidsPerContainer` number, nullable, required
        - `cpuShares` number, nullable, required
        - `oomScoreAdj` number, nullable, required
        - `diskGbPerProject` number, nullable, required
        - `uploadMb` number, nullable, required
        - `crashLoopRestartsPerHour` number, nullable, required
        - `allowedClasses` string[], nullable, required
        - `rateLimitProfile` 'off' | 'default' | 'strict', required
        - `aiCredits` number, nullable, required
      - `sources` object, required: why each policy field has its value
  - `freePool` object, required
    - `cpus` number, nullable, required
    - `memoryMb` integer, nullable, required
    - `note` string, nullable, required
    - `updatedBy` string, uuid, nullable, required
    - `updatedByEmail` string, nullable, required
    - `updatedAt` string, nullable, required: ISO-8601 timestamp
  - `allocation` object, required
    - `free` object, required
      - `organizations` integer, required
      - `running` object, required: limits of what runs now, suspended organizations excluded (as on the Server page)
        - `cpus` number, required
        - `memoryMb` integer, required
        - `count` integer, required
      - `all` object, required: limits of every project and database that exists: what the Free pool counts
        - `cpus` number, required
        - `memoryMb` integer, required
        - `count` integer, required
    - `paid` object, required
      - `organizations` integer, required
      - `running` object, required: limits of what runs now, suspended organizations excluded (as on the Server page)
        - `cpus` number, required
        - `memoryMb` integer, required
        - `count` integer, required
      - `all` object, required: limits of every project and database that exists: what the Free pool counts
        - `cpus` number, required
        - `memoryMb` integer, required
        - `count` integer, required
    - `unlimited` object, required: organizations in PLATFORM_UNLIMITED_ORG_IDS: never Free, never in the pool
      - `organizations` integer, required
      - `running` object, required: limits of what runs now, suspended organizations excluded (as on the Server page)
        - `cpus` number, required
        - `memoryMb` integer, required
        - `count` integer, required
      - `all` object, required: limits of every project and database that exists: what the Free pool counts
        - `cpus` number, required
        - `memoryMb` integer, required
        - `count` integer, required
  - `capacity` object, required: the host's CPUs and memory; null without host facts
    - `cpus` number, nullable, required
    - `memoryMb` integer, nullable, required
  - `bounds` object, required
    - `plan` object, required: what each plan setting may hold
    - `policy` object: what each policy field may hold (migration 203)
    - `freePool` object, required
      - `cpus` object, required
        - `min` number, required
        - `max` number, required
        - `step` number, required
      - `memoryMb` object, required
        - `min` number, required
        - `max` number, required
        - `step` number, required
  - `recommendedFreePool` object: the Free pool every brand starts with (migration 153): what "Use the recommended" fills in
    - `cpus` number, required
    - `memoryMb` integer, required
  - `staticSiteSize` object: the size every new static site gets on Free, and what "right-size static sites" brings older ones down to (migration 153)
    - `cpus` number, required
    - `memoryMb` integer, required

## Other responses

- `400`: Invalid request (code invalid_request)
- `403`: An action on an operator-console session older than 5 minutes (code forbidden, details.reauthenticate: sign in again at /admin/login), or an operator removed since the session was resolved
- `404`: Not found (code not_found); also the answer to any request without a live operator-console session (no admin cookie, a dashboard session, an API/MCP key or OAuth token, or a caller who is not a platform operator)
- `429`: Too many requests (code rate_limited); see Retry-After
- `501`: Not available on this server (code not_configured)

---

[API](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api.md) · [All operations](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/revisions/4d08337cdff1?raw)
