# Revoke one consent record

Source: https://docs.usetone.ai/reference/compliance/consent.revoke

> ⚠️ Revoking consent does NOT stop calls on its own: the ledger passes or warns, it never blocks.

`POST /v1/consent/{id}/revoke`
⚠️ Revoking consent does NOT stop calls on its own: the ledger passes or warns, it never blocks. Only the suppression list blocks. If the recipient asked not to be called, use the opt-out endpoint, which revokes and suppresses in one transaction.

Requires the `write` scope.

## Parameters

| Name | In | | Meaning |
|---|---|---|---|
| `id` | path | required | The consent record's id. |

## Request body

| Field | Type | | Meaning |
|---|---|---|---|
| `reason` | string | optional | Why the consent is being revoked. Kept on the record — revocation is a stamp, never a delete. |

### Example request

```json
{
  "reason": "Recipient asked to be removed by email."
}
```

## Response

| Field | Type | | Meaning |
|---|---|---|---|
| `active` | boolean | required | Whether this record satisfies the gate right now. |
| `capturedAt` | string | required | When the RECIPIENT consented, not when you told us. |
| `createdAt` | string | required | When this consent was recorded with Tone, RFC 3339 UTC. Distinct from `capturedAt`, which is when the recipient actually consented. |
| `e164` | string | required | The number that consented, in E.164. |
| `evidenceRef` | string | null | required | Where the proof lives — form id, recording URL, DCA reference. |
| `expiresAt` | string | null | required | When the consent lapses. RFC 3339, UTC. Null means it stands until revoked. |
| `id` | string | required | The consent record’s id. Pass it to `POST /v1/consent/{id}/revoke` to revoke this one record. |
| `kind` | string | required | Open set — handle an unrecognised value rather than throwing. Today: `explicit`, `inferred`. |
| `purpose` | string | required | What they consented TO. Open set — handle an unrecognised value rather than throwing. Today: `promotional`, `service`, `transactional`, `collections`. |
| `revokedAt` | string | null | required | The ledger is append-only; revocation is a stamp, not a delete. |
| `revokedReason` | string | null | required | Why the consent was revoked, when a reason was given. |
| `scope` | string | null | required | What the recipient agreed to, as it was recorded. |
| `source` | string | required | Weakest to strongest as evidence. Open set — handle an unrecognised value rather than throwing. Today: `api`, `web_form`, `ivr`, `dtmf`, `otp`, `dca`, `import`. |

### Example response

```json
{
  "data": {
    "active": true,
    "capturedAt": "2026-08-20T11:02:00Z",
    "createdAt": "2026-08-25T09:14:22Z",
    "e164": "+919876543210",
    "evidenceRef": "form-sub-88213",
    "expiresAt": "2026-11-23T09:14:22Z",
    "id": "8814",
    "kind": "explicit",
    "purpose": "promotional",
    "revokedAt": null,
    "revokedReason": null,
    "scope": "Order updates and delivery reminders.",
    "source": "api"
  }
}
```
