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
idstringrequirede.g.
snap_....namestringrequiredIts name, unique among its source's snapshots.
instance_idstring or nullSet for a snapshot of an instance's root disk.
source_instance_namestring or nullThe source instance's name; null when it is gone or not an instance snapshot.
volume_idstring or nullSet for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.
volume_namestring or nullThe source volume's name; null when it is gone or not a volume snapshot.
database_idstring or nullSet for a snapshot of a managed database's data disk. Exactly one of
instance_id,volume_idanddatabase_idis set.regionstring or nullThe source's region, e.g.
af-abj.triggerstringrequiredautomaticwhen taken by a snapshot schedule.One of
manual,automatic.size_bytesintegerrequiredStorage used; 0 until complete.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.completed_atstring or nullWhen the snapshot finished; null until then.
created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
The snapshot schedule object
Fields
instance_idstring or nullThe instance whose root disk is snapshotted; null for a volume's schedule.
volume_idstring or nullThe volume snapshotted; null for an instance's schedule.
frequencystringrequireddaily,weeklyormonthly.One of
daily,weekly,monthly.retention_countintegerrequiredSuccessful copies kept; older ones are deleted.
From 1 to 168.
enabledbooleanrequiredFalse while paused.
next_run_atstring or nullWhen the next automatic snapshot is due; null while paused.
List an instance's snapshots
Snapshots of this instance's root disk, oldest first.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
instance_idstringrequiredThe resource's id.
Query parameters
limitintegerItems per page, 1 to 100. Defaults to 50.
From 1 to 100. Defaults to
50.cursorstringThe previous page's
next_cursor, to get the next page. Leave out for the first page; keep the other parameters the same.qstringOnly items whose name contains this text (case-insensitive), at most 255 characters.
At most 255 characters.
desired_statestringOnly items with this
desired_state:presentordeleted.One of
present,deleted.observed_statestringOnly items with this
observed_state.One of
pending,provisioning,active,deleting,deleted,failed,unknown.
Response 200
A page of snapshots.dataarray of SnapshotrequiredShow 15 child fieldsHide child fields
idstringrequirede.g.
snap_....namestringrequiredIts name, unique among its source's snapshots.
instance_idstring or nullSet for a snapshot of an instance's root disk.
source_instance_namestring or nullThe source instance's name; null when it is gone or not an instance snapshot.
volume_idstring or nullSet for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.
volume_namestring or nullThe source volume's name; null when it is gone or not a volume snapshot.
database_idstring or nullSet for a snapshot of a managed database's data disk. Exactly one of
instance_id,volume_idanddatabase_idis set.regionstring or nullThe source's region, e.g.
af-abj.triggerstringrequiredautomaticwhen taken by a snapshot schedule.One of
manual,automatic.size_bytesintegerrequiredStorage used; 0 until complete.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.completed_atstring or nullWhen the snapshot finished; null until then.
created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
next_cursorstring or nullrequiredPass as
cursorfor the next page; null on the last page.
Errors
- 400
INVALID_PAGE:limitis not a whole number from 1 to 100. Send a value in that range, or leave it out for 50.INVALID_CURSOR:cursordoes not belong to this list with these filters. Start again without a cursor.INVALID_FILTER:qis longer than 255 characters, ordesired_stateorobserved_stateis not one of its listed values. Fix the parameter named indetail. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_NOT_FOUND: no instance with this id in your organization, or the id is not a instance id (vm_…). Check the id. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/instances/vm_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshots" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"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.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
instance_idstringrequiredThe resource's id.
Body
application/jsonnamestringrequired1 to 255 characters, unique among this resource's snapshots, e.g.
pre-upgrade.At most 255 characters.
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader 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. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_NOT_FOUND: no instance with this id in your organization, or the id is not a instance id (vm_…). Check the id. - 409
SNAPSHOT_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. - 413
REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:nameREQUIREDorNAME_TOO_LONG: send a name of 1 to 255 characters.UNKNOWN_FIELD: the body has a field this endpoint does not take (named infield). Remove it or fix its spelling. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_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 sameIdempotency-Key.
Every code is explained in Errors.
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"
}'{
"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.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
instance_idstringrequiredThe resource's id.
Response 200
The schedule.instance_idstring or nullThe instance whose root disk is snapshotted; null for a volume's schedule.
volume_idstring or nullThe volume snapshotted; null for an instance's schedule.
frequencystringrequireddaily,weeklyormonthly.One of
daily,weekly,monthly.retention_countintegerrequiredSuccessful copies kept; older ones are deleted.
From 1 to 168.
enabledbooleanrequiredFalse while paused.
next_run_atstring or nullWhen the next automatic snapshot is due; null while paused.
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_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 thePUTon this path. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/instances/vm_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshot-schedule" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"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).
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
instance_idstringrequiredThe resource's id.
Body
application/jsonfrequencystringrequiredHow often:
daily,weeklyormonthly.One of
daily,weekly,monthly.retention_countintegerHow many successful automatic snapshots to keep, 1 to 168; older ones are deleted. Defaults to 7.
From 1 to 168. Defaults to
7.enabledbooleanFalse pauses the schedule without forgetting it. Defaults to true.
Defaults to
true.
Response 200
The schedule.instance_idstring or nullThe instance whose root disk is snapshotted; null for a volume's schedule.
volume_idstring or nullThe volume snapshotted; null for an instance's schedule.
frequencystringrequireddaily,weeklyormonthly.One of
daily,weekly,monthly.retention_countintegerrequiredSuccessful copies kept; older ones are deleted.
From 1 to 168.
enabledbooleanrequiredFalse while paused.
next_run_atstring or nullWhen the next automatic snapshot is due; null while paused.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader 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. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_NOT_FOUND: no instance with this id in your organization, or the id is not a instance id (vm_…). Check the id. - 409
IDEMPOTENCY_CONFLICT: thisIdempotency-Keywas already used with different settings. Use a new key for a different request. - 413
REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:frequencyREQUIRED: senddaily,weeklyormonthly.UNKNOWN_FIELD: the body has a field this endpoint does not take (named infield). Remove it or fix its spelling.VALIDATION_FAILEDwith noerrorsentry:frequencyis notdaily,weeklyormonthly, orretention_countis outside 1 to 168. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
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
}'{
"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.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
volume_idstringrequiredThe resource's id.
Query parameters
limitintegerItems per page, 1 to 100. Defaults to 50.
From 1 to 100. Defaults to
50.cursorstringThe previous page's
next_cursor, to get the next page. Leave out for the first page; keep the other parameters the same.qstringOnly items whose name contains this text (case-insensitive), at most 255 characters.
At most 255 characters.
desired_statestringOnly items with this
desired_state:presentordeleted.One of
present,deleted.observed_statestringOnly items with this
observed_state.One of
pending,provisioning,active,deleting,deleted,failed,unknown.
Response 200
A page of snapshots.dataarray of SnapshotrequiredShow 15 child fieldsHide child fields
idstringrequirede.g.
snap_....namestringrequiredIts name, unique among its source's snapshots.
instance_idstring or nullSet for a snapshot of an instance's root disk.
source_instance_namestring or nullThe source instance's name; null when it is gone or not an instance snapshot.
volume_idstring or nullSet for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.
volume_namestring or nullThe source volume's name; null when it is gone or not a volume snapshot.
database_idstring or nullSet for a snapshot of a managed database's data disk. Exactly one of
instance_id,volume_idanddatabase_idis set.regionstring or nullThe source's region, e.g.
af-abj.triggerstringrequiredautomaticwhen taken by a snapshot schedule.One of
manual,automatic.size_bytesintegerrequiredStorage used; 0 until complete.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.completed_atstring or nullWhen the snapshot finished; null until then.
created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
next_cursorstring or nullrequiredPass as
cursorfor the next page; null on the last page.
Errors
- 400
INVALID_PAGE:limitis not a whole number from 1 to 100. Send a value in that range, or leave it out for 50.INVALID_CURSOR:cursordoes not belong to this list with these filters. Start again without a cursor.INVALID_FILTER:qis longer than 255 characters, ordesired_stateorobserved_stateis not one of its listed values. Fix the parameter named indetail. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_NOT_FOUND: no volume with this id in your organization, or the id is not a volume id (vol_…). Check the id. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/volumes/vol_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshots" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"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.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
volume_idstringrequiredThe resource's id.
Body
application/jsonnamestringrequired1 to 255 characters, unique among this resource's snapshots, e.g.
pre-upgrade.At most 255 characters.
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader 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. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_NOT_FOUND: no volume with this id in your organization, or the id is not a volume id (vol_…). Check the id. - 409
SNAPSHOT_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. - 413
REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:nameREQUIREDorNAME_TOO_LONG: send a name of 1 to 255 characters.UNKNOWN_FIELD: the body has a field this endpoint does not take (named infield). Remove it or fix its spelling. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_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 sameIdempotency-Key.
Every code is explained in Errors.
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"
}'{
"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.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
volume_idstringrequiredThe resource's id.
Response 200
The schedule.instance_idstring or nullThe instance whose root disk is snapshotted; null for a volume's schedule.
volume_idstring or nullThe volume snapshotted; null for an instance's schedule.
frequencystringrequireddaily,weeklyormonthly.One of
daily,weekly,monthly.retention_countintegerrequiredSuccessful copies kept; older ones are deleted.
From 1 to 168.
enabledbooleanrequiredFalse while paused.
next_run_atstring or nullWhen the next automatic snapshot is due; null while paused.
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_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 thePUTon this path. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/volumes/vol_06gk3x9tq7m2v8r4y1c5d0zp8w/snapshot-schedule" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"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).
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
volume_idstringrequiredThe resource's id.
Body
application/jsonfrequencystringrequiredHow often:
daily,weeklyormonthly.One of
daily,weekly,monthly.retention_countintegerHow many successful automatic snapshots to keep, 1 to 168; older ones are deleted. Defaults to 7.
From 1 to 168. Defaults to
7.enabledbooleanFalse pauses the schedule without forgetting it. Defaults to true.
Defaults to
true.
Response 200
The schedule.instance_idstring or nullThe instance whose root disk is snapshotted; null for a volume's schedule.
volume_idstring or nullThe volume snapshotted; null for an instance's schedule.
frequencystringrequireddaily,weeklyormonthly.One of
daily,weekly,monthly.retention_countintegerrequiredSuccessful copies kept; older ones are deleted.
From 1 to 168.
enabledbooleanrequiredFalse while paused.
next_run_atstring or nullWhen the next automatic snapshot is due; null while paused.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader 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. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_NOT_FOUND: no volume with this id in your organization, or the id is not a volume id (vol_…). Check the id. - 409
IDEMPOTENCY_CONFLICT: thisIdempotency-Keywas already used with different settings. Use a new key for a different request. - 413
REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:frequencyREQUIRED: senddaily,weeklyormonthly.UNKNOWN_FIELD: the body has a field this endpoint does not take (named infield). Remove it or fix its spelling.VALIDATION_FAILEDwith noerrorsentry:frequencyis notdaily,weeklyormonthly, orretention_countis outside 1 to 168. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
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
}'{
"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.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Query parameters
limitintegerItems per page, 1 to 100. Defaults to 50.
From 1 to 100. Defaults to
50.cursorstringThe previous page's
next_cursor, to get the next page. Leave out for the first page; keep the other parameters the same.qstringOnly items whose name contains this text (case-insensitive), at most 255 characters.
At most 255 characters.
desired_statestringOnly items with this
desired_state:presentordeleted.One of
present,deleted.observed_statestringOnly items with this
observed_state.One of
pending,provisioning,active,deleting,deleted,failed,unknown.
Response 200
A page of snapshots.dataarray of SnapshotrequiredShow 15 child fieldsHide child fields
idstringrequirede.g.
snap_....namestringrequiredIts name, unique among its source's snapshots.
instance_idstring or nullSet for a snapshot of an instance's root disk.
source_instance_namestring or nullThe source instance's name; null when it is gone or not an instance snapshot.
volume_idstring or nullSet for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.
volume_namestring or nullThe source volume's name; null when it is gone or not a volume snapshot.
database_idstring or nullSet for a snapshot of a managed database's data disk. Exactly one of
instance_id,volume_idanddatabase_idis set.regionstring or nullThe source's region, e.g.
af-abj.triggerstringrequiredautomaticwhen taken by a snapshot schedule.One of
manual,automatic.size_bytesintegerrequiredStorage used; 0 until complete.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.completed_atstring or nullWhen the snapshot finished; null until then.
created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
next_cursorstring or nullrequiredPass as
cursorfor the next page; null on the last page.
Errors
- 400
INVALID_PAGE:limitis not a whole number from 1 to 100. Send a value in that range, or leave it out for 50.INVALID_CURSOR:cursordoes not belong to this list with these filters. Start again without a cursor.INVALID_FILTER:qis longer than 255 characters, ordesired_stateorobserved_stateis not one of its listed values. Fix the parameter named indetail. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/snapshots" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"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.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Query parameters
size_gbintegerrequiredAt least 1.
Response 200
The price.pricedbooleanrequiredFalse when no price applies;
unpriced_reasonthen says why.unpriced_reasonstring or nullWhy no price applies; null when priced.
currencystring or nullNGNorUSD; null when not priced.monthly_minorinteger or nullPrice for a full month in minor units; null when not priced.
nominal_month_hoursintegerrequiredHours in the month the price assumes: 730.
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
NOT_FOUND: cost quotes are not available on this platform yet. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:size_gbINVALID_SIZE: send a whole number of GB, at least 1. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/snapshots/quote?size_gb=20" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"priced": true,
"unpriced_reason": null,
"currency": "NGN",
"monthly_minor": 1700000,
"nominal_month_hours": 730
}Get a snapshot
One snapshot.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….
Path parameters
snapshot_idstringrequiredThe resource's id.
Response 200
The snapshot.idstringrequirede.g.
snap_....namestringrequiredIts name, unique among its source's snapshots.
instance_idstring or nullSet for a snapshot of an instance's root disk.
source_instance_namestring or nullThe source instance's name; null when it is gone or not an instance snapshot.
volume_idstring or nullSet for a snapshot of a volume. Exactly one of instance_id, volume_id and database_id is set.
volume_namestring or nullThe source volume's name; null when it is gone or not a volume snapshot.
database_idstring or nullSet for a snapshot of a managed database's data disk. Exactly one of
instance_id,volume_idanddatabase_idis set.regionstring or nullThe source's region, e.g.
af-abj.triggerstringrequiredautomaticwhen taken by a snapshot schedule.One of
manual,automatic.size_bytesintegerrequiredStorage used; 0 until complete.
desired_statestringrequiredWhat you asked for:
present, ordeletedonce you deleted it.One of
present,deleted.observed_statestringrequiredWhat the platform last observed:
pendingandprovisioningwhile it is being created,activeonce ready,deleting/deletedon the way out,failedif it could not be made,unknownwhen it could not be checked.One of
pending,provisioning,active,deleting,deleted,failed,unknown.completed_atstring or nullWhen the snapshot finished; null until then.
created_atstring or nullWhen it was created (RFC 3339, UTC).
updated_atstring or nullWhen it last changed (RFC 3339, UTC).
Errors
- 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_NOT_FOUND: no snapshot with this id in your organization, or the id is not a snapshot id (snap_…). Check the id. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_UNAVAILABLE: request quota storage is unavailable. Wait a few seconds, then retry.
Every code is explained in Errors.
curl "https://api.pantechdynamics.com/public/v1/snapshots/snap_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY"{
"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.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
snapshot_idstringrequiredThe resource's id.
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader is longer than 255 characters. Use a shorter value. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_NOT_FOUND: no snapshot with this id in your organization, or the id is not a snapshot id (snap_…). Check the id. - 409
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. - 422
VALIDATION_FAILEDwith noerrorsentry: the platform refused the request, for example because the resource has already been deleted. Read the resource to check its state. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_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 sameIdempotency-Key.
Every code is explained in Errors.
curl -X DELETE "https://api.pantechdynamics.com/public/v1/snapshots/snap_06gk3x9tq7m2v8r4y1c5d0zp8w" \
-H "Authorization: Bearer $PANTECH_API_KEY" \
-H "Idempotency-Key: $(uuidgen)"{
"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.
Headers
AuthorizationstringrequiredBearerand your API key:Bearer PAN_….Idempotency-KeystringrequiredA new value, such as a UUID, for each change. Resend with the same value to retry safely.
At most 255 characters.
Path parameters
snapshot_idstringrequiredThe resource's id.
Body
application/jsonnamestringrequiredName of the new volume, 1 to 255 characters.
disk_offering_slugstringrequiredThe new volume's type, from
GET /public/v1/disk-offerings.size_gbintegerFor a custom-size offering: at least the snapshot's size in GB.
Response 202
Accepted. Followoperation_id until it finishes.operation_idstringrequiredThe operation carrying out the change. Poll
GET /public/v1/operations/{operation_id}(also theLocationheader) untilstatusissucceededorfailed.resource_idstringrequiredThe resource being created or changed, e.g. the new snapshot's id for a snapshot create.
statusstringrequiredThe operation's status when the request was accepted, usually
submitting. Followoperation_idfor the outcome.
Errors
- 400
IDEMPOTENCY_KEY_REQUIRED: theIdempotency-Keyheader is missing. Send a new unique value, such as a UUID, with every write.INVALID_IDEMPOTENCY_KEY: theIdempotency-Keyheader 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. - 401
UNAUTHENTICATED: the request has no API key, or the key is mistyped, revoked or expired, or its creator has left the organization. SendAuthorization: Bearer PAN_…with a valid key; create one in the console under Organization › API keys. - 403
INSUFFICIENT_SCOPE: the API key lacks the scope this endpoint needs (readfor GET,writefor changes; an AI app's key also needsdeletefor 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. - 404
RESOURCE_NOT_FOUND: no snapshot with this id in your organization, or the id is not a snapshot id (snap_…). Check the id. - 409
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 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. - 413
REQUEST_TOO_LARGE: the body is larger than 64 KiB. Send a smaller request. - 422
VALIDATION_FAILED: a field is invalid. Each entry oferrorsnames thefieldand itscode:nameordisk_offering_slugREQUIRED: send both.disk_offering_slugDISK_OFFERING_NOT_FOUND: no active disk offering has this slug. Pick one fromGET /public/v1/disk-offerings.size_gbSIZE_REQUIRED: a custom-size offering needssize_gb, at least the snapshot's size.UNKNOWN_FIELD: the body has a field this endpoint does not take (named infield). Remove it or fix its spelling. - 429
RATE_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. WaitRetry-Afterseconds, then retry. For authenticated quota denials,RateLimit-Scopeidentifies the denying quota andRateLimit-Resetreports its remaining window in seconds. - 503
SERVICE_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 sameIdempotency-Key.
Every code is explained in Errors.
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
}'{
"operation_id": "op_06gk3x9tq7m2v8r4y1c5d0zp8w",
"resource_id": "vol_06gk3x9tq7m2v8r4y1c5d0zp8w",
"status": "submitting"
}