Storage pool API

Storage pool API

Inspect device capacity and replica repair and request controlled evacuation.

Storage pool endpoints operate organization storage infrastructure. Project volume permission does not grant the ability to initialize or remove host devices.

Inventory and policy

GET/organizations/{organization_id}/storage-pools
Scope
fleet:read
Auth
Bearer API key

Lists storage pools and their capacity, health, and device inventory.

Requires fleet:read and supports region and health filters. A pool read exposes physical bytes, usable bytes, reserved bytes, repair reserve, device IDs, and health conditions.

GET/organizations/{organization_id}/storage-pools/{pool_id}/policies
Scope
fleet:read
Auth
Bearer API key

Returns replica and failure-domain requirements. Policy limits belong to the pool; a volume references a published policy revision rather than copying free-form placement rules.

Create

POST/organizations/{organization_id}/storage-pools
Scope
fleet:write
Auth
Bearer API key

Creates a storage pool and initializes the acknowledged devices.

Send name, region_id, type (replicated or local), nonempty device_ids, and initialization_acknowledgement. The acknowledgement must match the preview issued for those exact devices and their observed identities.

The request returns 202 with pool ID and initialization operation. An occupied device returns 409 device_in_use. A stale preview returns 412 device_inventory_changed. No device is treated as disposable because it has no filesystem recognized by the current agent.

Repair view

GET/organizations/{organization_id}/storage-pools/{pool_id}/repairs
Scope
fleet:read
Auth
Bearer API key

Returns source and destination replica IDs, volume, generation, transferred bytes, and admission blockers. It requires fleet:read; operators see only the permitted storage scope.

A no_eligible_failure_domain blocker differs from low total bytes. Repair cannot violate a required zone boundary just because another device is free.

Evacuate

POST/organizations/{organization_id}/storage-pools/{pool_id}/evacuation-previews
Scope
fleet:write
Auth
Bearer API key

Previews device or node evacuation without starting copies.

Accepts device_ids or node_id, but not both. The result identifies volume and snapshot dependencies, required destinations, and estimated temporary capacity.

POST/organizations/{organization_id}/storage-pools/{pool_id}/evacuations
Scope
fleet:write
Auth
Bearer API key

Starts evacuation from a reviewed preview.

Send preview_id, an idempotency key, and the pool ETag. Accepted work returns 202 with a parent operation. Device admission becomes restricted before copying begins. Canceling prevents new copies but does not remove completed replacement replicas.

Remove and recover

DELETE/organizations/{organization_id}/storage-pools/{pool_id}/devices/{device_id}
Scope
fleet:write
Auth
Bearer API key

Removes an unused storage device from the pool.

Device removal requires no required live or retained block dependencies. Otherwise 409 device_in_use includes the remaining volume or snapshot IDs.

DELETE/organizations/{organization_id}/storage-pools/{pool_id}
Scope
fleet:write
Auth
Bearer API key

Deletes an unused storage pool.

Pool deletion also requires no live volumes and no unresolved repair ownership.

Forced source-generation selection uses the separate recovery permission and evidence workflow in replica repair. Ordinary pool write access does not authorize discarding divergent data. See storage performance for foreground and repair limits.

Preview device initialization

POST/organizations/{organization_id}/storage-pools/initialization-previews
Scope
fleet:write
Auth
Bearer API key

Previews device initialization and its destructive impact.

Send a nonempty device_ids array. Returns discovered device identities, existing membership, destructive impact, and the acknowledgement required by pool creation. The preview does not initialize devices. Changed inventory invalidates that acknowledgement.