---
title: "Erase a contact (POPIA)"
method: POST
path: "/api/v1/contacts/{id}/erase"
tags: ["contacts"]
---

# Erase a contact (POPIA)

`POST /api/v1/contacts/{id}/erase`

## Request

- Base URL: `https://app.blueticked.com`
- URL: `https://app.blueticked.com/api/v1/contacts/{id}/erase`
- Auth: HTTP bearer

Anonymise a contact and its personal data for a POPIA erasure request.

Irreversible: personal data is scrubbed in place and cannot be recovered. The row is anonymised, not deleted, so counts and foreign keys survive.

Idempotent: re-erasing an already-erased contact returns the original erased_at with already_erased: true (and zeroed counts).

Works on soft-deleted contacts too (delete-then-erase is a valid order); `counts` reports how many related records were redacted per table (including active journey enrolments exited under `journeyEnrolments`, under `leads` the person's rows of the Leads tables, linked to them or naming them by email or number, and under `commercePaymentEvents` the payment events of their orders, cleared to their amounts, ids, statuses and dates).

## Path parameters

- `id` string, required

## Response `200`

Success

- object
  - `id` string, uuid, required
  - `erased_at` string, date-time, required
  - `already_erased` boolean, required
  - `counts` object, required
    - `conversations` number, required
    - `conversationMessages` number, required
    - `messages` number, required
    - `flowSubmissions` number, required
    - `flowPostSubmitEvents` number, required
    - `leads` number, required
    - `appointments` number, required
    - `whatsappOrders` number, required
    - `commerceOrders` number, required
    - `commercePaymentEvents` number, required
    - `webhookDeliveries` number, required
    - `externalIntegrationDeliveries` number, required
    - `contactNotes` number, required
    - `contactDocuments` number, required
    - `agentRuns` number, required
    - `journeyEnrolments` number, required
    - `whatsappCalls` number, required
    - `tickets` number, required
    - `ticketComments` number, required
  - `request_id` string, required

## Other responses

- `400`: Validation failed
- `401`: Unauthorized: missing or invalid API key
- `402`: Insufficient wallet balance
- `403`: Forbidden: scope, plan limit, or suspension
- `404`: Not found
- `409`: Conflict (idempotency-key reuse or resource in use)
- `422`: Understood but refused: the request is well-formed, the action is not permitted for this resource
- `429`: Rate limited
- `500`: Internal error
- `502`: An upstream provider refused or failed the request
- `503`: Channel or send queue unavailable

---

[API](https://skmtc.dev/blueticked/apis/blueticked-api.md) · [All operations](https://skmtc.dev/blueticked/apis/blueticked-api/llms.txt) · [OpenAPI document](https://skmtc.dev/blueticked/apis/blueticked-api/revisions/07132284f4ff?raw)
