Documentation

esc
    API reference · Storage / Snapshots

    Snapshots

    Point-in-time copies of root disks, volumes and database data disks, and automatic schedules.

    A snapshot copies an instance's root disk, a volume or a database's data disk at the moment it is taken; exactly one of instance_id, volume_id and database_id is set. Restore an instance's own snapshot with POST /instances/{instance_id}/restore, or turn any snapshot into a new volume with POST /snapshots/{snapshot_id}/restore. A schedule takes snapshots automatically and keeps the newest retention_count.

    The snapshot object

    Fields

    • idstringrequired

      e.g. snap_....

    • namestringrequired

      Its name, unique among its source's snapshots.

    • instance_idstring or null

      Set for a snapshot of an instance's root disk.

    • source_instance_namestring or null

      The source instance's name; null when it is gone or not an instance snapshot.

    • volume_idstring or null

      Set for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.

    • volume_namestring or null

      The source volume's name; null when it is gone or not a volume snapshot.

    • database_idstring or null

      Set for a snapshot of a managed database's data disk. Exactly one of instance_id, volume_id and database_id is set.

    • regionstring or null

      The source's region, e.g. af-abj.

    • triggerstringrequired

      automatic when taken by a snapshot schedule.

      One of manual, automatic.

    • size_bytesintegerrequired

      Storage used; 0 until complete.

    • desired_statestringrequired

      What you asked for: present, or deleted once you deleted it.

      One of present, deleted.

    • observed_statestringrequired

      What the platform last observed: pending and provisioning while it is being created, active once ready, deleting/deleted on the way out, failed if it could not be made, unknown when it could not be checked.

      One of pending, provisioning, active, deleting, deleted, failed, unknown.

    • completed_atstring or null

      When the snapshot finished; null until then.

    • created_atstring or null

      When it was created (RFC 3339, UTC).

    • updated_atstring or null

      When it last changed (RFC 3339, UTC).

    The snapshot schedule object

    Fields

    • instance_idstring or null

      The instance whose root disk is snapshotted; null for a volume's schedule.

    • volume_idstring or null

      The volume snapshotted; null for an instance's schedule.

    • frequencystringrequired

      daily, weekly or monthly.

      One of daily, weekly, monthly.

    • retention_countintegerrequired

      Successful copies kept; older ones are deleted.

      From 1 to 168.

    • enabledbooleanrequired

      False while paused.

    • next_run_atstring or null

      When the next automatic snapshot is due; null while paused.

    List an instance's snapshots

    Snapshots of this instance's root disk, oldest first.

    GET/public/v1/instances/{instance_id}/snapshots
    Read keyReturns200OK

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    Path parameters

    • instance_idstringrequired

      The resource's id.

    Query parameters

    • limitinteger

      Items per page, 1 to 100. Defaults to 50.

      From 1 to 100. Defaults to 50.

    • cursorstring

      The previous page's next_cursor, to get the next page. Leave out for the first page; keep the other parameters the same.

    • qstring

      Only items whose name contains this text (case-insensitive), at most 255 characters.

      At most 255 characters.

    • desired_statestring

      Only items with this desired_state: present or deleted.

      One of present, deleted.

    • observed_statestring

      Only items with this observed_state.

      One of pending, provisioning, active, deleting, deleted, failed, unknown.

    Response 200

    A page of snapshots.
    • dataarray of Snapshotrequired
      Show 15 child fields
      • idstringrequired

        e.g. snap_....

      • namestringrequired

        Its name, unique among its source's snapshots.

      • instance_idstring or null

        Set for a snapshot of an instance's root disk.

      • source_instance_namestring or null

        The source instance's name; null when it is gone or not an instance snapshot.

      • volume_idstring or null

        Set for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.

      • volume_namestring or null

        The source volume's name; null when it is gone or not a volume snapshot.

      • database_idstring or null

        Set for a snapshot of a managed database's data disk. Exactly one of instance_id, volume_id and database_id is set.

      • regionstring or null

        The source's region, e.g. af-abj.

      • triggerstringrequired

        automatic when taken by a snapshot schedule.

        One of manual, automatic.

      • size_bytesintegerrequired

        Storage used; 0 until complete.

      • desired_statestringrequired

        What you asked for: present, or deleted once you deleted it.

        One of present, deleted.

      • observed_statestringrequired

        What the platform last observed: pending and provisioning while it is being created, active once ready, deleting/deleted on the way out, failed if it could not be made, unknown when it could not be checked.

        One of pending, provisioning, active, deleting, deleted, failed, unknown.

      • completed_atstring or null

        When the snapshot finished; null until then.

      • created_atstring or null

        When it was created (RFC 3339, UTC).

      • updated_atstring or null

        When it last changed (RFC 3339, UTC).

    • next_cursorstring or nullrequired

      Pass as cursor for the next page; null on the last page.

    Errors

    • 400INVALID_PAGE: limit is not a whole number from 1 to 100. Send a value in that range, or leave it out for 50. INVALID_CURSOR: cursor does not belong to this list with these filters. Start again without a cursor. INVALID_FILTER: q is longer than 255 characters, or desired_state or observed_state is not one of its listed values. Fix the parameter named in detail.
    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no instance with this id in your organization, or the id is not a instance id (vm_…). Check the id.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.

    Every code is explained in Errors.

    Authorization
    Path
    Query
    curl "https://api.pantechdynamics.com/public/v1/instances/vm_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshots" \
      -H "Authorization: Bearer $PANTECH_API_KEY"
    Response 200
    {
      "data": [
        {
          "id": "snap_06gk3x9tq7m2v8r4y1c5d0zp8w",
          "name": "pre-upgrade",
          "instance_id": null,
          "source_instance_name": null,
          "volume_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
          "volume_name": "data",
          "database_id": null,
          "region": "af-abj",
          "trigger": "manual",
          "size_bytes": 1610612736,
          "desired_state": "present",
          "observed_state": "active",
          "completed_at": "2026-10-03T09:30:00Z",
          "created_at": "2026-10-03T09:30:00Z",
          "updated_at": "2026-10-03T09:30:00Z"
        }
      ],
      "next_cursor": "eyJhdCI6IjIwMjYtMTAtMDNUMDk6MzA6MDBaIiwiaWQiOiJ2bV8wNmdrIn0"
    }

    Snapshot an instance

    Takes a snapshot of the instance's root disk, named name (unique among this instance's snapshots). A snapshot of a running instance is crash-consistent: what the disk held at that instant. Billed on its physical size, hourly, until deleted.

    Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason. The new snapshot's id is the operation's resource_id.

    Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.

    POST/public/v1/instances/{instance_id}/snapshots
    Write keyNeeds Idempotency-KeyReturns202Accepted

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    • Idempotency-Keystringrequired

      A new value, such as a UUID, for each change. Resend with the same value to retry safely.

      At most 255 characters.

    Path parameters

    • instance_idstringrequired

      The resource's id.

    Body

    application/json
    • namestringrequired

      1 to 255 characters, unique among this resource's snapshots, e.g. pre-upgrade.

      At most 255 characters.

    Response 202

    Accepted. Follow operation_id until it finishes.
    • operation_idstringrequired

      The operation carrying out the change. Poll GET /public/v1/operations/{operation_id} (also the Location header) until status is succeeded or failed.

    • resource_idstringrequired

      The resource being created or changed, e.g. the new snapshot's id for a snapshot create.

    • statusstringrequired

      The operation's status when the request was accepted, usually submitting. Follow operation_id for the outcome.

    Errors

    • 400IDEMPOTENCY_KEY_REQUIRED: the Idempotency-Key header is missing. Send a new unique value, such as a UUID, with every write. INVALID_IDEMPOTENCY_KEY: the Idempotency-Key header is longer than 255 characters. Use a shorter value. INVALID_REQUEST_BODY: the body is not a single valid JSON object. Send one JSON object with the fields documented for this endpoint.
    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no instance with this id in your organization, or the id is not a instance id (vm_…). Check the id.
    • 409SNAPSHOT_NAME_TAKEN: this instance already has a snapshot with that name. Choose a different name. ACCOUNT_SUSPENDED: an invoice is overdue, or the organization was suspended for non-payment. Pay the outstanding invoice in the console, then retry. INVALID_RESOURCE_STATE: the instance cannot do this in its current state, for example while it is being created or deleted. Wait for its current operation to finish, then retry. CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first.
    • 413REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request.
    • 422VALIDATION_FAILED: a field is invalid. Each entry of errors names the field and its code: name REQUIRED or NAME_TOO_LONG: send a name of 1 to 255 characters. UNKNOWN_FIELD: the body has a field this endpoint does not take (named in field). Remove it or fix its spelling.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry. PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the same Idempotency-Key.

    Every code is explained in Errors.

    Authorization
    Path
    Body
    Idempotency
    curl -X POST "https://api.pantechdynamics.com/public/v1/instances/vm_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshots" \
      -H "Authorization: Bearer $PANTECH_API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "pre-upgrade"
      }'
    Response 202
    {
      "operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "resource_id": "snap_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "status": "submitting"
    }

    Get an instance's snapshot schedule

    The instance's automatic snapshot schedule: how often a snapshot of its root disk is taken, how many are kept, and when the next one runs.

    GET/public/v1/instances/{instance_id}/snapshot-schedule
    Read keyReturns200OK

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    Path parameters

    • instance_idstringrequired

      The resource's id.

    Response 200

    The schedule.
    • instance_idstring or null

      The instance whose root disk is snapshotted; null for a volume's schedule.

    • volume_idstring or null

      The volume snapshotted; null for an instance's schedule.

    • frequencystringrequired

      daily, weekly or monthly.

      One of daily, weekly, monthly.

    • retention_countintegerrequired

      Successful copies kept; older ones are deleted.

      From 1 to 168.

    • enabledbooleanrequired

      False while paused.

    • next_run_atstring or null

      When the next automatic snapshot is due; null while paused.

    Errors

    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no instance with this id in your organization, or the id is not a instance id (vm_…). Check the id. SNAPSHOT_SCHEDULE_NOT_FOUND: no schedule has been set for this resource. Set one with the PUT on this path.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.

    Every code is explained in Errors.

    Authorization
    Path
    curl "https://api.pantechdynamics.com/public/v1/instances/vm_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshot-schedule" \
      -H "Authorization: Bearer $PANTECH_API_KEY"
    Response 200
    {
      "instance_id": "vm_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "volume_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "frequency": "daily",
      "retention_count": 7,
      "enabled": true,
      "next_run_at": "2026-10-03T09:30:00Z"
    }

    Set an instance's snapshot schedule

    Turns automatic snapshots of the root disk on, changes them, or pauses them with enabled: false. frequency is daily, weekly or monthly; retention_count (1 to 168, default 7) successful snapshots are kept and older automatic ones are deleted. Automatic snapshots are billed like manual ones.

    Returns the schedule at once (200); no operation to follow. Send an Idempotency-Key: a retry with the same key and settings returns the same schedule.

    Scope: write. Lowering retention_count deletes the oldest copies, so an AI app's key also needs delete for that (403 INSUFFICIENT_SCOPE otherwise).

    PUT/public/v1/instances/{instance_id}/snapshot-schedule
    Write keyNeeds Idempotency-KeyReturns200OK

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    • Idempotency-Keystringrequired

      A new value, such as a UUID, for each change. Resend with the same value to retry safely.

      At most 255 characters.

    Path parameters

    • instance_idstringrequired

      The resource's id.

    Body

    application/json
    • frequencystringrequired

      How often: daily, weekly or monthly.

      One of daily, weekly, monthly.

    • retention_countinteger

      How many successful automatic snapshots to keep, 1 to 168; older ones are deleted. Defaults to 7.

      From 1 to 168. Defaults to 7.

    • enabledboolean

      False pauses the schedule without forgetting it. Defaults to true.

      Defaults to true.

    Response 200

    The schedule.
    • instance_idstring or null

      The instance whose root disk is snapshotted; null for a volume's schedule.

    • volume_idstring or null

      The volume snapshotted; null for an instance's schedule.

    • frequencystringrequired

      daily, weekly or monthly.

      One of daily, weekly, monthly.

    • retention_countintegerrequired

      Successful copies kept; older ones are deleted.

      From 1 to 168.

    • enabledbooleanrequired

      False while paused.

    • next_run_atstring or null

      When the next automatic snapshot is due; null while paused.

    Errors

    • 400IDEMPOTENCY_KEY_REQUIRED: the Idempotency-Key header is missing. Send a new unique value, such as a UUID, with every write. INVALID_IDEMPOTENCY_KEY: the Idempotency-Key header is longer than 255 characters. Use a shorter value. INVALID_REQUEST_BODY: the body is not a single valid JSON object. Send one JSON object with the fields documented for this endpoint.
    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no instance with this id in your organization, or the id is not a instance id (vm_…). Check the id.
    • 409IDEMPOTENCY_CONFLICT: this Idempotency-Key was already used with different settings. Use a new key for a different request.
    • 413REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request.
    • 422VALIDATION_FAILED: a field is invalid. Each entry of errors names the field and its code: frequency REQUIRED: send daily, weekly or monthly. UNKNOWN_FIELD: the body has a field this endpoint does not take (named in field). Remove it or fix its spelling. VALIDATION_FAILED with no errors entry: frequency is not daily, weekly or monthly, or retention_count is outside 1 to 168.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.

    Every code is explained in Errors.

    Authorization
    Path
    Body
    Idempotency
    curl -X PUT "https://api.pantechdynamics.com/public/v1/instances/vm_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshot-schedule" \
      -H "Authorization: Bearer $PANTECH_API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{
        "frequency": "daily",
        "retention_count": 7
      }'
    Response 200
    {
      "instance_id": "vm_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "volume_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "frequency": "daily",
      "retention_count": 7,
      "enabled": true,
      "next_run_at": "2026-10-03T09:30:00Z"
    }

    List a volume's snapshots

    Snapshots of this volume, oldest first.

    GET/public/v1/volumes/{volume_id}/snapshots
    Read keyReturns200OK

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    Path parameters

    • volume_idstringrequired

      The resource's id.

    Query parameters

    • limitinteger

      Items per page, 1 to 100. Defaults to 50.

      From 1 to 100. Defaults to 50.

    • cursorstring

      The previous page's next_cursor, to get the next page. Leave out for the first page; keep the other parameters the same.

    • qstring

      Only items whose name contains this text (case-insensitive), at most 255 characters.

      At most 255 characters.

    • desired_statestring

      Only items with this desired_state: present or deleted.

      One of present, deleted.

    • observed_statestring

      Only items with this observed_state.

      One of pending, provisioning, active, deleting, deleted, failed, unknown.

    Response 200

    A page of snapshots.
    • dataarray of Snapshotrequired
      Show 15 child fields
      • idstringrequired

        e.g. snap_....

      • namestringrequired

        Its name, unique among its source's snapshots.

      • instance_idstring or null

        Set for a snapshot of an instance's root disk.

      • source_instance_namestring or null

        The source instance's name; null when it is gone or not an instance snapshot.

      • volume_idstring or null

        Set for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.

      • volume_namestring or null

        The source volume's name; null when it is gone or not a volume snapshot.

      • database_idstring or null

        Set for a snapshot of a managed database's data disk. Exactly one of instance_id, volume_id and database_id is set.

      • regionstring or null

        The source's region, e.g. af-abj.

      • triggerstringrequired

        automatic when taken by a snapshot schedule.

        One of manual, automatic.

      • size_bytesintegerrequired

        Storage used; 0 until complete.

      • desired_statestringrequired

        What you asked for: present, or deleted once you deleted it.

        One of present, deleted.

      • observed_statestringrequired

        What the platform last observed: pending and provisioning while it is being created, active once ready, deleting/deleted on the way out, failed if it could not be made, unknown when it could not be checked.

        One of pending, provisioning, active, deleting, deleted, failed, unknown.

      • completed_atstring or null

        When the snapshot finished; null until then.

      • created_atstring or null

        When it was created (RFC 3339, UTC).

      • updated_atstring or null

        When it last changed (RFC 3339, UTC).

    • next_cursorstring or nullrequired

      Pass as cursor for the next page; null on the last page.

    Errors

    • 400INVALID_PAGE: limit is not a whole number from 1 to 100. Send a value in that range, or leave it out for 50. INVALID_CURSOR: cursor does not belong to this list with these filters. Start again without a cursor. INVALID_FILTER: q is longer than 255 characters, or desired_state or observed_state is not one of its listed values. Fix the parameter named in detail.
    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no volume with this id in your organization, or the id is not a volume id (vol_…). Check the id.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.

    Every code is explained in Errors.

    Authorization
    Path
    Query
    curl "https://api.pantechdynamics.com/public/v1/volumes/vol_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshots" \
      -H "Authorization: Bearer $PANTECH_API_KEY"
    Response 200
    {
      "data": [
        {
          "id": "snap_06gk3x9tq7m2v8r4y1c5d0zp8w",
          "name": "pre-upgrade",
          "instance_id": null,
          "source_instance_name": null,
          "volume_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
          "volume_name": "data",
          "database_id": null,
          "region": "af-abj",
          "trigger": "manual",
          "size_bytes": 1610612736,
          "desired_state": "present",
          "observed_state": "active",
          "completed_at": "2026-10-03T09:30:00Z",
          "created_at": "2026-10-03T09:30:00Z",
          "updated_at": "2026-10-03T09:30:00Z"
        }
      ],
      "next_cursor": "eyJhdCI6IjIwMjYtMTAtMDNUMDk6MzA6MDBaIiwiaWQiOiJ2bV8wNmdrIn0"
    }

    Snapshot a volume

    Takes a snapshot of the volume, named name. A snapshot of an attached volume is crash-consistent. Billed on its physical size, hourly, until deleted.

    Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason. The new snapshot's id is the operation's resource_id.

    Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.

    POST/public/v1/volumes/{volume_id}/snapshots
    Write keyNeeds Idempotency-KeyReturns202Accepted

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    • Idempotency-Keystringrequired

      A new value, such as a UUID, for each change. Resend with the same value to retry safely.

      At most 255 characters.

    Path parameters

    • volume_idstringrequired

      The resource's id.

    Body

    application/json
    • namestringrequired

      1 to 255 characters, unique among this resource's snapshots, e.g. pre-upgrade.

      At most 255 characters.

    Response 202

    Accepted. Follow operation_id until it finishes.
    • operation_idstringrequired

      The operation carrying out the change. Poll GET /public/v1/operations/{operation_id} (also the Location header) until status is succeeded or failed.

    • resource_idstringrequired

      The resource being created or changed, e.g. the new snapshot's id for a snapshot create.

    • statusstringrequired

      The operation's status when the request was accepted, usually submitting. Follow operation_id for the outcome.

    Errors

    • 400IDEMPOTENCY_KEY_REQUIRED: the Idempotency-Key header is missing. Send a new unique value, such as a UUID, with every write. INVALID_IDEMPOTENCY_KEY: the Idempotency-Key header is longer than 255 characters. Use a shorter value. INVALID_REQUEST_BODY: the body is not a single valid JSON object. Send one JSON object with the fields documented for this endpoint.
    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no volume with this id in your organization, or the id is not a volume id (vol_…). Check the id.
    • 409SNAPSHOT_NAME_TAKEN: this volume already has a snapshot with that name. Choose a different name. ACCOUNT_SUSPENDED: an invoice is overdue, or the organization was suspended for non-payment. Pay the outstanding invoice in the console, then retry. INVALID_RESOURCE_STATE: the volume cannot do this in its current state, for example while it is being created or deleted. Wait for its current operation to finish, then retry. CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first.
    • 413REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request.
    • 422VALIDATION_FAILED: a field is invalid. Each entry of errors names the field and its code: name REQUIRED or NAME_TOO_LONG: send a name of 1 to 255 characters. UNKNOWN_FIELD: the body has a field this endpoint does not take (named in field). Remove it or fix its spelling.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry. PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the same Idempotency-Key.

    Every code is explained in Errors.

    Authorization
    Path
    Body
    Idempotency
    curl -X POST "https://api.pantechdynamics.com/public/v1/volumes/vol_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshots" \
      -H "Authorization: Bearer $PANTECH_API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "pre-upgrade"
      }'
    Response 202
    {
      "operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "resource_id": "snap_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "status": "submitting"
    }

    Get a volume's snapshot schedule

    The volume's automatic snapshot schedule: how often a snapshot of its volume is taken, how many are kept, and when the next one runs.

    GET/public/v1/volumes/{volume_id}/snapshot-schedule
    Read keyReturns200OK

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    Path parameters

    • volume_idstringrequired

      The resource's id.

    Response 200

    The schedule.
    • instance_idstring or null

      The instance whose root disk is snapshotted; null for a volume's schedule.

    • volume_idstring or null

      The volume snapshotted; null for an instance's schedule.

    • frequencystringrequired

      daily, weekly or monthly.

      One of daily, weekly, monthly.

    • retention_countintegerrequired

      Successful copies kept; older ones are deleted.

      From 1 to 168.

    • enabledbooleanrequired

      False while paused.

    • next_run_atstring or null

      When the next automatic snapshot is due; null while paused.

    Errors

    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no volume with this id in your organization, or the id is not a volume id (vol_…). Check the id. SNAPSHOT_SCHEDULE_NOT_FOUND: no schedule has been set for this resource. Set one with the PUT on this path.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.

    Every code is explained in Errors.

    Authorization
    Path
    curl "https://api.pantechdynamics.com/public/v1/volumes/vol_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshot-schedule" \
      -H "Authorization: Bearer $PANTECH_API_KEY"
    Response 200
    {
      "instance_id": "vm_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "volume_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "frequency": "daily",
      "retention_count": 7,
      "enabled": true,
      "next_run_at": "2026-10-03T09:30:00Z"
    }

    Set a volume's snapshot schedule

    Turns automatic snapshots of the volume on, changes them, or pauses them with enabled: false. frequency is daily, weekly or monthly; retention_count (1 to 168, default 7) successful snapshots are kept and older automatic ones are deleted. Automatic snapshots are billed like manual ones.

    Returns the schedule at once (200); no operation to follow. Send an Idempotency-Key: a retry with the same key and settings returns the same schedule.

    Scope: write. Lowering retention_count deletes the oldest copies, so an AI app's key also needs delete for that (403 INSUFFICIENT_SCOPE otherwise).

    PUT/public/v1/volumes/{volume_id}/snapshot-schedule
    Write keyNeeds Idempotency-KeyReturns200OK

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    • Idempotency-Keystringrequired

      A new value, such as a UUID, for each change. Resend with the same value to retry safely.

      At most 255 characters.

    Path parameters

    • volume_idstringrequired

      The resource's id.

    Body

    application/json
    • frequencystringrequired

      How often: daily, weekly or monthly.

      One of daily, weekly, monthly.

    • retention_countinteger

      How many successful automatic snapshots to keep, 1 to 168; older ones are deleted. Defaults to 7.

      From 1 to 168. Defaults to 7.

    • enabledboolean

      False pauses the schedule without forgetting it. Defaults to true.

      Defaults to true.

    Response 200

    The schedule.
    • instance_idstring or null

      The instance whose root disk is snapshotted; null for a volume's schedule.

    • volume_idstring or null

      The volume snapshotted; null for an instance's schedule.

    • frequencystringrequired

      daily, weekly or monthly.

      One of daily, weekly, monthly.

    • retention_countintegerrequired

      Successful copies kept; older ones are deleted.

      From 1 to 168.

    • enabledbooleanrequired

      False while paused.

    • next_run_atstring or null

      When the next automatic snapshot is due; null while paused.

    Errors

    • 400IDEMPOTENCY_KEY_REQUIRED: the Idempotency-Key header is missing. Send a new unique value, such as a UUID, with every write. INVALID_IDEMPOTENCY_KEY: the Idempotency-Key header is longer than 255 characters. Use a shorter value. INVALID_REQUEST_BODY: the body is not a single valid JSON object. Send one JSON object with the fields documented for this endpoint.
    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no volume with this id in your organization, or the id is not a volume id (vol_…). Check the id.
    • 409IDEMPOTENCY_CONFLICT: this Idempotency-Key was already used with different settings. Use a new key for a different request.
    • 413REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request.
    • 422VALIDATION_FAILED: a field is invalid. Each entry of errors names the field and its code: frequency REQUIRED: send daily, weekly or monthly. UNKNOWN_FIELD: the body has a field this endpoint does not take (named in field). Remove it or fix its spelling. VALIDATION_FAILED with no errors entry: frequency is not daily, weekly or monthly, or retention_count is outside 1 to 168.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.

    Every code is explained in Errors.

    Authorization
    Path
    Body
    Idempotency
    curl -X PUT "https://api.pantechdynamics.com/public/v1/volumes/vol_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshot-schedule" \
      -H "Authorization: Bearer $PANTECH_API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{
        "frequency": "daily",
        "retention_count": 7
      }'
    Response 200
    {
      "instance_id": "vm_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "volume_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "frequency": "daily",
      "retention_count": 7,
      "enabled": true,
      "next_run_at": "2026-10-03T09:30:00Z"
    }

    List snapshots

    Every snapshot in your organization: of instances' root disks, of volumes, and of databases' data disks. instance_id, volume_id or database_id says which.

    GET/public/v1/snapshots
    Read keyReturns200OK

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    Query parameters

    • limitinteger

      Items per page, 1 to 100. Defaults to 50.

      From 1 to 100. Defaults to 50.

    • cursorstring

      The previous page's next_cursor, to get the next page. Leave out for the first page; keep the other parameters the same.

    • qstring

      Only items whose name contains this text (case-insensitive), at most 255 characters.

      At most 255 characters.

    • desired_statestring

      Only items with this desired_state: present or deleted.

      One of present, deleted.

    • observed_statestring

      Only items with this observed_state.

      One of pending, provisioning, active, deleting, deleted, failed, unknown.

    Response 200

    A page of snapshots.
    • dataarray of Snapshotrequired
      Show 15 child fields
      • idstringrequired

        e.g. snap_....

      • namestringrequired

        Its name, unique among its source's snapshots.

      • instance_idstring or null

        Set for a snapshot of an instance's root disk.

      • source_instance_namestring or null

        The source instance's name; null when it is gone or not an instance snapshot.

      • volume_idstring or null

        Set for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.

      • volume_namestring or null

        The source volume's name; null when it is gone or not a volume snapshot.

      • database_idstring or null

        Set for a snapshot of a managed database's data disk. Exactly one of instance_id, volume_id and database_id is set.

      • regionstring or null

        The source's region, e.g. af-abj.

      • triggerstringrequired

        automatic when taken by a snapshot schedule.

        One of manual, automatic.

      • size_bytesintegerrequired

        Storage used; 0 until complete.

      • desired_statestringrequired

        What you asked for: present, or deleted once you deleted it.

        One of present, deleted.

      • observed_statestringrequired

        What the platform last observed: pending and provisioning while it is being created, active once ready, deleting/deleted on the way out, failed if it could not be made, unknown when it could not be checked.

        One of pending, provisioning, active, deleting, deleted, failed, unknown.

      • completed_atstring or null

        When the snapshot finished; null until then.

      • created_atstring or null

        When it was created (RFC 3339, UTC).

      • updated_atstring or null

        When it last changed (RFC 3339, UTC).

    • next_cursorstring or nullrequired

      Pass as cursor for the next page; null on the last page.

    Errors

    • 400INVALID_PAGE: limit is not a whole number from 1 to 100. Send a value in that range, or leave it out for 50. INVALID_CURSOR: cursor does not belong to this list with these filters. Start again without a cursor. INVALID_FILTER: q is longer than 255 characters, or desired_state or observed_state is not one of its listed values. Fix the parameter named in detail.
    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.

    Every code is explained in Errors.

    Authorization
    Query
    curl "https://api.pantechdynamics.com/public/v1/snapshots" \
      -H "Authorization: Bearer $PANTECH_API_KEY"
    Response 200
    {
      "data": [
        {
          "id": "snap_06gk3x9tq7m2v8r4y1c5d0zp8w",
          "name": "pre-upgrade",
          "instance_id": null,
          "source_instance_name": null,
          "volume_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
          "volume_name": "data",
          "database_id": null,
          "region": "af-abj",
          "trigger": "manual",
          "size_bytes": 1610612736,
          "desired_state": "present",
          "observed_state": "active",
          "completed_at": "2026-10-03T09:30:00Z",
          "created_at": "2026-10-03T09:30:00Z",
          "updated_at": "2026-10-03T09:30:00Z"
        }
      ],
      "next_cursor": "eyJhdCI6IjIwMjYtMTAtMDNUMDk6MzA6MDBaIiwiaWQiOiJ2bV8wNmdrIn0"
    }

    Price a snapshot

    What a snapshot of size_gb GB costs per month, in your organization's currency. A snapshot is billed on its physical size.

    GET/public/v1/snapshots/quote
    Read keyReturns200OK

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    Query parameters

    • size_gbintegerrequired

      At least 1.

    Response 200

    The price.
    • pricedbooleanrequired

      False when no price applies; unpriced_reason then says why.

    • unpriced_reasonstring or null

      Why no price applies; null when priced.

    • currencystring or null

      NGN or USD; null when not priced.

    • monthly_minorinteger or null

      Price for a full month in minor units; null when not priced.

    • nominal_month_hoursintegerrequired

      Hours in the month the price assumes: 730.

    Errors

    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404NOT_FOUND: cost quotes are not available on this platform yet.
    • 422VALIDATION_FAILED: a field is invalid. Each entry of errors names the field and its code: size_gb INVALID_SIZE: send a whole number of GB, at least 1.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.

    Every code is explained in Errors.

    Authorization
    Query
    curl "https://api.pantechdynamics.com/public/v1/snapshots/quote?size_gb=20" \
      -H "Authorization: Bearer $PANTECH_API_KEY"
    Response 200
    {
      "priced": true,
      "unpriced_reason": null,
      "currency": "NGN",
      "monthly_minor": 1700000,
      "nominal_month_hours": 730
    }

    Get a snapshot

    One snapshot.

    GET/public/v1/snapshots/{snapshot_id}
    Read keyReturns200OK

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    Path parameters

    • snapshot_idstringrequired

      The resource's id.

    Response 200

    The snapshot.
    • idstringrequired

      e.g. snap_....

    • namestringrequired

      Its name, unique among its source's snapshots.

    • instance_idstring or null

      Set for a snapshot of an instance's root disk.

    • source_instance_namestring or null

      The source instance's name; null when it is gone or not an instance snapshot.

    • volume_idstring or null

      Set for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.

    • volume_namestring or null

      The source volume's name; null when it is gone or not a volume snapshot.

    • database_idstring or null

      Set for a snapshot of a managed database's data disk. Exactly one of instance_id, volume_id and database_id is set.

    • regionstring or null

      The source's region, e.g. af-abj.

    • triggerstringrequired

      automatic when taken by a snapshot schedule.

      One of manual, automatic.

    • size_bytesintegerrequired

      Storage used; 0 until complete.

    • desired_statestringrequired

      What you asked for: present, or deleted once you deleted it.

      One of present, deleted.

    • observed_statestringrequired

      What the platform last observed: pending and provisioning while it is being created, active once ready, deleting/deleted on the way out, failed if it could not be made, unknown when it could not be checked.

      One of pending, provisioning, active, deleting, deleted, failed, unknown.

    • completed_atstring or null

      When the snapshot finished; null until then.

    • created_atstring or null

      When it was created (RFC 3339, UTC).

    • updated_atstring or null

      When it last changed (RFC 3339, UTC).

    Errors

    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no snapshot with this id in your organization, or the id is not a snapshot id (snap_…). Check the id.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.

    Every code is explained in Errors.

    Authorization
    Path
    curl "https://api.pantechdynamics.com/public/v1/snapshots/snap_06gk3x9tq7m2v8r4y1c5d0zp8w" \
      -H "Authorization: Bearer $PANTECH_API_KEY"
    Response 200
    {
      "id": "snap_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "name": "pre-upgrade",
      "instance_id": null,
      "source_instance_name": null,
      "volume_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "volume_name": "data",
      "database_id": null,
      "region": "af-abj",
      "trigger": "manual",
      "size_bytes": 1610612736,
      "desired_state": "present",
      "observed_state": "active",
      "completed_at": "2026-10-03T09:30:00Z",
      "created_at": "2026-10-03T09:30:00Z",
      "updated_at": "2026-10-03T09:30:00Z"
    }

    Delete a snapshot

    Deletes a snapshot of an instance, volume or database. It is billed until the deletion completes.

    Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason.

    Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.

    Scope: write. Destructive: an AI app's key also needs delete.

    DELETE/public/v1/snapshots/{snapshot_id}
    Write keyNeeds Idempotency-KeyReturns202Accepted

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    • Idempotency-Keystringrequired

      A new value, such as a UUID, for each change. Resend with the same value to retry safely.

      At most 255 characters.

    Path parameters

    • snapshot_idstringrequired

      The resource's id.

    Response 202

    Accepted. Follow operation_id until it finishes.
    • operation_idstringrequired

      The operation carrying out the change. Poll GET /public/v1/operations/{operation_id} (also the Location header) until status is succeeded or failed.

    • resource_idstringrequired

      The resource being created or changed, e.g. the new snapshot's id for a snapshot create.

    • statusstringrequired

      The operation's status when the request was accepted, usually submitting. Follow operation_id for the outcome.

    Errors

    • 400IDEMPOTENCY_KEY_REQUIRED: the Idempotency-Key header is missing. Send a new unique value, such as a UUID, with every write. INVALID_IDEMPOTENCY_KEY: the Idempotency-Key header is longer than 255 characters. Use a shorter value.
    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no snapshot with this id in your organization, or the id is not a snapshot id (snap_…). Check the id.
    • 409INVALID_RESOURCE_STATE: the snapshot cannot do this in its current state, for example while it is being created or deleted. Wait for its current operation to finish, then retry. CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first.
    • 422VALIDATION_FAILED with no errors entry: the platform refused the request, for example because the resource has already been deleted. Read the resource to check its state.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry. PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the same Idempotency-Key.

    Every code is explained in Errors.

    Authorization
    Path
    Idempotency
    curl -X DELETE "https://api.pantechdynamics.com/public/v1/snapshots/snap_06gk3x9tq7m2v8r4y1c5d0zp8w" \
      -H "Authorization: Bearer $PANTECH_API_KEY" \
      -H "Idempotency-Key: $(uuidgen)"
    Response 202
    {
      "operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "resource_id": "snap_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "status": "submitting"
    }

    Restore a snapshot to a new volume

    Creates a new volume from an instance or volume snapshot, of disk_offering_slug and at least the snapshot's size. A database snapshot cannot be restored yet. To roll an instance's root disk back to its snapshot instead, use Restore an instance from a snapshot.

    Returns 202 Accepted with an operation_id (also in the Location header). The change happens in the background: poll GET /public/v1/operations/{operation_id}, or stream /events, until status is succeeded or failed; a failed operation carries a stable failure.code and a readable failure.reason. The new volume's id is the operation's resource_id.

    Send an Idempotency-Key. A retry with the same key returns the original operation instead of making the change twice.

    POST/public/v1/snapshots/{snapshot_id}/restore
    Write keyNeeds Idempotency-KeyReturns202Accepted

    Headers

    • Authorizationstringrequired

      Bearer and your API key: Bearer PAN_….

    • Idempotency-Keystringrequired

      A new value, such as a UUID, for each change. Resend with the same value to retry safely.

      At most 255 characters.

    Path parameters

    • snapshot_idstringrequired

      The resource's id.

    Body

    application/json
    • namestringrequired

      Name of the new volume, 1 to 255 characters.

    • disk_offering_slugstringrequired

      The new volume's type, from GET /public/v1/disk-offerings.

    • size_gbinteger

      For a custom-size offering: at least the snapshot's size in GB.

    Response 202

    Accepted. Follow operation_id until it finishes.
    • operation_idstringrequired

      The operation carrying out the change. Poll GET /public/v1/operations/{operation_id} (also the Location header) until status is succeeded or failed.

    • resource_idstringrequired

      The resource being created or changed, e.g. the new snapshot's id for a snapshot create.

    • statusstringrequired

      The operation's status when the request was accepted, usually submitting. Follow operation_id for the outcome.

    Errors

    • 400IDEMPOTENCY_KEY_REQUIRED: the Idempotency-Key header is missing. Send a new unique value, such as a UUID, with every write. INVALID_IDEMPOTENCY_KEY: the Idempotency-Key header is longer than 255 characters. Use a shorter value. INVALID_REQUEST_BODY: the body is not a single valid JSON object. Send one JSON object with the fields documented for this endpoint.
    • 401UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. Send Authorization: Bearer PAN_… with a valid key; create one in the console under Organization › API keys.
    • 403INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (read for GET, write for changes; an AI app's key also needs delete for a destructive call). Use a key with that scope, or reconnect the AI app with "Manage and delete" access. FORBIDDEN: the member who created the key may not do this in the organization. Use a key created by an owner or admin. AI_APPS_DISABLED: the organization has turned AI app access off, and this request was made with an AI app's key or sent by Pantech's MCP server (Pantech-Client: mcp/…). An owner can turn it on in the console under Organization › AI apps.
    • 404RESOURCE_NOT_FOUND: no snapshot with this id in your organization, or the id is not a snapshot id (snap_…). Check the id.
    • 409ACCOUNT_SUSPENDED: an invoice is overdue, or the organization was suspended for non-payment. Pay the outstanding invoice in the console, then retry. INVALID_RESOURCE_STATE: the snapshot cannot do this in its current state, for example while it is being created or deleted. Wait for its current operation to finish, then retry. CONCURRENT_UPDATE: the resource changed while this request was being processed. Retry the request; if it repeats, read the resource first.
    • 413REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request.
    • 422VALIDATION_FAILED: a field is invalid. Each entry of errors names the field and its code: name or disk_offering_slug REQUIRED: send both. disk_offering_slug DISK_OFFERING_NOT_FOUND: no active disk offering has this slug. Pick one from GET /public/v1/disk-offerings. size_gb SIZE_REQUIRED: a custom-size offering needs size_gb, at least the snapshot's size. UNKNOWN_FIELD: the body has a field this endpoint does not take (named in field). Remove it or fix its spelling.
    • 429RATE_LIMITED: this API key, verified user or organization used its request budget for the current window, or this address exceeded an IP/failed-auth limit. Wait Retry-After seconds, then retry. For authenticated quota denials, RateLimit-Scope identifies the denying quota and RateLimit-Reset reports its remaining window in seconds.
    • 503SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry. PROVISIONING_UNAVAILABLE: the provisioning service is temporarily unavailable. Wait a few seconds, then retry with the same Idempotency-Key.

    Every code is explained in Errors.

    Authorization
    Path
    Body
    Idempotency
    curl -X POST "https://api.pantechdynamics.com/public/v1/snapshots/snap_06gk3x9tq7m2v8r4y1c5d0zp8w/restore" \
      -H "Authorization: Bearer $PANTECH_API_KEY" \
      -H "Idempotency-Key: $(uuidgen)" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "data-restored",
        "disk_offering_slug": "medium-20gb",
        "size_gb": 20
      }'
    Response 202
    {
      "operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "resource_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
      "status": "submitting"
    }

    Was this page helpful?

    Updated