VoidhashDocs
DevelopersHelp centerGuidesAPI reference
Dashboard
Essentials
API overview
Authentication
Event capture
Push device API
Webhooks
Webhook delivery
Webhook events
Projects & keys
Projects
API keys
Audit log
Customers & access
Persons
Products
Perks
Sandbox
Paywalls
Paywalls
Paywall locations
Components
Component registry
Assets
Experiments & flags
Experiments
Feature flags
Analytics & events
Analytics
Analytics alerts
Events
Ingest policy
VoidQL
Tracking domains
Ads
Ads
Ad accounts
Meta measurement
Payments & stores
Payment providers
Payment provider products
Purchase history imports
Payment sources
Webhooks & notifications
Webhooks
Push notifications
Push configurations
Automations
Organization & team
Organizations
Members
Invitations
Billing
Your account
Profile
Session
Notices
Connected apps
Terms of Service
Developer tools
Schema
SDK
List persons
Create a person
Retrieve a person
Update a person
List a person's entitlements
List a person's purchases
List a person's subscriptions
Erase a person
Retrieve an erasure

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

POST
/api/v1/projects/{projectId}/erasures

Authorization

AuthorizationBearer <token>

A project secret key: vh_sk_... for production, vh_sk_test_... for test. Keep it on your servers.

In: header

Path parameters

projectId*string

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.

personId?|

The person to erase, by id. Give this or distinctId, not both.

distinctId?|

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

StatustypecodeWhen
400invalid_requesterasure_target_requiredWith neither.
400invalid_requesterasure_target_ambiguousWith 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.

PreviousList a person's subscriptionsNextRetrieve an erasure

On this page

AuthorizationPath parametersRequest bodyExamplesResponse bodyErrorsMore in Persons