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

# Outreach audit & consent records

> How RevDesk captures consent metadata, attaches disclosures, and persists an audit trail for outbound communications.

RevDesk records what disclosures were attached to every outbound call and SMS, plus the per-channel opt-in state for every contact, so you can produce an audit trail on demand.

***

## What RevDesk handles for you

Several compliance steps are run automatically on every outbound action. You don't need to configure or maintain them:

| Item                             | What RevDesk does                                                                                                                                                                                                          | Where it shows up                                                |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| **National DNC scrubbing**       | Every outbound contact is checked against the federal Do-Not-Call registry plus your workspace opt-out list before a call or SMS leaves the platform. Hits are blocked and logged.                                         | Compliance Center → Active disclosures → "DNC scrubbing"         |
| **TCPA quiet-hours enforcement** | Calls outside 8am–9pm in the recipient's local time are deferred. State-specific rules (FL/MD/MA/OK/WA/WY 8am–8pm, AL/LA/MS/UT/SD/RI Sunday ban) are layered on top.                                                       | Compliance Center → Active disclosures → "Calling hours"         |
| **Recording disclosure**         | Default outbound greeting includes "this call is being recorded" in the recipient's language (50+ localized). Two-party-consent state recipients get an extra compose-time warning if your greeting is missing the phrase. | Compliance Center → Active disclosures → "Recording disclosure"  |
| **SMS STOP append**              | First outbound SMS to each contact auto-appends "Reply STOP to opt out." Inbound STOP/UNSUBSCRIBE/END/CANCEL/QUIT keywords are honored automatically and suppress all further sends.                                       | Compliance Center → Active disclosures → "SMS STOP instructions" |
| **Disclosure attestation log**   | Every outbound call and SMS persists `disclosureAttested` / `stopInstructionsAttested` plus a two-party-state flag at send time.                                                                                           | Compliance Center → Last 30 days + "Export audit"                |

If you see a **"We'll do it"** badge anywhere in the Compliance Center, that means the underlying check is one of the items above. It is already configured, always-on, no action required.

***

## Where to find it

Open the **Compliance Center** widget on the Outreach page. It surfaces:

* The workspace's TCPA/DNC acknowledgement state.
* Active disclosures (recording, SMS STOP, TCPA quiet hours, DNC scrubbing).
* Per-active-campaign compliance checkmarks.
* Consent record counters and recent events.
* 30-day disclosure attestation rates.
* "Export full audit" CSV.

***

## Consent record model

For each contact, RevDesk maintains per-channel state:

```
voiceOptIn / voiceOptedInAt / voiceConsentSource / voiceConsentSender / voiceConsentUseCase
smsOptedIn / smsOptedInAt / smsConsentSource / smsConsentSender / smsConsentUseCase
emailOptIn / emailOptedInAt / emailConsentSource / emailConsentSender / emailConsentUseCase
firstInboundCallAt / firstInboundSmsAt / firstInboundEmailAt
```

### Sources of consent

| Source                                         | When it's written                                                                    |
| ---------------------------------------------- | ------------------------------------------------------------------------------------ |
| `manual_admin`                                 | Admin captured consent via the Capture Consent dialog on the contact-detail page.    |
| `csv_upload`                                   | Consent metadata supplied in an inbound CSV import.                                  |
| `crm_sync`                                     | Consent provided by an upstream CRM sync.                                            |
| `inbound_initiated`                            | Set automatically when a contact initiates an inbound call or SMS to your workspace. |
| `web_form`, `verbal_call`, `partner_api`, etc. | Free-form values you supply.                                                         |

### Capture via API

```ts theme={null}
trpc.viewer.contacts.captureConsent.mutate({
  contactId: "...",
  channel: "voice",
  optedIn: true,
  source: "verbal_call",
  sender: "user:42",
  useCase: "sales_followup",
});
```

***

## Disclosure attestation

Every outbound `PhoneCall` row records:

* `disclosureAttested`: true when the live greeting includes a recording-disclosure phrase (English variants and 50+ localizations).
* `disclosureText`: the disclosure phrase actually attached.
* `twoPartyStateAtCallTime`: true when the recipient's area code maps to an all-party-consent state (CA, CT, DE, FL, IL, MA, MD, MI, MT, NV, NH, OR, PA, WA).

Every outbound `Message` row records:

* `stopInstructionsAttested`: true when the body contains STOP / opt-out instructions (auto-appended by `maybeAppendOptOut` on the first message per contact, or already present in the body).

These columns are written at send time rather than derived from later log scans, so the audit reflects exactly what the recipient saw or heard.

***

## Audit export

The Compliance Center widget's "Export full audit" button calls `viewer.compliance.exportOutreachAudit` and returns a CSV containing:

```
occurredAt, channel, direction, contactId, contactName, contactPhone, toNumber, fromNumber,
senderUserId, disclosureAttested, disclosureText, stopInstructionsAttested,
twoPartyStateAtCallTime, voiceOptIn, voiceConsentSource, voiceConsentSender, voiceConsentUseCase,
smsOptedIn, smsConsentSource, smsConsentSender, smsConsentUseCase,
firstInboundCallAt, firstInboundSmsAt
```

Default window is the last 30 days; the API accepts `since` / `until` parameters for arbitrary ranges. Records are scoped to your accessible teams only.

***

## Related

* [Compliance & Regulations](/getting-started/features/compliance)
