---
title: "Delete a fact from a POT"
method: DELETE
path: "/pots/{pot_id}/facts/{fact_id}"
tags: ["facts"]
---

# Delete a fact from a POT

`DELETE /pots/{pot_id}/facts/{fact_id}`

## Request

- Base URL: `https://api.scipot.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.scipot.ai/pots/{pot_id}/facts/{fact_id}`
- Auth: none declared
- TypeScript: <https://skmtc.dev/scipot/apis/scipot-core-api/docs/pots/:pot_id/facts/:fact_id/delete.ts> (a function with typed inputs; its response is checked against the schema)

Delete a fact from a POT.

Also deletes the edges connected to it and its embedding. The embedding
goes first: if the vector store is unavailable the request fails with 502
and the fact stays, so a retry deletes both.

The call is safe to repeat. A second DELETE of the same fact returns the
same outcome (``replayed: true``) instead of 404, including when the first
attempt removed the fact and the client timed out before reading it.
Neighbour edge counts are updated a few at a time; doing them one by one
was enough to miss a 20 second client timeout on a well-connected fact.

## Path parameters

- `pot_id` string, uuid, required
- `fact_id` string, uuid, required

## Query parameters

- `force` boolean: Delete even when other documents are recorded as copies of the fact (v0.7.91.0): without it such a delete is refused with 409 `FACT_HAS_COPIES`. With it the fact goes as before and its copy records are dropped.

## Response `200`

Fact is gone. `replayed` is true when this repeats a deletion that already happened, so a timeout retry can confirm it.

- DeleteFactResponse: What DELETE /facts/{fact_id} answers. The fact is absent either way.
  - `fact_id` string, uuid, required
  - `pot_id` string, uuid, required
  - `deleted` boolean
  - `replayed` boolean: True when the fact was already deleted and this is the stored outcome.

## Other responses

- `404`: POT not found, or the fact was never stored
- `409`: `FACT_DELETE_IN_FLIGHT` (Retry-After): another request is deleting this fact right now. Retry the same DELETE. `FACT_HAS_COPIES` (v0.7.91.0): other live documents are recorded as copies of the fact (deduplication discarded their own), so deleting it would remove what they state; nothing was changed. `{code, message, fact_id, pot_id, copies: [{document_id, filename}] (at most 50), copies_total, truncated, fix}`. If the fact is false, disapprove it instead (POST .../curate); to delete it anyway, repeat with `force=true`.
- `422`: Validation Error
- `502`: Embedding deletion failed after retries — fact NOT deleted, retry
- `503`: Storage unavailable while recording the deletion. Retry.

## Changes

- **2026-10-18** `47cced8f28a0`: 1 info
  - added the new optional `query` request parameter `force`
- **2026-10-12** `4ec43ee51b64`: 1 breaking, 3 info
  - removed the success response with the status `204`
  - added the non-success response with the status `409`
  - added the non-success response with the status `503`
  - added the success response with the status `200`
- **2026-08-03** `e8712e9ffeae`: 1 info
  - added the non-success response with the status `502`

[Operation history](https://skmtc.dev/scipot/apis/scipot-core-api/changes/pots/:pot_id/facts/:fact_id/delete.md)

---

[API](https://skmtc.dev/scipot/apis/scipot-core-api.md) - [All operations](https://skmtc.dev/scipot/apis/scipot-core-api/llms.txt) - [OpenAPI document](https://skmtc.dev/scipot/apis/scipot-core-api/revisions/7620af82156a?raw)
