# Delete a checkpoint

> Delete a checkpoint of the computer, with completion tracked by an operation.

> Nevia is in beta and open to selected teams. Public launch in Dec 2026. The CLI installs with `curl -fsSL https://get.nevia.cloud | sh`, and the MCP server is at https://api.nevia.cloud/mcp. A person signs in once in the browser.
> Setup, sign-in and requesting access: [SKILL.md](https://nevia.cloud/SKILL.md). When Nevia fits and when it doesn't: [why.md](https://nevia.cloud/why.md).

> For the complete documentation index, see [llms.txt](https://nevia.cloud/llms.txt). This page's HTML version: https://nevia.cloud/docs/reference/api/checkpoints/deleteComputerCheckpoint

`DELETE https://api.nevia.cloud/v1/computers/{cmp}/checkpoints/{chk}`

## Authorization

- `bearerAuth`: HTTP bearer in the Authorization header

Send the token in the `Authorization: Bearer <token>` header. See [Authenticate](https://nevia.cloud/docs/reference/api.md#authenticate).

## Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `cmp` | path | string | yes | Computer id: 27 lowercase letters and digits. Match `^[A-Za-z0-9_-]{1,64}$`. |
| `chk` | path | string | yes | Checkpoint id: 27 lowercase letters and digits. Match `^[A-Za-z0-9_-]{1,64}$`. |
| `Idempotency-Key` | header | string | no | Optional retry key, kept 24 hours. Length `1 <= length <= 255`. |

## Example request

### cURL

```bash
curl -X DELETE "https://api.nevia.cloud/v1/computers/01d4cnjk3xg90y576w8y6t4gdwm/checkpoints/01d4cnjkwhftngfp8vkmp723mhv" \
  -H "Authorization: Bearer $TOKEN"
```

### JavaScript

```js
fetch("https://api.nevia.cloud/v1/computers/01d4cnjk3xg90y576w8y6t4gdwm/checkpoints/01d4cnjkwhftngfp8vkmp723mhv", {
  method: "DELETE",
  headers: {
    "Authorization": `Bearer ${process.env.TOKEN}`
  }
})
```

### Python

```python
import os
import requests

url = "https://api.nevia.cloud/v1/computers/01d4cnjk3xg90y576w8y6t4gdwm/checkpoints/01d4cnjkwhftngfp8vkmp723mhv"

response = requests.request("DELETE", url, headers = {
  "Authorization": f"Bearer {os.environ['TOKEN']}"
})

print(response.text)
```

## Responses

### 202

Deletion started. The checkpoint is `deleting`. Poll the `checkpoint.delete` operation until it finishes.

Content type: `application/json`

Schema: `CheckpointResponse`

| Field | Type | Required | Description |
|---|---|---|---|
| `checkpoint` | Checkpoint | yes | Point-in-time capture of a computer. |
| `operations` | array<OperationId> | yes | Operations this request started. |

Example:

```json
{
  "checkpoint": {
    "id": "01d4cnjkwhftngfp8vkmp723mhv",
    "workspace": "01d4cnjjq40hnnh0nwmkg35nv2h",
    "source_type": "computer",
    "source": "01d4cnjk3xg90y576w8y6t4gdwm",
    "name": "before-migration",
    "consistency": "crash",
    "state": "ready",
    "generation": 1,
    "image_digest": "string",
    "size_bytes": 5368709120,
    "parent": null,
    "error": null,
    "created_at": "2026-09-10T12:34:56Z",
    "deleted_at": null
  },
  "operations": [
    "01d4cnjm89yk0r3xtv80dy0x7by"
  ]
}
```

### 400

`validation_failed`: malformed body, unknown field, or invalid id or name. Fix `details.field` and retry.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `validation_failed`:

```json
{
  "error": {
    "code": "validation_failed",
    "message": "Unknown field `colour` in the request body. Remove it; request bodies are strict.",
    "details": {
      "field": "colour",
      "in": "body"
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

### 401

`unauthorized`: the credential is missing, malformed, expired, or revoked. Send a valid bearer token.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `unauthorized`:

```json
{
  "error": {
    "code": "unauthorized",
    "message": "Missing credential. Send `Authorization: Bearer <token>` with an access token.",
    "details": {},
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

### 403

`forbidden`: the token is read-only or scoped elsewhere, or the role cannot do this. Use a token or role that allows it.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `forbidden`:

```json
{
  "error": {
    "code": "forbidden",
    "message": "You can view computer 01d4cnjk3xg90y576w8y6t4gdwm but your role does not allow computer#edit. Ask a workspace admin to change your role (PATCH /v1/workspaces/{ws}/access/{principal}).",
    "details": {
      "computer": "01d4cnjk3xg90y576w8y6t4gdwm",
      "permission": "computer#edit"
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

### 404

`not_found`: the checkpoint does not exist, or you cannot see it. Both return the same response.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `not_found`:

```json
{
  "error": {
    "code": "not_found",
    "message": "Checkpoint 01d4cnjkwhftngfp8vkmp723mhv was not found. List a computer's checkpoints with GET /v1/computers/{cmp}/checkpoints.",
    "details": {
      "checkpoint": "01d4cnjkwhftngfp8vkmp723mhv"
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

### 409

`checkpoint_in_use`: a live computer created or restored from the checkpoint derives from it. `invalid_state`: the platform refuses the delete while the snapshot is being taken or restored from. `invalid_state`: the platform no longer has the snapshot. `idempotency_conflict`: the `Idempotency-Key` was already used with a different body.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `checkpoint_in_use`:

```json
{
  "error": {
    "code": "checkpoint_in_use",
    "message": "Checkpoint 01d4cnjkwhftngfp8vkmp723mhv is in use by 2 live computers created or restored from it. Delete them first (GET /v1/computers?workspace=01d4cnjjq40hnnh0nwmkg35nv2h&from_checkpoint=01d4cnjkwhftngfp8vkmp723mhv lists them), then retry.",
    "details": {
      "checkpoint": "01d4cnjkwhftngfp8vkmp723mhv",
      "computer": "01d4cnjk3xg90y576w8y6t4gdwm",
      "workspace": "01d4cnjjq40hnnh0nwmkg35nv2h",
      "dependents": 2,
      "list_route": "GET /v1/computers?workspace=01d4cnjjq40hnnh0nwmkg35nv2h&from_checkpoint=01d4cnjkwhftngfp8vkmp723mhv"
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

Example `invalid_state: the platform refuses the delete while the snapshot is being taken or restored from`:

```json
{
  "error": {
    "code": "invalid_state",
    "message": "Checkpoint 01d4cnjkwhftngfp8vkmp723mhv cannot be deleted right now. Check its state with its computer's checkpoints and retry.",
    "details": {
      "checkpoint": "01d4cnjkwhftngfp8vkmp723mhv",
      "computer": "01d4cnjk3xg90y576w8y6t4gdwm",
      "workspace": "01d4cnjjq40hnnh0nwmkg35nv2h"
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

Example `invalid_state: the platform no longer has the snapshot`:

```json
{
  "error": {
    "code": "invalid_state",
    "message": "Checkpoint 01d4cnjkwhftngfp8vkmp723mhv is no longer running and cannot be deleted. Check its state with GET /v1/checkpoints/01d4cnjkwhftngfp8vkmp723mhv and retry.",
    "details": {
      "checkpoint": "01d4cnjkwhftngfp8vkmp723mhv",
      "computer": "01d4cnjk3xg90y576w8y6t4gdwm",
      "workspace": "01d4cnjjq40hnnh0nwmkg35nv2h"
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

Example `idempotency_conflict`:

```json
{
  "error": {
    "code": "idempotency_conflict",
    "message": "Idempotency-Key 8f1c2a7e-3b4d-4c5e-9f0a-1b2c3d4e5f60 was already used for a different DELETE /v1/computers/{cmp}/checkpoints/{chk} request. Use a new key for a new request.",
    "details": {
      "idempotency_key": "8f1c2a7e-3b4d-4c5e-9f0a-1b2c3d4e5f60"
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

### 422

`not_supported`: the platform does not support deleting the snapshot.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `not_supported`:

```json
{
  "error": {
    "code": "not_supported",
    "message": "This request is not supported for checkpoint 01d4cnjkwhftngfp8vkmp723mhv. Quote request_id when reporting.",
    "details": {
      "checkpoint": "01d4cnjkwhftngfp8vkmp723mhv",
      "computer": "01d4cnjk3xg90y576w8y6t4gdwm",
      "workspace": "01d4cnjjq40hnnh0nwmkg35nv2h"
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

### 423

`operation_in_progress`: a conflicting operation runs. Retry after `Retry-After`, or poll `details.operation_id` for completion.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `operation_in_progress`:

```json
{
  "error": {
    "code": "operation_in_progress",
    "message": "Computer 01d4cnjk3xg90y576w8y6t4gdwm has an operation in progress. Poll GET /v1/operations/01d4cnjm89yk0r3xtv80dy0x7by until it finishes, then retry.",
    "details": {
      "computer": "01d4cnjk3xg90y576w8y6t4gdwm",
      "operation_id": "01d4cnjm89yk0r3xtv80dy0x7by",
      "retry_after_seconds": 2
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

### 429

`rate_limited`: slow down. Retry after `Retry-After`.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `rate_limited`:

```json
{
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Retry after 2 seconds.",
    "details": {
      "retry_after_seconds": 2
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

### 500

`request_failed`, or the failed action's own code, such as `creation_failed`, `authorization_failed` or `command_execution_failed`. Quote `request_id` when reporting. The diagnostic stays in server logs.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `request_failed`:

```json
{
  "error": {
    "code": "request_failed",
    "message": "request failed",
    "details": {},
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

### 503

`creation_failed`: The action is temporarily unavailable, named by its code (`creation_failed`, `wake_failed`, ...). Wait at least `Retry-After` seconds (60 by default). `details.retryable` says whether repeating the request is safe. Keep the original `Idempotency-Key`. Signing in again does not help. `deletion_failed`: the platform is unreachable, or refuses the API, while the snapshot is deleted.

Content type: `application/json`

Schema: `ErrorEnvelope`

Body of every error response

| Field | Type | Required | Description |
|---|---|---|---|
| `error` | Error | yes |  |

Example `creation_failed`:

```json
{
  "error": {
    "code": "creation_failed",
    "message": "The computer could not be created. Try again later, and quote request_id if it persists.",
    "details": {
      "retryable": true
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```

Example `deletion_failed`:

```json
{
  "error": {
    "code": "deletion_failed",
    "message": "Checkpoint 01d4cnjkwhftngfp8vkmp723mhv could not be deleted.",
    "details": {
      "checkpoint": "01d4cnjkwhftngfp8vkmp723mhv",
      "computer": "01d4cnjk3xg90y576w8y6t4gdwm",
      "workspace": "01d4cnjjq40hnnh0nwmkg35nv2h",
      "retryable": true
    },
    "request_id": "req_01j9k3m2p7q4r8s1"
  }
}
```
