---
title: "Customer overview: org info, billing/dunning state, limit override, members, projects, databases, storage, email, AI usage and recent audit"
method: GET
path: "/operator/organizations/{organizationId}"
tags: ["Operator"]
---

# Customer overview: org info, billing/dunning state, limit override, members, projects, databases, storage, email, AI usage and recent audit

`GET /operator/organizations/{organizationId}`

## Request

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

## Path parameters

- `organizationId` string, uuid, required

## Response `200`

Organization detail

- object
  - `organization` object, required
    - `id` string, uuid, required
    - `name` string, required
    - `createdAt` string, required: ISO-8601 timestamp
    - `suspended` boolean, required
    - `suspendedAt` string, nullable, required: ISO-8601 timestamp
  - `suspension` object, required
    - `suspended` boolean, required
    - `suspendedAt` string, nullable, required: ISO-8601 timestamp
  - `billing` object, required
    - `organizationId` string, uuid, required
    - `organizationName` string, required
    - `planId` string, required
    - `subscriptionStatus` string, nullable, required
    - `interval` 'month' | 'year' | 'null', nullable, required
    - `currentPeriodEnd` string, nullable, required: ISO-8601 timestamp
    - `cancelAtPeriodEnd` boolean, required
    - `trialEnd` string, nullable, required: ISO-8601 timestamp
    - `dunningState` 'ok' | 'past_due' | 'restricted', required
    - `pastDueSince` string, nullable, required: ISO-8601 timestamp
    - `graceUntil` string, nullable, required: ISO-8601 timestamp
    - `deploysBlockedAt` string, nullable, required: ISO-8601 timestamp
    - `customerId` string, nullable, required
    - `livemode` boolean, nullable, required
    - `openAmount` number, required: amount remaining on open invoices, minor units
  - `limitOverride` object, required
    - `projects` integer, nullable, required
    - `databases` integer, nullable, required
    - `seats` integer, nullable, required
    - `cpus` number, nullable, required
    - `memoryMb` integer, nullable, required
    - `buildMinutes` integer, nullable, required
    - `aiCredits` integer, nullable, required
    - `totalCpus` number, nullable, required: org-wide cap on the sum of vCPU over every project and database (migration 136); null = none
    - `totalMemoryMb` integer, nullable, required: org-wide cap on the sum of memory (MB) over every project and database; null = none
    - `storageGb` integer, nullable: persistent volume storage of the whole team, GB (migration 203)
    - `bandwidthGb` integer, nullable: bandwidth per month, GB (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
  - `planLimits` object, required
    - `projects` integer, nullable, required
    - `databases` integer, nullable, required
    - `seats` integer, nullable, required
    - `buildMinutes` integer, nullable, required
    - `aiCredits` integer, required
    - `cpus` number, required
    - `memoryMb` integer, required
    - `totalCpus` number, nullable
    - `totalMemoryMb` integer, nullable
    - `storageGb` integer, nullable: persistent volume storage of the whole organization, GB (migration 147); null = no limit
  - `effectiveLimits` object, required
    - `projects` integer, nullable, required
    - `databases` integer, nullable, required
    - `seats` integer, nullable, required
    - `buildMinutes` integer, nullable, required
    - `aiCredits` integer, required
    - `cpus` number, required
    - `memoryMb` integer, required
    - `totalCpus` number, nullable
    - `totalMemoryMb` integer, nullable
    - `storageGb` integer, nullable: persistent volume storage of the whole organization, GB (migration 147); null = no limit
  - `allocation` object: sum of the CPU/memory limits of every project and database of the organization (what the total caps count)
    - `cpus` number, required
    - `memoryMb` integer, required
  - `limitSources` object: why each value of planLimits (plan level) and effectiveLimits (with the override) applies (migration 139)
    - `plan` 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
    - `effective` 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
  - `freePool` object, nullable: the platform-wide Free capacity pool (migration 139); null when no pool is set
    - `applies` boolean, required: true: the organization is on Free (not the unlimited tier), so its growth is held to the pool
    - `cpus` number, nullable, required
    - `memoryMb` integer, nullable, required
    - `allocatedCpus` number, required
    - `allocatedMemoryMb` integer, required: what every Free organization holds together
  - `planGrant` object, nullable: the team's best active plan grant (migration 157): its plan applies when it is higher than the team's own
    - `grantId` string, uuid, required
    - `planId` 'pro' | 'business', required
    - `startsAt` string, required: ISO-8601 timestamp
    - `endsAt` string, nullable, required: ISO-8601 timestamp
    - `applies` boolean, required: false when the team's own plan is as good or better
  - `unlimited` boolean: PLATFORM_UNLIMITED_ORG_IDS: never limited; overrides and the Free period do not apply
  - `policy` object: the plan policy (migration 203): the plan level, what applies with the override, and why
    - `plan` object, required
      - `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
      - `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
  - `trial` object, nullable: the Free period (migration 203); null when it could not be read, absent on a server without it
    - `state` 'none' | 'active' | 'site_cap' | 'ended' | 'paused' | 'exempt', required
    - `startedAt` string, nullable, required: ISO-8601 timestamp
    - `endsAt` string, nullable, required: ISO-8601 timestamp
    - `endedAt` string, nullable, required: ISO-8601 timestamp
    - `endReason` 'time' | 'sites' | 'usage' | 'operator' | 'null', nullable, required
    - `sitesDeployed` integer, required
    - `sitesMax` integer, nullable, required
    - `pauseAt` string, nullable, required: ISO-8601 timestamp
    - `retentionUntil` string, nullable, required: ISO-8601 timestamp
    - `paymentsAvailable` boolean, required
    - `mode` 'off' | 'dry_run' | 'on'
    - `showCountdown` boolean
    - `usageCapped` object, nullable
      - `metric` 'requests' | 'bandwidthGb' | 'cpuHours', required
      - `at` string, required: ISO-8601 timestamp
  - `usage` object, nullable: this calendar month's metered usage (UTC)
    - `month` string, required: YYYY-MM (UTC)
    - `requests` number, nullable, required
    - `bandwidthBytes` number, nullable, required
    - `cpuSeconds` number, nullable, required
    - `buildMinutes` number, nullable, required
  - `members` object[], required
    - `id` string, uuid, required
    - `email` string, required
    - `role` string, required
    - `verified` boolean, required
    - `disabled` boolean, required
    - `twoFactorEnabled` boolean, required
    - `lastSignInAt` string, nullable, required: ISO-8601 timestamp
  - `projects` object[], required
    - `id` string, uuid, required
    - `name` string, required
    - `slug` string, required
    - `kind` string, required
    - `status` string, required
    - `cpus` number, required
    - `memoryMb` integer, required
    - `domainCount` integer, required
    - `lastDeploymentState` string, nullable, required
    - `lastDeploymentAt` string, nullable, required: ISO-8601 timestamp
    - `createdAt` string, required: ISO-8601 timestamp
    - `siteClass` 'static' | 'builder' | 'builder_server' | 'app' | 'wordpress' | 'service' | 'database' | 'volume' | 'agent' | 'preview' | 'null', nullable: the current site class of the project (migration 203)
  - `databases` object[], required
    - `id` string, uuid, required
    - `name` string, required
    - `engine` string, required
    - `status` string, required
    - `cpus` number, required
    - `memoryMb` integer, required
    - `isPublic` boolean, required
    - `createdAt` string, required: ISO-8601 timestamp
  - `storageBuckets` object[], required
    - `id` string, uuid, required
    - `name` string, required
    - `engine` string, required
    - `status` string, required
    - `visibility` 'private' | 'public', required
    - `quotaBytes` number, required
    - `usedBytes` number, required
    - `objectCount` number, required
    - `createdAt` string, required: ISO-8601 timestamp
  - `email` object, required
    - `sendingStatus` 'not_requested' | 'requested' | 'enabled' | 'suspended' | 'null', nullable, required
    - `requestedAt` string, nullable, required: ISO-8601 timestamp
    - `enabledAt` string, nullable, required: ISO-8601 timestamp
    - `dailySendLimit` integer, nullable, required
  - `aiUsage` object, required
    - `last30dInputTokens` integer, required
    - `last30dOutputTokens` integer, required
    - `last30dTurns` integer, required
    - `last30dCostEstimateMicros` integer, required
    - `creditBalanceMillicredits` integer, required
  - `recentAudit` object[], required
    - `id` string, uuid, required
    - `action` string, required
    - `targetType` string, required
    - `targetId` string, required
    - `reason` string, required
    - `createdAt` string, required: ISO-8601 timestamp

## 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)
