View as Markdown

Data deletion

The GDPR Article 17 endpoint. Submit an erasure request for a data subject and the platform anonymises their personal data across every store — durably queued, audit-logged, and completed within a 30-day SLA. The request is accepted asynchronously: you get a 202 with a receipt immediately, and the erasure itself runs out of band. Submitting a request requires the access:write scope and a firm owner or administrator role, and it requires a person: erasure cannot be undone, so a machine credential or API key may only send it as a dry run (?dry_run=true), whoever owns the key.


POST/v1/data-deletion-requests

Submit a deletion request

Registers an erasure request for a data subject within your tenant. The platform validates the request, persists it durably, writes a long-retention audit event, and returns 202 Accepted with an estimated completion date 30 days out — the written commitment GDPR's "without undue delay" expects.

With ?dry_run=true the request is checked in full and nothing is stored: the answer is 200 with the receipt it would have had and the header Aleta-Dry-Run: true. A machine credential or API key gets 403 without dry_run=true. Its dry runs count against its daily write quota.

Takes an Idempotency-Key header (1 to 128 visible characters; anything else is a 400). The same key with the same body answers the first receipt again, with the same request_id and the header Idempotency-Replay: true, and registers no second request; the same key with a different body is a 409. A dry run ignores the key.

Body parameters

subject_idstring

Required: the id of the client, party or entity to erase. A missing id, or one that is not a UUID, is a 400; an id that is no subject_kind you can see in your tenant is a 404.

subject_kindstring

What subject_id points at: client (a household and its parties and entities — the default), party, or entity. Any other value is a 400. A user (a login) is not erased here: remove it with DELETE /v1/users/{id}, and Aleta erases the person 30 days after their last access in every tenant ended.

reasonstring

Optional free-text reason. It is accepted but not stored, logged or echoed back.

scopestring

Scope of erasure. all (the default) erases every personal-data record for the subject; any other value is a 400.

Any other body field is a 400.

Response fields

request_idstring

Receipt identifier for the request, prefixed drr_. Keep it — it is your reference for the erasure.

statusstring

Always accepted on submission.

subject_idstring

subject_id as you sent it.

scopestring

Echo of the scope applied.

received_attimestamp

When the request was accepted, RFC 3339 in UTC, with fractional seconds when they are not zero.

estimated_completiontimestamp

The committed completion date: exactly 30 days after received_at, in the same format.

Request
POST/v1/data-deletion-requests
curl -X POST https://api.aleta.ai/v1/data-deletion-requests \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '{
    "subject_id": "019f8d08-a5fe-70d9-a454-e753f24658f4",
    "subject_kind": "client",
    "reason": "Client offboarded and requested erasure."
  }'
Response
{
  "request_id": "drr_019f95f61c2a7b3e8d4f6a0c9e2b1d57",
  "status": "accepted",
  "subject_id": "019f8d08-a5fe-70d9-a454-e753f24658f4",
  "scope": "all",
  "received_at": "2026-07-24T20:49:11.482913517Z",
  "estimated_completion": "2026-08-23T20:49:11.482913517Z"
}
  • Clients — the most common subject kind.
  • Users — login identities, which are erased through their own flow, not here.