---
title: "Record that someone who opted out consented again"
method: POST
path: "/v1/brands/{id}/optins/reconsent"
tags: ["Consent"]
---

# Record that someone who opted out consented again

`POST /v1/brands/{id}/optins/reconsent`

## Request

- Base URL: `https://api.cadencercs.com`
- URL: `https://api.cadencercs.com/v1/brands/{id}/optins/reconsent`
- Auth: HTTP bearer

**The one exception to "only the recipient reverses their own STOP".** It exists because refusing to build it does not prevent the reversal, it just moves it somewhere with no record — and the version with no record was a bug we shipped.

Narrow on purpose:

- `evidenceRef` is **required**, unlike an ordinary opt-in. An unevidenced claim about someone who has already said no is exactly the claim that must not be taken on trust.
- `capturedAt` must be **after** the opt-out. Consent collected before it is the consent they revoked, and replaying the original signup record is the most likely misuse.
- A number may be re-consented at most twice per brand. A third is refused outright: at that point consent and persistence are not distinguishable, and it goes to a human.
- Every reversal is written to an audit trail with the account, the evidence and the opt-out it reverses, readable at `GET /v1/brands/{id}/optins/reconsents`.

Texting `START` always works and is never rate-limited — it is the recipient's own channel.

## Path parameters

- `id` string, required

## Request body

- object
  - `to` string, required: Recipient in E.164.
  - `method` string, required: How consent was collected this time, e.g. `web_form`, `account_signup`.
  - `evidenceRef` string, required: The URL, record id or ticket showing they consented again. Required — this is the record you would be asked to produce.
  - `capturedAt` string, required: ISO 8601. Must be after the opt-out.

## Response `201`

Recorded. The number is sendable again.

- object
  - `ok` boolean, required
  - `reconsentId` string, required
  - `e164` string
  - `sendable` boolean, required
  - `previousOptOutAt` string: The opt-out this reversed.
  - `reconsents` number
  - `remaining` number: Reversals left before only START will work.
  - `note` string

## Other responses

- `400`: Missing or placeholder `evidenceRef`, or consent that predates the opt-out.
- `401`: Not signed in, and no account-linked API key was sent.
- `404`: No such brand on this account.
- `409`: Nothing to reverse (`NOT_OPTED_OUT`, `NO_OPTIN_RECORD`), too many cycles for this number (`TOO_MANY_RECONSENTS`), or the account's daily ceiling (`ACCOUNT_DAILY_LIMIT`).
- `500`: Unexpected server error. The body is always JSON.

---

[API](https://skmtc.dev/cadencercs/apis/cadence-api.md) · [All operations](https://skmtc.dev/cadencercs/apis/cadence-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cadencercs/apis/cadence-api/revisions/9438443c2081?raw)
