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
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.
bearerTokenAuthorizationBearer <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.
scopeId*stringOpaque ownership+authorization scope resolving to tenant + subscription + project.
snapshotId*stringIdentifier of the snapshot within the scope.
The snapshot detail read model.
application/json- response
Block-volume snapshot read model rendered by the Snapshots page and the snapshot detail page.
origin?stringWhere 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.
"portal""api""system""imported"id*stringSnapshot identifier (e.g. snap-pgdata-nightly).
name*stringSnapshot name (e.g. pgdata-nightly-0609).
status*stringLifecycle status of the snapshot.
"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*stringIdentifier of the source block volume.
sourceVolumeName*stringDisplay name of the source block volume at capture time.
sizeGb*integerStored 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*integerLogical size of the source volume at capture time (full provisioned size, GB).
incremental*booleanApp-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*booleanWhether the snapshot blocks are encrypted (inherited from the source volume).
kmsKeyId*|KMS key encrypting the snapshot; null when platform-managed / encryption off.
availabilityZone*stringAvailability zone of the snapshot (inherited from the source volume, e.g. ist-1a).
childCount*integerNumber 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*integerCapture progress percentage (0-100; 100 once AVAILABLE).
description*stringFree-text description (e.g. "Pre-migration checkpoint before schema change").
createdAt*stringCapture timestamp (ISO 8601).
date-timecurl -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"}