# Compliance and suppressions

Canonical URL: https://texttree.ai/en/docs/compliance-and-suppressions/
Markdown URL: https://texttree.ai/en/docs/compliance-and-suppressions.md
Page type: docs
Translation status: approved
Legal status: not_required

## Summary

Current TextTree SMS eligibility model for suppressions, STOP events, compliance readiness, and spend gates.

## Source content

# Compliance and suppressions

TextTree V1 uses a suppression-based SMS eligibility model.

Outbound SMS does not require a global `granted` consent record before enqueue. Sends are allowed
by default unless one of the current gates blocks them.

## Send gates

Every one-off UI send, developer API send, MCP-triggered send, and campaign delivery checks:

- workspace suppression for the recipient phone number
- campaign suppression for campaign deliveries
- spend limit and ledger reservation
- sender number and provider readiness
- payload validation and provider errors

## Workspace suppressions

Workspace suppressions block all outbound sends to a phone number in that workspace.

They can be created by:

- provider STOP/opt-out webhooks
- manual operator action in Workspace Settings

Workspace owners and admins can remove a suppression only when their compliance process says the
recipient may receive SMS again.

## Campaign suppressions

Campaign suppressions block only one campaign's rendered deliveries for a phone number.

They do not block:

- one-off sends
- developer API sends
- MCP sends
- other campaigns

Campaign owners, admins, and operators can manage campaign opt-outs from the Campaign page.

## Legacy consent/contact metadata

The `contact_consents` data model still exists as contact metadata and history. Message responses
may include a `consent_status` value such as `missing`, `granted`, or `opted_out`.

That field is informational in V1. It is not the required global send gate. Workspace and campaign
suppressions are the active opt-out enforcement model.

## Provider STOP handling

Signed provider opt-out events create or update workspace suppressions. This keeps STOP behavior
durable and prevents future sends before any provider call is made. TextTree also rechecks
workspace and campaign suppressions immediately before final provider dispatch.

The webhook event is persisted first, then reconciled asynchronously through Oban. Duplicate
provider events are safe because suppression creation is idempotent for the same workspace and phone
number.

## Compliance readiness

Compliance readiness is separate from any global consent-grant requirement. Before live traffic,
operators should verify:

- billing and spend limits are configured
- sender numbers are registered or connected
- workspace suppressions are respected
- campaign opt-outs are isolated to the correct campaign
- provider webhooks are signed with freshness timestamps and operationally replayable after ingest
- test-mode sends pass before switching to live mode
