# Snapshot states

The status and protection status values a snapshot reports, what FAILED protection means, and when a snapshot can be used as a clone source.

A snapshot reports two independent fields: `status` describes the copy itself, and `protectionStatus` describes whether it’s protected. A snapshot is usable as a clone source only when it reports `status: COMPLETED` and `protectionStatus: PROTECTED`. Creating, protecting, unprotecting, and deleting a snapshot are asynchronous, and these fields tell you how the work ended.

## Status [#status]

A new snapshot starts `PENDING` and moves to `COMPLETED` when the copy finishes, or to `ERROR` if creation fails. Deleting a `COMPLETED` or `ERROR` snapshot moves it to `DELETING` and then `DELETED`, or to `ERROR` if deletion fails.

| Status | Meaning | Billed |
| --- | --- | --- |
| `PENDING` | The platform is copying the volume’s data. | No |
| `COMPLETED` | The copy is finished. | Yes |
| `ERROR` | Creating or deleting the snapshot failed. `statusReason` says what failed. | No |
| `DELETING` | The platform is removing the snapshot. | No |
| `DELETED` | The snapshot is gone. | No |

While a snapshot is `PENDING`, `progress` reports `PENDING` and `percentComplete` shows how far the copy has got. `progress` is `AVAILABLE` once the data is fully copied, and `UNAVAILABLE` when no progress information exists.

## When an operation fails [#when-an-operation-fails]

- A snapshot that couldn’t be created ends in `ERROR` instead of `COMPLETED`. There’s no usable snapshot behind it. Delete it and take a new one.
- A snapshot that couldn’t be deleted stays in your list as `ERROR` instead of reaching `DELETED`. Its copy may still exist, and it still blocks deleting the volume it was taken from. Delete it again once the cause is resolved.

`statusReason` is `null` for every status except `ERROR`.

## Protection status [#protection-status]

The `protectionStatus` values are below. A new snapshot starts `UNPROTECTED`. Protecting moves it through `PROTECTING` to `PROTECTED`; unprotecting moves it through `UNPROTECTING` back to `UNPROTECTED`. If either change fails, it ends in `FAILED`, from which you can protect or unprotect it again.

| Value | Clone source | Deletable |
| --- | --- | --- |
| `UNPROTECTED` | No | Yes |
| `PROTECTING` | No | No |
| `PROTECTED` | Yes, if `COMPLETED` | No |
| `UNPROTECTING` | No | No |
| `FAILED` | No | No |

`FAILED` means the last protect or unprotect couldn’t be applied, so the snapshot’s real protection state is unknown. The platform treats it as neither protected nor unprotected. `protectionStatusReason` says why the change failed, and the snapshot’s data is unaffected. To settle the state, protect the snapshot again, or unprotect it, which is also the way to get it to a state you can delete.

Which status a protect or unprotect needs:

- Protect needs `status: COMPLETED`. A `PENDING` snapshot has no finished copy yet; a `DELETING`, `DELETED`, or `ERROR` snapshot has nothing to protect.
- Unprotect works on a `COMPLETED` snapshot and on an `ERROR` snapshot. Unprotecting an `ERROR` snapshot lets you delete it.

Asking for the protection state a snapshot already has succeeds and changes nothing. A refused protect or unprotect changes nothing about the snapshot.

## Clone sources [#clone-sources]

A snapshot can be the source of a new volume, an image, or an instance’s volume launched from that image. Every one of those paths checks the same rule at the moment of use: `status: COMPLETED` and `protectionStatus: PROTECTED`. A snapshot that met the rule when an image was created but has since been unprotected or deleted no longer passes it.

## Settled states [#settled-states]

A `COMPLETED` snapshot stays usable as a clone source as long as it stays protected, and a `DELETED` snapshot stays gone. A deleted snapshot drops out of your snapshot list immediately. You can still look it up by its URN, with no time limit.

## Related [#related]

- [Create and protect a snapshot](/docs/storage/snapshots/create-and-protect)
- [Delete a snapshot](/docs/storage/snapshots/delete)
- [Volume states](/docs/storage/volumes/volume-states)

