Erase a person
Permanently erases a person's personal data, and that of every person merged into them, in the background.
This cannot be undone. Name the person by exactly one of personId or distinctId. Purchases and revenue stay recorded against the anonymized person. Always answers 202 with the erasure: a request naming nobody records an erasure that is completed at once with a null personId, and repeating a request returns the existing erasure, starting it again when it failed.
Guide: People and identity
A project secret key: vh_sk_... for production, vh_sk_test_... for test. Keep it on your servers.
In: header
Path parameters
The project's id, proj_.... A secret key works only in the project it belongs to.
Request body
application/json
TypeScript definitions
Use the request body type in TypeScript.
The person to erase, by id. Give this or distinctId, not both.
The person to erase, by one of their distinct ids. Give this or personId, not both.
Examples
curl -X POST "https://api.voidhash.com/api/v1/projects/proj_tz4a98xxat96iws9zmbrgj3a/erasures" \ -H "Authorization: Bearer vh_sk_..." \ -H "Content-Type: application/json" \ -d '{ "distinctId": "user_8231" }'{ "id": "person_erasure_t5y8u1i4o7p0a3s6d9f2g5h8", "projectId": "proj_tz4a98xxat96iws9zmbrgj3a", "status": "queued", "personId": "person_h7d2k9m4x1c6v8b3n5q0w2e7", "requestedAt": "2026-05-02T08:14:00.000Z", "completedAt": null}{ "error": { "type": "invalid_request", "code": "erasure_target_required", "message": "Name the person to erase with personId or distinctId.", "param": "personId" }}{ "error": { "type": "unauthenticated", "code": "invalid_api_key", "message": "This secret key is not valid." }}{ "error": { "type": "permission_denied", "code": "permission_denied", "message": "Insufficient permissions." }}{ "error": { "type": "not_found", "code": "project_not_found", "message": "There is no project proj_tz4a98xxat96iws9zmbrgj3a, or this credential cannot use it.", "param": "projectId" }}{ "error": { "type": "internal", "code": "internal_error", "message": "Something went wrong on our side. Try again, and contact support with the Request-Id header if it keeps failing." }}Response body
application/json
application/json
application/json
application/json
application/json
application/json
Errors
| Status | type | code | When |
|---|---|---|---|
| 400 | invalid_request | erasure_target_required | With neither. |
| 400 | invalid_request | erasure_target_ambiguous | With both. |
It can also fail with the errors every operation shares, such as unauthenticated; see Errors.
More in Persons
- List persons
GET - Create a person
POST - Retrieve a person
GET - Update a person
PATCH - List a person's entitlements
GET - List a person's purchases
GET - List a person's subscriptions
GET - Retrieve an erasure
GET
Something wrong or missing on this page? Tell us by email or on Discord.