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.
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_idstringRequired: 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 nosubject_kindyou can see in your tenant is a404.subject_kindstringWhat
subject_idpoints at:client(a household and its parties and entities — the default),party, orentity. Any other value is a400. A user (a login) is not erased here: remove it withDELETE /v1/users/{id}, and Aleta erases the person 30 days after their last access in every tenant ended.reasonstringOptional free-text reason. It is accepted but not stored, logged or echoed back.
scopestringScope of erasure.
all(the default) erases every personal-data record for the subject; any other value is a400.
Any other body field is a 400.
Response fields
request_idstringReceipt identifier for the request, prefixed
drr_. Keep it — it is your reference for the erasure.statusstringAlways
acceptedon submission.subject_idstringsubject_idas you sent it.scopestringEcho of the scope applied.
received_attimestampWhen the request was accepted, RFC 3339 in UTC, with fractional seconds when they are not zero.
estimated_completiontimestampThe committed completion date: exactly 30 days after
received_at, in the same format.
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."
}'
{
"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"
}