---
title: "Restore a context to a prior version_seq (T710)"
method: POST
path: "/api/contexts/{id}/versions/{seq}/restore"
tags: ["Contexts"]
---

# Restore a context to a prior version_seq (T710)

`POST /api/contexts/{id}/versions/{seq}/restore`

## Request

- Base URL: `http://localhost:38200`
- URL: `http://localhost:38200/api/contexts/{id}/versions/{seq}/restore`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `token`

Forward-only: internally calls the same update path a normal edit uses, so the restore itself is written as a NEW `context_versions` row (history is append-only, nothing is deleted or rewound) and the usual auto-index/auto-embed hooks fire. Rejects a redacted snapshot (one whose content was overwritten by a GDPR erasure) with 409 rather than restoring erased text.

## Path parameters

- `id` integer, required
- `seq` integer, required

## Response `200`

Context updated to the restored snapshot's content.

- Context: The full `contexts` row as returned by the API. Field set is broad (see `src/db/schema.ts` `contexts` table + `src/types.ts`); documented loosely here since this endpoint returns whatever the service layer assembles, including several optional feature-gated fields (contentFlags, provenance, etc.).
  - `id` integer
  - `name` string
  - `description` string
  - `content` string
  - `type` 'reference' | 'feedback' | 'project' | 'incident' | 'lesson' | 'user' | 'synthesis' | 'map' | 'moc' | 'handoff' | 'endpoint' | 'trail'
  - `scope` 'personal' | 'workspace' | 'team'
  - `workspace` string, nullable
  - `project` string, nullable
  - `lifecycle` string
  - `tags` string[]
  - `metadata` object
  - `createdAt` string, date-time
  - `updatedAt` string, date-time
  - `mergedInto` integer, nullable: T743, additive. Present ONLY on the response of `POST /api/contexts` when the T711 near-duplicate guard folded this write into an EXISTING row instead of inserting a new one -- the id of that existing (surviving) row, which is also `id` above. Absent/undefined on every other response shape (search, list, get, update) and on a genuine create. A caller that sees `mergedInto` set knows no new row was created and should treat the write as an update to the returned id, not a create.

## Other responses

- `400`: Invalid id or version sequence.
- `401`: Missing or invalid credentials.
- `404`: No such context in this tenant, or no such version_seq for it.
- `409`: The target snapshot was redacted (GDPR erasure) and cannot be restored.

---

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