---
title: "Restore the personal workspace to a snapshot, or preview it with dryRun"
method: POST
path: "/api/preview/snapshots/{id}/restore"
tags: ["snapshot"]
---

# Restore the personal workspace to a snapshot, or preview it with dryRun

`POST /api/preview/snapshots/{id}/restore`

## Request

- Base URL: `https://symbol.chat` (the document declares no server; this is the origin it was published from)
- URL: `https://symbol.chat/api/preview/snapshots/{id}/restore`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Secure-next-auth.session-token`
  - OAuth 2
    - Authorization code: `https://mcp.symbol.chat/authorize`
    - Token URL: `https://mcp.symbol.chat/token`

## Path parameters

- `id` string, required: UUID v4 string

## Request body

- object
  - `confirmation_token` string: The token a dry run of this snapshot returned, within 15 minutes of it. A real restore without a valid one is refused with `dry_run_required`: from the start for Symbol's assistant tools and CLI (requests sending `x-symbol-ai-client`) and for a token that is sent but does not verify, and for any other API key or organization key from the effective date in the API changelog (issue #2522). A browser session does not send one.
  - `dryRun` boolean: Preview the restore without writing anything.

## Response `200`

Successful response

- object
  - `confirmation_expires_at` string: Present on a dry run: when `confirmation_token` stops being accepted (ISO 8601).
  - `confirmation_token` string: Present on a dry run. Send it as `confirmation_token` with `dryRun: false` to restore this snapshot. A restore without it is refused with `dry_run_required`: from the start for Symbol's assistant tools and CLI, and for any other API key or organization key from the effective date in the API changelog.
  - `stats` object, required
    - `added` object
      - `capsules` integer, required
      - `collections` integer, required
      - `projects` integer, required
      - `types` integer, required
    - `archived_over_cap` integer
    - `binaries_missing` integer, required
    - `binaries_restored` integer, required
    - `changed` object
      - `capsules` integer, required
      - `collections` integer, required
      - `projects` integer, required
      - `types` integer, required
    - `dry_run` boolean, required
    - `links_resumed` object[]
      - `id` string, required: UUID v4 string
      - `links` integer, required
      - `resource_type` 'capsule' | 'type' | 'collection' | 'project', required
      - `visibility` 'public' | 'link', nullable, required
    - `not_restored` object[], required
      - `code` string, required
      - `detail` string, required
    - `over_cap` object, nullable
      - `active_after` integer, required
      - `limit` integer, required
      - `will_archive` integer, required
    - `preview` object
      - `added` object[]
        - `id` string, required: UUID v4 string
        - `kind` 'capsule' | 'type' | 'project' | 'collection', required
        - `label` string, required
        - `ref` string, nullable, required: @type/N for a capsule, @type for a Type, null otherwise
      - `changed` object[], required
        - `id` string, required: UUID v4 string
        - `kind` 'capsule' | 'type' | 'project' | 'collection', required
        - `label` string, required
        - `ref` string, nullable, required: @type/N for a capsule, @type for a Type, null otherwise
      - `removed` object[], required
        - `id` string, required: UUID v4 string
        - `kind` 'capsule' | 'type' | 'project' | 'collection', required
        - `label` string, required
        - `ref` string, nullable, required: @type/N for a capsule, @type for a Type, null otherwise
    - `recently_deleted_count` integer
    - `removed` object, required
    - `removed_files` object, required
      - `attachments` integer, required
      - `bytes` integer, required
      - `capsule_images` integer, required
      - `type_images` integer, required
    - `restored` object, required
    - `resumes_exposure` object[], required
      - `id` string, required: UUID v4 string
      - `links` integer, required
      - `ref` string, nullable, required
      - `resource_type` 'capsule' | 'type' | 'collection' | 'project', required
      - `returns_from` 'archive' | 'deletion', required
      - `skill` boolean, required
      - `title` string, required
      - `visibility` 'public' | 'link', nullable, required
    - `safety_snapshot` object, nullable
      - `expires_at` string, nullable, required
      - `id` string, required: UUID v4 string
    - `undo` boolean

## Changes

- **2026-10-19** `5778844d1f9e`: 13 info
  - added the new optional request property `confirmation_token`
  - added the optional property `confirmation_expires_at` to the response with the `200` status
  - added the optional property `confirmation_token` to the response with the `200` status
  - added the optional property `stats/added` to the response with the `200` status
  - …9 more
- **2026-10-09** `c7729725d527`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/symbol/apis/symbol-api/changes/api/preview/snapshots/:id/restore/post.md)

---

[API](https://skmtc.dev/symbol/apis/symbol-api.md) - [All operations](https://skmtc.dev/symbol/apis/symbol-api/llms.txt) - [OpenAPI document](https://skmtc.dev/symbol/apis/symbol-api/revisions/3a2c4ebeab51?raw)
