---
title: "Restore a published label version to the draft"
method: POST
path: "/v3/label-sets/{labelSetId}/versions/{versionId}/restore"
tags: ["Labeling Curation"]
---

# Restore a published label version to the draft

`POST /v3/label-sets/{labelSetId}/versions/{versionId}/restore`

Replaces mutable entity, product, and vault-label content with the
selected immutable snapshot. Geo policies, entity membership and
addresses, and vault assessments remain live and are not changed.
The mutable draft belongs to the `public` label set; other label sets
return a conflict.
The restore is atomic and returns a conflict when one of those retained
records references content that the selected snapshot would remove.
Restoring schedules the resulting draft through the normal publication
pipeline; it does not publish a new version itself.

## Path parameters

- `labelSetId` string, required
- `versionId` string, uuid, required

## Response `200`

Draft restored, or already identical to the selected version.

- object
  - `data` LabelRestoreResult, required
    - `id` string, uuid, required
    - `labelSetId` string, required
    - `versionKey` string, required
    - `status` 'draft' | 'published' | 'archived', required
    - `aliases` string[], required
    - `isLatest` boolean, required
    - `sourceRepo` string, nullable, required
    - `sourceRef` string, nullable, required
    - `sourceSha` string, nullable, required
    - `schemaAdapter` string, required
    - `checksum` string, nullable, required — SHA-256 checksum of canonical entity, product, and vault-label content. Audit timestamps and geo policies are excluded.
    - `createdAt` string, date-time, required
    - `publishedAt` string, date-time, nullable, required
    - `restoreOutcome` 'restored' | 'unchanged', required — Whether this request replaced the mutable draft or found it already identical to the selected snapshot.
    - `draftCounts` object, required
      - `entities` integer, required
      - `products` integer, required
      - `vaults` integer, required
  - `meta` PaginationMeta, required
    - `total` integer — Exact total count when the endpoint provides one.
    - `hasMore` boolean — Indicates whether another page exists beyond the current page.
    - `offset` integer
    - `limit` integer — Echoed page size after endpoint-side clamping.
    - `timestamp` string, date-time, required
    - `chainId` string — Comma-separated chain IDs for multi-chain responses.
    - `degradedProviders` string[] — Live providers whose data is incomplete in this response.

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `409` — Conflict
- `500` — Internal server error

---

[API](https://skmtc.dev/euler/apis/euler-data-api-v3.md) · [All operations](https://skmtc.dev/euler/apis/euler-data-api-v3/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/euler/euler-data-api-v3/revisions/9573a5fbd4a6/schema)
