---
title: "Retire one remembered turn from both tiers"
method: DELETE
path: "/ingestion/memory/turns/{turn_id}"
tags: ["ingestion-memory"]
---

# Retire one remembered turn from both tiers

`DELETE /ingestion/memory/turns/{turn_id}`

## Request

- Base URL: `https://api.getmetacognition.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getmetacognition.com/ingestion/memory/turns/{turn_id}`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/metacognition/apis/tex-api/docs/ingestion/memory/turns/:turn_id/delete.ts> (a function with typed inputs; its response is checked against the schema)

Retire a single turn written by ``POST /ingestion/memory``.

``turn_id`` is a ``turn_ids`` entry from the write that created it — the
turn's content hash, from which its engine node id is derived. It is NOT
the active fragment id: that one is
``sha256(scope|turn_id)`` and one-way, so only this direction works.

Before this route existed, the finest thing a caller could delete on this
path was an entire scope or user: ``remember`` had no counterpart, and
handing a Turn node to the deletion service tombstoned the engine node
while reporting the active tier ``not_located`` — the tier default recall
actually reads. So a "deleted" turn kept being recalled.

Both tiers go through the ordinary deletion service, which means this gets
the same audit row (``deletion_requests``), the same soft/purge replay and
the same honest per-tier receipt as every other deletion. Soft mode only:
erasing the bytes is a platform-admin purge, unchanged.

## Path parameters

- `turn_id` string, required

## Query parameters

- `reason` string, nullable

## Response `200`

Successful Response

- ForgetTurnResponse: Response for DELETE /ingestion/memory/turns/{turn_id}.
  - `turn_id` string, required: The retired turn's id (as returned in turn_ids)
  - `forgotten` boolean, required: True only when no copy of the turn is still served: every stored item of it (split parts, observations, every scope) retired in both tiers, and no consolidated copy left. False means it may still answer recall somewhere — read residue, errors and the tier fields.
  - `request_id` string, nullable: Audit row id in deletion_requests (GET /deletions/{id})
  - `durable_tier` string, nullable: Per-tier outcome for HelixDB: ok | partial | error | not_found
  - `active_tier` string, nullable: Per-tier outcome for active memory: ok | skipped | not_located | error
  - `active_tier_note` string, nullable: Why the active tier is not 'ok', when it is not
  - `items_retired` integer, nullable: Stored items of the turn this covered (parts + observations)
  - `residue` string[]: Copies of the turn's text this does not remove: 'document_chunks' and 'knowledge_graph' once the turn has been consolidated (its episode summary IS rewritten without it). Deep recall can still return them.
  - `residue_note` string, nullable
  - `errors` string[]: What failed; the call is safe to repeat

## Other responses

- `422`: Validation Error

---

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