Korely

Core operations

Forget a user

Erase every memory and fact held for one end user, memories, extracted facts, and graph edges, in a single authenticated call.

When one of your end users exercises their right to erasure, you need to remove everything Korely holds about them: raw memory text, vector embeddings, entity graph edges, and bi-temporal facts. A single DELETE /v1/users/{end_user}/memories call does all of this atomically. Facts are invalidated rather than deleted outright, so the audit trail stays intact while the data stops being served. The response includes a signed audit_id you can store as proof that the erasure was performed.

Wire this call directly into your own /delete-account flow. No secondary cleanup step is needed: one HTTP request satisfies the Article 17 obligation for everything Korely stores on behalf of that user.

flowchart LR
  A([Your delete-account flow]) -->|DELETE /v1/users/end_user/memories| K[Korely]
  K --> M[Purge memory text<br/>+ embeddings]
  K --> G[Remove graph edges]
  K --> F[Invalidate all facts<br/>valid_from / invalid_at]
  K --> AU[Emit audit_id]
  AU --> R([Return receipt])
  M -.-> R
  G -.-> R
  F -.-> R
Forget invalidates facts and removes memory data; the audit record persists for your compliance logs.

Request

Endpoint: DELETE /v1/users/{end_user}/memories. SDK: korely.delete_all(user_id=...).

ParameterTypeRequiredDescription
end_user string (path) Required The user_id you use when writing memories. Identifies the data subject whose data will be erased. Must match the value passed to add() for that user.
Authorization header Required Bearer kor_live_..., your agent API key. The key must belong to the agent that owns the user's memories.

Example

from korely_memory import Korely
korely = Korely(api_key="kor_live_...")
result = korely.delete_all(user_id="customer-4812")
print(result.user_id) # customer-4812
print(result.memories_forgotten) # 47
print(result.facts_invalidated) # 12
print(result.audit_id) # aud_3d0f, store this for your GDPR records

Response

{
"user_id": "customer-4812",
"memories_forgotten": 47,
"facts_invalidated": 12,
"audit_id": "aud_3d0f"
}
FieldTypeDescription
user_id string The end user that was erased, echoed back for confirmation.
memories_forgotten integer Number of memory records purged (text, embeddings, and graph edges removed).
facts_invalidated integer Number of bi-temporal facts invalidated. Facts are not mutated; invalid_at is set so they stop being served while the audit trail stays intact.
audit_id string A signed receipt you can attach to your own GDPR erasure record. Prefixed aud_.

Errors

Every error returns the same envelope: {"code": "<slug>", "message": "<text>"}. There is no error or detail field. Note there is no 404 for an unknown user, forget is idempotent and returns 200 with zero counts (see Notes below).

StatusCodeWhen it happens
401 invalid_key The Authorization header is missing, malformed, or the key has been revoked. Message: Invalid or missing API key.
422 invalid_request The end_user path segment failed validation, for example, an empty string. Message format: <field>: <reason>. This endpoint takes no request body.
429 quota_exceeded The agent has exhausted its monthly query quota. Forget calls count toward the query quota, not the write quota. If the limit is a per-window rate limit, the response carries a Retry-After header (integer seconds).

Notes

  • Idempotent. If the user has no memories, the call succeeds and returns the same response shape with counts of zero and a fresh audit_id. It is safe to call from a delete-account handler without a pre-flight existence check.
  • Scoped to your agent key. Only memories and facts written under the same kor_live_... key are erased. If the same end user exists in multiple agents, each agent must call this endpoint independently.
  • Facts are invalidated, not deleted. Bi-temporal facts have their invalid_at timestamp set to now. They stop being served in /context and /facts responses, but the audit trail (including the fact that a fact existed) is preserved for your own GDPR records. This satisfies Article 17 because the personal data is no longer processed.
  • Rate-limit behaviour. The endpoint is subject to the query quota of your plan. Hobby: 25 k queries/month; Developer: 250 k; Team: 1 M; Scale: 10 M. A monthly-quota 429 (quota_exceeded) does not carry a Retry-After header; only a per-window rate-limit 429 does (integer seconds).
  • Store the audit_id. The aud_-prefixed receipt is your proof of erasure. Attach it to your internal GDPR erasure record alongside the timestamp of the HTTP response.

Related

  • Add a memory, write the first memories for a user.
  • Get context, retrieve relevant memories and facts before a forget to audit what will be erased.
  • List users, enumerate all end_user identifiers in your agent to build a deletion queue.
  • API reference, full endpoint contract, request/response schemas, and OpenAPI spec.