# forget

> Soft-delete one record by ID or every record from a source — parameters, response, errors and pitfalls.

On this page you will learn how to delete one record or every record taken from one document, what the server returns, and why you should not pass both parameters at once.

The running example: `docs/deploy.md` was rewritten, and the team wants to remove every fact saved from its old version.

## Purpose

`forget` performs a **soft delete**: the record gets a deletion timestamp, no longer shows up in `search`, and its knowledge-graph links are removed. There are two modes:

- by `memory_id`: one record;
- by `source_id`: every active record from that source in the workspace (cascade).

## Parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `memory_id` | string or null | `null` | ID of the record to delete. |
| `workspace` | string | `"default"` | Workspace that holds the record. |
| `source_id` | string or null | `null` | Source whose records should all be deleted. |

At least one of `memory_id` and `source_id` is required.

If you pass **both**, the `source_id` mode wins: every record from the source is deleted, not just the one record. To delete a single record, pass only `memory_id`.

## Response

Delete by `memory_id`:

| Field | Description |
| --- | --- |
| `id` | Record ID from the request. |
| `forgotten` | `true` if the record was found and deleted; `false` if it does not exist, is already deleted, or is not visible to you. |
| `workspace`, `tenant_id`, `api_version` | Service fields. |
| `at` | Operation time, ISO 8601. |

Delete by `source_id`:

| Field | Description |
| --- | --- |
| `source_id` | Source from the request. |
| `forgotten_count` | Number of records deleted (may be `0`). |
| `workspace`, `tenant_id`, `api_version` | Service fields. |
| `at` | Operation time, ISO 8601. |

## Example

Delete every fact from the old version of the document:

```json title="arguments"
{
  "source_id": "docs/deploy.md",
  "workspace": "default"
}
```

```json
{
  "api_version": "1.0",
  "source_id": "docs/deploy.md",
  "tenant_id": "t-3f9a",
  "workspace": "default",
  "forgotten_count": 3,
  "at": "2026-10-05T10:02:41.118204+00:00"
}
```

Delete one record:

```json title="arguments"
{ "memory_id": "4d428a41-e7b0-4f81-a886-f40c6f6c766c" }
```

```json
{
  "api_version": "1.0",
  "id": "4d428a41-e7b0-4f81-a886-f40c6f6c766c",
  "tenant_id": "t-3f9a",
  "workspace": "default",
  "forgotten": true,
  "at": "2026-10-05T10:03:05.540911+00:00"
}
```

## Errors

| Text | Cause |
| --- | --- |
| `Either memory_id or source_id must be provided` | Neither `memory_id` nor `source_id` was passed. |
| `workspace '…' was deleted and cannot be reused` | The workspace was deleted. |
| `403 Forbidden: workspace access denied for project` | The workspace belongs to another project. |
| `MCP rate limit exceeded`, `project call limit exceeded` | Too many calls per minute. |
| `[MMW Notice]: …` | No subscription, grace period (deleting is not allowed, read-only) or suspended account. |

A record that does not exist is not an error: you get `forgotten: false` or `forgotten_count: 0`.

## Notes

- **Only what you can see.** In an organization, `forget` touches only records you can read under the [visibility](/organizations/visibility/) rules. Other people's drafts are not deleted even if they share the `source_id`.
- **Only the key's project.** Records of other projects are out of reach.
- **Soft delete.** A record cannot be restored over MCP. For full deletion of account data, see [Data and deletion](/account/data-and-deletion/).
- `remember` never deletes anything on its own: removing outdated facts takes an explicit `forget`.

## Next steps
