> For clean Markdown of any page, append .md to the page URL. For a complete documentation index, see https://ibee.ai/docs/llms.txt (full text of every page: https://ibee.ai/docs/llms-full.txt). For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://ibee.ai/docs/_mcp/server.

# List Gpu VM snapshots in the workspace

GET https://api.ibee.ai/v1/compute/gpu-vm-snapshots

Lists snapshot sets of every Gpu VM in the workspace, as the portal's Snapshots page does. Requires scope: vm.read.

```
# Example request with curl (set IBEE_API_TOKEN to a platform API token and WORKSPACE_ID to the workspace first).
curl "https://api.ibee.ai/v1/compute/gpu-vm-snapshots?workspace_id=$WORKSPACE_ID" \
  -H "Authorization: Bearer $IBEE_API_TOKEN"
```


Reference: https://ibee.ai/docs/api-reference/gpu-vms/list-all-gpu-vm-snapshots

## Authentication

- `Authorization` header (bearer token, required) — IBEE platform API token. Production tokens start with `ibee_prod_key_`; development tokens start with `ibee_dev_key_`. Use a token only with its matching gateway environment.

## Servers

- `https://api.ibee.ai/v1` (Production, default)
- `https://api.ibee.co.in/v1` (Development)

## Request

### Query parameters

- `workspace_id` (string, required) — The positive numeric workspace ID to scope this request to. Zero, negative, and non-numeric values are rejected.
- `limit` (integer, optional, default: 100) — Maximum number of snapshot sets to return (1-500). Default 100.
- `offset` (integer, optional, default: 0) — Number of items to skip before the first returned item. Default 0.
- `search` (string, optional) — Return only snapshot sets whose fields contain this text.

## Response

### 200

Snapshot sets returned successfully.

- `snapshots` (list of SnapshotSet, required) — Snapshot sets on this page.
- `total` (integer, required, default: 0) — Total number of snapshot sets matching the request.

## Errors

### 401 Unauthorized Error

The API token is missing, malformed or unknown (`invalid_api_key`).

- `error` (string, optional, nullable) — Machine-readable code from the gateway's authorization step, for example `invalid_api_key`, `insufficient_scope`, `organization_restricted`, `organization_suspended`, `verification_required`, `product_not_enabled` or `billing_denied`. The response descriptions list the codes for each status.
- `required_scope` (string, optional, nullable) — The scope the token lacks, with `insufficient_scope`.
- `billing_reason` (string, optional, nullable) — Billing's reason with `billing_denied`, passed through unchanged: for example `insufficient_balance`, `credit_limit_exceeded`, `initial_topup_required`, `resource_limit_reached` or `resource_usage_unavailable`.
- `billing_sku_code` (string, optional, nullable) — The SKU the billing admission checked, when there was one.
- `billing_evaluated_at` (string, optional, nullable) — When Billing made the decision, as Billing returned it.
- `admission_context_id` (string, optional, nullable) — Billing admission context for this request, derived from the token, workspace, route and `X-Idempotency-Key`, so a retry with the same key gets the same id.
- `detail` (ErrorDetail, optional) — Error detail from the product service.

### 403 Forbidden Error

The token may not make this call. Gateway codes: `insufficient_scope` (with `required_scope`), `key_revoked`, `key_disabled`, `key_inactive`, `key_expired`, `unknown_route`, `workspace_not_allowed`, `principal_inactive`, `principal_not_member` and `principal_permission_denied`. `product_not_enabled` when the product is not enabled for the organization (IBEE turns some products on per organization; ask support for access). On writes, also `organization_restricted` (an admin restricted the organization) and `verification_required` (the token's user has not completed identity verification). A product service may also refuse with `detail`.

- `error` (string, optional, nullable) — Machine-readable code from the gateway's authorization step, for example `invalid_api_key`, `insufficient_scope`, `organization_restricted`, `organization_suspended`, `verification_required`, `product_not_enabled` or `billing_denied`. The response descriptions list the codes for each status.
- `required_scope` (string, optional, nullable) — The scope the token lacks, with `insufficient_scope`.
- `billing_reason` (string, optional, nullable) — Billing's reason with `billing_denied`, passed through unchanged: for example `insufficient_balance`, `credit_limit_exceeded`, `initial_topup_required`, `resource_limit_reached` or `resource_usage_unavailable`.
- `billing_sku_code` (string, optional, nullable) — The SKU the billing admission checked, when there was one.
- `billing_evaluated_at` (string, optional, nullable) — When Billing made the decision, as Billing returned it.
- `admission_context_id` (string, optional, nullable) — Billing admission context for this request, derived from the token, workspace, route and `X-Idempotency-Key`, so a retry with the same key gets the same id.
- `detail` (ErrorDetail, optional) — Error detail from the product service.

### 503 Service Unavailable Error

A service the request depends on did not answer. Gateway codes: `workspace_verification_unavailable`, `principal_verification_unavailable`, `principal_authorization_unavailable` and `product_check_unavailable` (whether the organization has the product could not be checked; retry later); on billable creates also `billing_admission_timeout`, `billing_admission_unavailable`, `billing_admission_disabled`, `billing_admission_not_configured` and the catalog codes `compute_catalog_unavailable`, `compute_catalog_not_configured`, `product_catalog_timeout`, `product_catalog_unavailable`, `product_catalog_not_configured` and `unsupported_product_quote`. Otherwise the product service's `detail`.

- `error` (string, optional, nullable) — Machine-readable code from the gateway's authorization step, for example `invalid_api_key`, `insufficient_scope`, `organization_restricted`, `organization_suspended`, `verification_required`, `product_not_enabled` or `billing_denied`. The response descriptions list the codes for each status.
- `required_scope` (string, optional, nullable) — The scope the token lacks, with `insufficient_scope`.
- `billing_reason` (string, optional, nullable) — Billing's reason with `billing_denied`, passed through unchanged: for example `insufficient_balance`, `credit_limit_exceeded`, `initial_topup_required`, `resource_limit_reached` or `resource_usage_unavailable`.
- `billing_sku_code` (string, optional, nullable) — The SKU the billing admission checked, when there was one.
- `billing_evaluated_at` (string, optional, nullable) — When Billing made the decision, as Billing returned it.
- `admission_context_id` (string, optional, nullable) — Billing admission context for this request, derived from the token, workspace, route and `X-Idempotency-Key`, so a retry with the same key gets the same id.
- `detail` (ErrorDetail, optional) — Error detail from the product service.

## Types

### SnapshotSet

A snapshot set: a point-in-time capture of a VM's root disk and, depending on `capture_scope`, its data volumes. It is a recovery point that the snapshot restore action accepts.

- `organization_id` (string, required) — ID of the organization that owns the VM.
- `workspace_id` (string, required) — ID of the workspace the VM belongs to.
- `snapshot_set_id` (string, required) — Unique ID of the snapshot set.
- `vm_id` (string, required) — ID of the VM the snapshot was taken from.
- `name` (string, required) — Display name of the snapshot set.
- `recovery_point_id` (string, required) — Recovery point ID of this snapshot set.
- `status` (enum, required) — Lifecycle status of a backup run, snapshot set or restore. - `queued`: accepted and waiting to start. - `running`: in progress. - `succeeded`: finished; the recovery point is usable. - `failed`: stopped with an error (see `error_message`). - `cancelled`: stopped before it completed.
  - Allowed values: `queued`, `running`, `succeeded`, `failed`, `cancelled`
- `created_at` (datetime, required) — When the snapshot set was created (ISO 8601).
- `updated_at` (datetime, required) — When the snapshot set was last updated (ISO 8601).
- `organization_name` (string, optional, nullable) — Display name of the owning organization, when the service has it.
- `workspace_name` (string, optional, nullable) — Display name of the workspace, when the service has it.
- `vm_name` (string, optional, nullable) — Display name of the VM at capture time.
- `vm_type` (enum, optional) — Kind of virtual machine. - `cloud`: general-purpose cloud VM. - `gpu`: VM with attached GPUs.
  - Allowed values: `cloud`, `gpu`
- `description` (string, optional, nullable) — Description given at creation.
- `recovery_point_type` (enum, optional, default: snapshot) — Always `snapshot` for a snapshot set.
  - Allowed values: `snapshot`
- `capture_scope` (enum, optional, default: all_attached) — Which volumes the recovery point contains. - `root_only`: the root disk only. - `all_attached`: the root disk and every attached data volume. - `selective`: the root disk and the data volumes that were selected.
  - Allowed values: `root_only`, `all_attached`, `selective`
- `captured_volume_count` (integer, optional, default: 1) — Number of volumes in the snapshot set.
- `root_only` (boolean, optional, default: true) — True when only the root disk was captured.
- `size_gb` (integer, optional, nullable) — Size of the captured data in GiB.
- `source_disk_size_gb` (integer, optional, nullable) — Provisioned size of the source root disk in GiB at capture time.
- `display_size_gb` (integer, optional, nullable) — Size in GiB as shown in the portal.
- `display_storage_bytes` (integer, optional, nullable) — `display_size_gb` expressed in bytes.
- `backend_protected_storage_bytes` (integer, optional, nullable) — Bytes of protected data as reported by the storage backend.
- `protected_storage_bytes` (integer, optional, nullable) — Bytes of source data protected by this snapshot set.
- `billing_storage_bytes` (integer, optional, nullable) — Bytes billed for storing this snapshot set.
- `billing_storage_source` (string, optional, default: unavailable) — How `billing_storage_bytes` was obtained. - `metered`: measured in the backup store. - `metered_from_manifest`: summed from the volume manifest. - `unavailable`: not measured yet.
- `metering_status` (string, optional, default: unavailable) — `metered` once storage has been measured for billing; `unavailable` until then.
- `storage_backend` (string, optional, nullable) — Identifier of the storage backend that holds the captured data.
- `captured_topology_hash` (string, optional, nullable) — Hash of the VM's volume layout at capture time; a different hash on the live VM means the layout drifted.
- `root_volume_id` (string, optional, nullable) — ID of the captured root disk.
- `root_volume_name` (string, optional, nullable) — Display name of the captured root disk.
- `volume_manifest` (list of RecoveryVolumeManifestItem, optional) — One entry per captured volume.
- `volume_manifest_summary` (RecoveryPointSummary, optional) — Short description of the volumes a recovery point contains.
- `live_drift_summary` (LiveDriftSummary, optional) — Difference between the volumes in a recovery point and the volumes attached to the VM now.
- `metadata` (map from string to any, optional) — Additional service-specific key-value data.

### ErrorDetail

Error detail from the product service.

- string
- map from string to any
- list of any

### RecoveryVolumeManifestItem

One volume captured in a recovery point (backup run or snapshot set): how it was attached at capture time, the stored artifact that holds its data, and where it was restored.

- `source_volume_id` (string, required) — ID of the volume that was captured.
- `source_volume_name` (string, optional, nullable) — Display name of the source volume.
- `resource_name` (string, optional, nullable) — Backend storage resource name of the source volume.
- `role` (enum, optional, default: data) — - `root`: the VM's root disk. - `data`: an attached data volume.
  - Allowed values: `root`, `data`
- `size_gb` (integer, optional, nullable) — Provisioned size of the volume in GiB.
- `display_size_gb` (integer, optional, nullable) — Size in GiB as shown in the portal.
- `device_bus` (string, optional, nullable) — Virtual disk bus the volume was attached on, for example `virtio`.
- `device_slot` (string, optional, nullable) — Guest device name of the attachment, for example `vda`.
- `boot_index` (integer, optional, nullable) — Position in the boot order; 0 for the boot disk, null for volumes not in the boot order.
- `attachment_mode` (string, optional, nullable) — Attachment mode at capture time, for example `boot` for the root disk or `single-writer` for a data volume.
- `guest_device` (string, optional, nullable) — Device name as seen inside the guest OS.
- `device_path` (string, optional, nullable) — Device path inside the guest, for example `/dev/vdb`.
- `filesystem_uuid` (string, optional, nullable) — Filesystem UUID detected on the volume, when known.
- `filesystem_type` (string, optional, nullable) — Filesystem type detected on the volume, for example `ext4`, when known.
- `mount_hint` (string, optional, nullable) — Mount point the volume is expected to use, for example `/` for the root disk.
- `mount_state_at_capture` (string, optional, nullable) — Mount state recorded at capture time, for example `mounted`, `instructions_pending` or `instructions_acknowledged`.
- `mount_instructions` (string, optional, nullable) — Human-readable instructions for mounting the volume after a restore.
- `delete_on_termination` (boolean, optional, nullable) — Whether the source volume was set to be deleted together with its VM.
- `source_attachment_present` (boolean, optional, default: true) — Whether the source volume was still attached to the VM when the manifest was last refreshed.
- `artifact_type` (string, optional, nullable) — Kind of stored artifact that holds this volume's data in the recovery point.
- `artifact_ref` (string, optional, nullable) — Reference to that artifact in the backup store.
- `artifact_chain_id` (string, optional, nullable) — Backup chain the artifact belongs to.
- `artifact_backup_type` (string, optional, nullable) — `full` or `incremental`, for the artifact.
- `artifact_bytes` (integer, optional, nullable) — Size of the stored artifact in bytes.
- `billing_storage_bytes` (integer, optional, nullable) — Bytes billed for storing this volume's artifact.
- `storage_usage` (map from string to any, optional, nullable) — Storage usage details reported by the backup store, as key-value data.
- `restored_volume_id` (string, optional, nullable) — ID of the volume created by the most recent restore of this entry, when one was performed.
- `restored_resource_name` (string, optional, nullable) — Backend storage resource name of the restored volume.
- `restored_device_path` (string, optional, nullable) — Device path of the restored volume inside the target VM.
- `restored_target_vm_id` (string, optional, nullable) — VM the restored volume was attached to.
- `metadata` (map from string to any, optional) — Additional service-specific key-value data.

### RecoveryPointSummary

Short description of the volumes a recovery point contains.

- `root_only` (boolean, optional, default: true) — True when only the root disk was captured.
- `root_volume_name` (string, optional, nullable) — Display name of the captured root disk.
- `data_volume_names` (list of string, optional) — Display names of the captured data volumes.
- `summary_text` (string, optional, default: Root) — Ready-to-display summary of the captured volumes; `Root` when only the root disk was captured.

### LiveDriftSummary

Difference between the volumes in a recovery point and the volumes attached to the VM now.

- `drifted` (boolean, optional, default: false) — True when the VM's current volumes differ from the recovery point.
- `missing_from_live` (list of string, optional) — Volumes in the recovery point that are no longer attached to the VM.
- `new_live_only` (list of string, optional) — Volumes attached to the VM now that are not in the recovery point.
- `message` (string, optional, nullable) — Human-readable description of the drift, when any.

## Examples

**Response**

```json
{
  "snapshots": [
    {
      "organization_id": "<organization_id>",
      "workspace_id": "<workspace_id>",
      "snapshot_set_id": "<snapshot_set_id>",
      "vm_id": "<vm_id>",
      "name": "<name>",
      "recovery_point_id": "<recovery_point_id>",
      "status": "queued",
      "created_at": "2026-10-25T12:00:00Z",
      "updated_at": "2026-10-25T12:00:00Z",
      "organization_name": "<organization_name>",
      "workspace_name": "<workspace_name>",
      "vm_name": "<vm_name>",
      "vm_type": "cloud",
      "description": "<description>",
      "recovery_point_type": "snapshot",
      "capture_scope": "root_only",
      "captured_volume_count": 1,
      "root_only": true,
      "size_gb": 1,
      "source_disk_size_gb": 1,
      "display_size_gb": 1,
      "display_storage_bytes": 1,
      "backend_protected_storage_bytes": 1,
      "protected_storage_bytes": 1,
      "billing_storage_bytes": 1,
      "billing_storage_source": "unavailable",
      "metering_status": "unavailable",
      "storage_backend": "<storage_backend>",
      "captured_topology_hash": "<captured_topology_hash>",
      "root_volume_id": "<root_volume_id>",
      "root_volume_name": "<root_volume_name>",
      "volume_manifest": [],
      "volume_manifest_summary": {
        "root_only": true,
        "root_volume_name": "<root_volume_name>",
        "data_volume_names": [],
        "summary_text": "Root"
      },
      "live_drift_summary": {
        "drifted": false,
        "missing_from_live": [],
        "new_live_only": [],
        "message": "<message>"
      },
      "metadata": {}
    }
  ],
  "total": 0
}
```

**SDK Code**

```python
import requests

url = "https://api.ibee.ai/v1/compute/gpu-vm-snapshots"

querystring = {"workspace_id":"710995"}

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.ibee.ai/v1/compute/gpu-vm-snapshots?workspace_id=710995';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.ibee.ai/v1/compute/gpu-vm-snapshots?workspace_id=710995"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.ibee.ai/v1/compute/gpu-vm-snapshots?workspace_id=710995")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.ibee.ai/v1/compute/gpu-vm-snapshots?workspace_id=710995")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.ibee.ai/v1/compute/gpu-vm-snapshots?workspace_id=710995', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.ibee.ai/v1/compute/gpu-vm-snapshots?workspace_id=710995");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.ibee.ai/v1/compute/gpu-vm-snapshots?workspace_id=710995")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```