Storage

Preview — pending review

This reference is generated from the platform API contract and is still under review. Operations, fields, and descriptions can change before publication.

Get one block-volume snapshot with all detail panels

GET
/scopes/{scopeId}/storage/snapshots/{snapshotId}

Retrieves the full read model behind the snapshot detail page for a single block-volume snapshot in the active scope: identity, status, the source volume reference (id + name), stored size vs. the source volume's provisioned size at capture time (the UI derives "space saved" from these), incremental flag, encryption + KMS key, availability zone, the count of snapshots/volumes chained off this one (childCount), capture progress, description and createdAt. This one response feeds the Overview, Restore, Activity and Tags tabs. Validation: scopeId must resolve to an accessible scope and snapshotId to a live (non-soft-deleted) snapshot within it — unknown or soft-deleted ids → 404 NOT_FOUND. RBAC: any scope role (owner|admin|contributor|reader|billing) may read. Async & state: Synchronous read; no state change. While the snapshot is CREATING the detail page subscribes to resource.updated SSE frames with kind "storage.snapshot" patching status and progress until a terminal AVAILABLE|ERROR state. Errors: 401 unauthenticated; 403 no role on the scope; 404 unknown scopeId or snapshotId; 500 unexpected backend failure. Idempotency/Concurrency: Safe, cacheable; no idempotency key required. The response carries an ETag usable as If-Match on a subsequent delete of this snapshot.

Authorization

bearerToken
headerAuthorizationBearer <token>

An API token (pc_live_…) or a service-account key (sak_live_…), created in Identity & Access Management and sent as Authorization: Bearer <token>. Requests are rate limited per credential and per tenant: every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and a refused request gets 429 RATE_LIMITED with Retry-After.

Path Parameters

scopeId*string

Opaque ownership+authorization scope resolving to tenant + subscription + project.

snapshotId*string

Identifier of the snapshot within the scope.

Response Body

The snapshot detail read model.

application/json
  1. response

Block-volume snapshot read model rendered by the Snapshots page and the snapshot detail page.

origin?string

Where the resource was made -- portal for a create on the console, api for an object made straight against the OpenStack API (CLI, Terraform, the Kubernetes cloud provider) that discovery adopted. Informational; nothing behaves differently. Absent from a backend that predates it, which means portal.

Value in"portal""api""system""imported"
id*string

Snapshot identifier (e.g. snap-pgdata-nightly).

name*string

Snapshot name (e.g. pgdata-nightly-0609).

status*string

Lifecycle status of the snapshot.

Value in"CREATING""AVAILABLE""ERROR"
statusReason*|

Human-readable, customer-facing reason the last lifecycle command on this resource failed (e.g. "The request could not be completed after repeated attempts. Try again, or contact support if it persists."); never raw provider text. Null while healthy, once a later settle clears it, or when the failure carried no detail. Mirrors Volume.statusReason.

sourceVolumeId*string

Identifier of the source block volume.

sourceVolumeName*string

Display name of the source block volume at capture time.

sizeGb*integer

Stored snapshot size in GB. Every volume snapshot is a FULL, independent Cinder COW snapshot, so this is the full stored size (equal to the source volume size), NOT a delta — a snapshot flagged incremental is not space-efficient at the storage layer.

volumeSizeGb*integer

Logical size of the source volume at capture time (full provisioned size, GB).

incremental*boolean

App-side LINEAGE marker only: true when this snapshot was created as a child in a snapshot chain (see parentSnapshotId), false for a chain root. It does NOT mean a space-efficient delta — Cinder volume snapshots do not chain natively, so EVERY snapshot (incremental or not) is a full, independent COW snapshot reporting the full source-volume size and is independently restorable/deletable with no dependency on other snapshots. (Real incremental chaining exists only for volume BACKUPS, not snapshots.)

encrypted*boolean

Whether the snapshot blocks are encrypted (inherited from the source volume).

kmsKeyId*|

KMS key encrypting the snapshot; null when platform-managed / encryption off.

availabilityZone*string

Availability zone of the snapshot (inherited from the source volume, e.g. ist-1a).

childCount*integer

Number of snapshots that chain directly off this one in the app-side lineage graph (see incremental). Lineage bookkeeping only — deleting this snapshot never orphans data, since each child is itself a full, independent COW snapshot of the volume.

parentSnapshotId*|

Id of the prior snapshot this one chains off in the app-side lineage graph; null for a chain root. Lineage metadata only — this snapshot is a full, independent COW snapshot regardless of any parent (see incremental).

progress*integer

Capture progress percentage (0-100; 100 once AVAILABLE).

description*string

Free-text description (e.g. "Pre-migration checkpoint before schema change").

createdAt*string

Capture timestamp (ISO 8601).

Formatdate-time
curl -X GET "https://example.com/scopes/string/storage/snapshots/string"
{  "origin": "portal",  "id": "string",  "name": "string",  "status": "CREATING",  "statusReason": "string",  "sourceVolumeId": "string",  "sourceVolumeName": "string",  "sizeGb": 0,  "volumeSizeGb": 0,  "incremental": true,  "encrypted": true,  "kmsKeyId": "string",  "availabilityZone": "string",  "childCount": 0,  "parentSnapshotId": "string",  "progress": 0,  "description": "string",  "createdAt": "2019-08-24T14:15:22Z"}