> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ouraicalling.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Consent & compliance

> Choose universal or per-channel opt-outs and manage cross-channel suppression records.

Consent & Compliance controls how **marketing opt-outs** are enforced across a
workspace. Suppression enforcement is always active. Workspace owners and
admins configure the mode under **Settings → Data → Suppression**; other
members have read-only access.

## Consent modes

### Universal opt-out

An opt-out received on any channel creates an `all` scope. The linked contact
is suppressed from marketing outreach on voice, SMS, email, and supported
messaging channels.

Universal mode is the conservative default and remains available on every
plan.

### Per-channel opt-out

An opt-out applies only to the originating channel. For example, an SMS
opt-out blocks SMS marketing while independent voice or email consent can
remain usable.

Per-channel mode requires the **Consent & Compliance** plan feature. If that
feature is unavailable, the workspace remains in universal mode; suppression
enforcement is never disabled.

<Note>
  Changing the workspace mode does not silently rewrite historical suppression
  records. Every entry retains its `scope` and `mode_at_opt_out`, so the rule
  applied when the contact opted out remains auditable.
</Note>

## Suppression records

An active record can be linked to a contact ID, phone number, or email address.
It includes:

* `scope`: `all` or the affected channel;
* `origin_channel`: where the opt-out was received;
* `purpose`: currently `marketing`;
* `source`, `reason`, and creation time;
* `mode_at_opt_out`: the workspace mode captured at the time of the opt-out.

Listing with a `channel` filter returns both that channel's records and
universal (`all`) records, because both block outreach on the requested
channel.

## Restoring consent

Restoring consent does not erase compliance history. The active suppression is
revoked and an opt-in event is appended to the audit trail.

Use the suppression entry UUID whenever possible. A URL-encoded E.164 phone
number or email address is also accepted, but the UUID is deterministic when a
contact has multiple channel-specific entries.

<Warning>
  Only restore consent when you have an appropriate, documented basis to do so.
  Product settings assist with enforcement but do not replace legal review for
  your jurisdiction, outreach purpose, and communication channel.
</Warning>

## REST API

Read or update the workspace mode:

```bash theme={null}
curl https://YOUR_DOMAIN/api/v1/settings/consent-compliance \
  -H "Authorization: Bearer fam_..."
```

```bash theme={null}
curl -X PATCH https://YOUR_DOMAIN/api/v1/settings/consent-compliance \
  -H "Authorization: Bearer fam_..." \
  -H "Content-Type: application/json" \
  -d '{"mode":"per_channel"}'
```

Record an opt-out:

```bash theme={null}
curl -X POST https://YOUR_DOMAIN/api/v1/suppression-list \
  -H "Authorization: Bearer fam_..." \
  -H "Content-Type: application/json" \
  -d '{
    "email": "contact@example.com",
    "channel": "email",
    "reason": "Unsubscribe request"
  }'
```

The suppression API accepts at least one of `contact_id`, `phone`, or `email`.
When `channel` is omitted, phone defaults to `voice` and email defaults to
`email`. Use `GET /api/v1/suppression-list?channel=sms` to list records that
block SMS. Restore one record with
`DELETE /api/v1/suppression-list/{id-or-identity}`.

REST scopes are `settings:read` / `settings:write` for the mode and
`suppression:read` / `suppression:write` for records.

## MCP

* `get_consent_mode` and `set_consent_mode`;
* `list_suppression_entries`;
* `add_suppression_entry`;
* `remove_suppression_entry` (restores consent and retains the audit trail).

All MCP results use the same public-payload sanitizer as the REST API.
