---
title: "Privacy-first erasure (default-on SaaS): clear derived index by id/phone; durable audit who/what/when + tenant scope. ≤30/hour/key → 429. Managed pointer only — not a legal deletion SLA."
method: GET
path: "/v1/pbx/redact"
tags: ["PBX Search"]
---

# Privacy-first erasure (default-on SaaS): clear derived index by id/phone; durable audit who/what/when + tenant scope. ≤30/hour/key → 429. Managed pointer only — not a legal deletion SLA.

`GET /v1/pbx/redact`

## Request

- Base URL: `https://api.temsor.com`
- URL: `https://api.temsor.com/v1/pbx/redact`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

E.3 Privacy-first redaction for managed SaaS. mode=anonymize|delete. Lookup by target_id or phone. Clears Person/Promise/Fact/partial index + Temsor audio pointers in your tenant only (no cross-tenant). Durable audit. Raw media stays on your side. Not a legal deletion SLA. List: GET /v1/pbx/redact/audit.

**Credits per call:** 1 · **Operation id:** `pbx_redact`

In the GET form every field is a query parameter; object and array fields are JSON-encoded.

## Query parameters

- `target_type` 'promise' | 'call' | 'person' | 'fact' | 'utterance': Index document type. Optional when `phone` is set.
- `target_id` string: Document id (prm_*, per_*, call_*, fact_*).
- `phone` string: Caller phone — finds Person phones (+ linked derived index).
- `reason` string: Personal-data erasure reason.
- `mode` 'anonymize' | 'delete': anonymize (default) scrubs fields; delete removes docs.
- `who` string: Actor label for durable audit (defaults to pbx scope / demo-operator).

## Response `200`

Success

- object
  - `ok` unknown, required
  - `data` object, required
    - `redaction` object, required
      - `id` string, required
      - `who` string, required
      - `what` string, required
      - `at` string, required
      - `target_type` string, required
      - `target_id` string, required
      - `reason` string, required
      - `mode` 'anonymize' | 'delete', required
      - `pbx_id` string, nullable, required
      - `scope` object, required
        - `call_id` string, nullable, required
        - `pbx_id` string, nullable, required
        - `promise_id` string, nullable, required
        - `person_id` string, nullable, required
        - `phone` string, nullable, required
      - `touched` object, required
        - `persons` string[], required
        - `promises` string[], required
        - `calls` string[], required
        - `facts` string[], required
        - `partial_indexes` string[], required
        - `audio_pointers` string[], required
      - `customer_audio_untouched` true, required
      - `note` string, required
      - `note_tr` string, required
    - `applied` boolean, required
    - `mode` 'anonymize' | 'delete', required
    - `touched` object, required
      - `persons` string[], required
      - `promises` string[], required
      - `calls` string[], required
      - `facts` string[], required
      - `partial_indexes` string[], required
      - `audio_pointers` string[], required
    - `scope` object, required
      - `call_id` string, nullable, required
      - `pbx_id` string, nullable, required
      - `promise_id` string, nullable, required
      - `person_id` string, nullable, required
      - `phone` string, nullable, required
    - `customer_audio_untouched` true, required
    - `note` string, required
    - `note_tr` string, required
  - `meta` object
    - `credits` integer
    - `cached` boolean
    - `requestId` string
    - `durationMs` integer

## Other responses

- `400`: Error
- `401`: Error
- `402`: Error
- `429`: Rate limit exceeded — wait `Retry-After` seconds. The RateLimit headers are sent here too.

---

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