Skip to main content

Do Not Contact (DNC)

The DNC system prevents messages from being sent to excluded contacts. It includes manual management, automatic opt-out detection, and pre-send blocking.

Features

  • Manual add/remove via UI or API
  • Auto opt-out: Replies containing STOP, UNSUBSCRIBE, OPT OUT, REMOVE ME, or DO NOT CONTACT are automatically added. Carrier keywords (STOP, STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT) sent to your Telnyx or Twilio fallback number are added too
  • dnc.added webhook and GET /api/dnc?since= so you can stop the same contact on your other channels
  • Pre-send blocking: Every message is checked against DNC before sending
  • E.164 normalization: Phone numbers are normalized for consistent matching

UI

Navigate to /dnc (shield icon in sidebar):
  • Search and filter DNC entries
  • Add by phone or email
  • Remove entries
  • Paginated table view

API

Full reference: List / check · Add · Bulk add · dnc.added webhook. GET, POST and PATCH (bulk add, up to 10,000) accept a workspace API key (Authorization: Bearer tuco_…) or a dashboard session. Removing an entry, and importing from a Tuco list or tag, are dashboard-only.

List DNC entries

Without since, entries are newest first. source tells you how the entry got there: keyword-STOP (or another keyword) for an opt-out reply, api for POST /api/dnc with an API key, api-bulk for PATCH /api/dnc, manual-ui for the dashboard, csv-import / list-import / tag-import for bulk imports, and the CRM name for GoHighLevel and HubSpot syncs.

Poll for new opt-outs

Store the addedAt of the last entry you processed and pass it as since:
since is inclusive, so the last entry you saw comes back again. Dedupe by id. When hasMore is true, read the next page. To hear about opt-outs immediately instead of polling, subscribe to the dnc.added webhook.

Check one number

listed is true if the number is on the list. The number can be in any common format; + must be URL-encoded as %2B.

Add to DNC

The phone is stored in E.164 (+19045551234). Returns { "ok": true, "id": "…" }, or 409 if the contact is already on the list. A successful add fires dnc.added.

Remove from DNC

Dashboard only:
API keys are rate limited to 120 requests per minute per workspace (429 with Retry-After).

Debugging

Blocked sends are recorded internally. Review a contact’s DNC status and blocked-send history from the Leads view or the API.