---
title: "Save a checkpoint, restore as draft, or create a release"
method: POST
path: "/v1/canvases/{canvasId}/history"
tags: ["Canvases"]
---

# Save a checkpoint, restore as draft, or create a release

`POST /v1/canvases/{canvasId}/history`

## Request

- Base URL: `https://api.masko.ai`
- URL: `https://api.masko.ai/v1/canvases/{canvasId}/history`
- Auth: HTTP bearer

Restore atomically checkpoints current work first. No generation is run. A release requires complete media and does not activate Desktop or publish a listing.

## Path parameters

- `canvasId` string, uuid, required

## Headers

- `Idempotency-Key` string

## Request body

- union
  - object
    - `action` 'checkpoint', required
    - `name` string, required
    - `expected_graph_hash` string, required
  - object
    - `action` 'restore', required
    - `checkpoint_id` string, uuid, required
    - `expected_graph_hash` string, required
  - object
    - `action` 'restore_release', required
    - `release_id` string, uuid, required
    - `expected_graph_hash` string, required
  - object
    - `action` 'copy_release', required
    - `release_id` string, uuid, required
    - `name` string, required
    - `expected_graph_hash` string, required
  - object
    - `action` 'release', required
    - `notes` string
    - `operation_id` string, uuid, required
    - `expected_graph_hash` string, required

## Response `200`

Successful response

- object
  - `data` union, required
    - object
      - `id` string, uuid, required
      - `canvas_id` string, uuid, required
      - `name` string, required
      - `graph` object, required
      - `graph_content_hash` string, required
      - `created_by` string, uuid, required
      - `created_at` string, required
    - object
      - `id` string, uuid, required
      - `canvas_id` string, uuid, required
      - `number` integer, required
      - `notes` string, required
      - `mascot_version_id` string, uuid, required
      - `created_by` string, uuid, required
      - `created_at` string, required
    - object
      - `object` 'canvas', required
      - `id` string, uuid, required
      - `project_id` string, uuid, nullable, required
      - `mascot_id` string, uuid, nullable, required
      - `name` string, required
      - `graph` object, nullable, required
      - `graph_content_hash` string, required
      - `created_at` string, nullable, required
      - `updated_at` string, nullable, required

## Other responses

- `400`: Invalid input
- `401`: Authentication required
- `403`: Write key required
- `404`: Resource not found in credential workspace
- `409`: Revision conflict or retained history
- `422`: Required release media unavailable

---

[API](https://skmtc.dev/masko/apis/masko-api.md) · [All operations](https://skmtc.dev/masko/apis/masko-api/llms.txt) · [OpenAPI document](https://skmtc.dev/masko/apis/masko-api/revisions/91eb3006a92f?raw)
