---
title: "Dry run of \"apply to all Free organizations\": Free organizations with a project or database above their ceiling and exactly what applying would change, in batches"
method: GET
path: "/operator/free-resize-plan"
tags: ["Operator"]
---

# Dry run of "apply to all Free organizations": Free organizations with a project or database above their ceiling and exactly what applying would change, in batches

`GET /operator/free-resize-plan`

## Request

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

## Response `200`

Plan

- object
  - `ceiling` object, required: the Free plan's per-project/database ceiling (an organization's own override may differ)
    - `cpus` number, required
    - `memoryMb` integer, required
  - `organizations` object[], required: this batch, at most 50 resources to change
    - `organizationId` string, uuid, required
    - `organizationName` string, required
    - `ceiling` object, required
      - `cpus` number, required
      - `memoryMb` integer, required
    - `items` object[], required
      - `kind` 'project' | 'database', required
      - `id` string, uuid, required
      - `name` string, required
      - `detail` string, required
      - `status` string, required
      - `current` object, required
        - `cpus` number, required
        - `memoryMb` integer, required
      - `target` object, required: the current size, each value lowered to the ceiling
        - `cpus` number, required
        - `memoryMb` integer, required
      - `restart` boolean, required: true: it runs now and is restarted to apply the new limits (a short interruption)
      - `skipped` 'below_minimum' | 'not_provisioned' | 'uses_more' | 'not_measured' | 'null', nullable, required: below_minimum: a one-click app or WordPress site that needs more than the ceiling to run; not_provisioned: nothing on the server yet; uses_more ("right-size static sites" only): it used more than half the new size, restarted or ran out of memory in the measured days; not_measured (same): never measured, and not plain files served by nginx
      - `minimum` object, nullable, required: what a one-click app or WordPress site needs at least
        - `cpus` number, required
        - `memoryMb` integer, required
      - `measured` object, nullable: "right-size static sites" only: what the host collector measured (null: nothing ran in the window)
        - `windowDays` integer, required
        - `memoryMbMax` integer, nullable, required: peak memory of a running container, MB rounded up
        - `restarts` integer, required
        - `oomKills` integer, required: out-of-memory kills
  - `total` integer, required: Free organizations with something above their ceiling (suspended and unlimited ones excluded)
  - `truncated` boolean, required: true: more organizations remain after this batch; apply it, then review again

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