Checkpoints stand in for undo, which this session does not have. op=create saves the photo's CURRENT state, every live filter included, and returns a checkpoint_id. op=restore reopens that snapshot as a NEW image and closes the old one (replace, not copy): the old image id stops working once the close succeeds; if the close fails the result says close_failed: true, the old image stays open and both ids are valid. The result names the new id, e.g. "image N closed; restored as image M — use M from now on". A checkpoint (up to 100 MB; a larger one is said to be kept for this session only) is kept for 24 hours after it is made, whatever happens meanwhile: a crash, the server pausing or restarting, or your assistant reconnecting. One made in an earlier session is restored by its checkpoint_id as a NEW image and closes nothing (close the photo it replaces yourself), and op=list shows it as kept from an earlier session. op=list reports checkpoint_id, the image it belongs to, created_at and size in bytes, plus open: false for a checkpoint whose photo has since closed (still restorable) and pending: true while a create is still in flight. op=delete removes one. An unknown checkpoint_id on restore or delete is refused, naming every id that IS known. op=restore also returns the reopened image's base_type, precision and layers, like open_photo. Each photo holds at most 5 checkpoints (a 6th op=create REFUSES rather than silently evicting the oldest: delete one first) and at most 20 are kept in total across photos, since each takes disk space until deleted. This server also caps checkpoint disk use at 1024.0 MiB per session and 1024.0 MiB across all your sessions; op=create is refused at or above either, so free room with op=delete first.