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

# Do-not-call requests

> Handle do-not-call requests with Retell AI: the voice agent confirms once, ends the call, and marks the contact so later calls and campaigns skip the number.

With **DNC Detection** on, your agent recognizes when a caller asks not to be called again, confirms the request once, and ends the call. Retell then marks the caller's contact as do-not-call, so outbound calls and campaigns that honor DNC skip that number.

## When to use it

Turn it on for any agent that places outbound calls to people who can ask you to stop calling, such as sales outreach, collections, and appointment reminders. Without it, a "please stop calling me" is only as reliable as your prompt, and nothing records the request for the next call.

For example, a lead in a reminder campaign says "take me off your list." The agent confirms, says goodbye, and ends the call. The campaign stops calling that lead, and every other campaign with internal DNC on skips the number too.

DNC Detection works on voice agents that use a Retell LLM or a Conversation Flow (including flex mode). It doesn't apply to custom LLM agents or chat agents. For SMS, see [SMS opt-out keywords](#sms-opt-out-keywords).

## Turn on DNC detection

<Steps>
  <Step title="Open the agent's settings">
    Open your agent, then expand **Security & fallback settings**.
  </Step>

  <Step title="Enable DNC Detection">
    Turn on **DNC Detection**. It's off by default.
  </Step>
</Steps>

To set it through the API, pass `enable_dnc_detection: true` when you [create](/api-references/create-agent) or [update](/api-references/update-agent) the agent.

## How does the agent handle a do-not-call request?

When the caller asks not to be called or contacted again, in any language, the agent doesn't hang up right away. It asks once:

> Understood. Would you like us to stop making calls to this number?

* **If the caller confirms**, the agent says "I'll add your number to our do-not-call list. Thank you. Goodbye." and ends the call. The call's `disconnection_reason` is `user_requested_dnc`.
* **If the caller declines or it was a misunderstanding**, the conversation continues where it left off.

The agent says both lines in the caller's language. Being busy, asking for a callback, saying they're not interested, or saying goodbye doesn't count as a do-not-call request.

In a Conversation Flow, Retell adds the request handling as a global node, so it works from any node in the flow.

## What happens after the call

For a phone call that ends with `user_requested_dnc`:

* **The contact is marked.** Retell sets `do_not_call` to `true` on the [contact](/features/contacts) for the caller's number (the `to_number` of an outbound call, the `from_number` of an inbound call), and creates the contact if it doesn't exist. Web calls have no phone number, so no contact is marked.
* **Your CRM is updated.** With a [CRM connected](/integrations/crm-overview), the change syncs out like any other contact edit.
* **The campaign stops.** If the call came from a campaign, the lead gets the do-not-call outcome and no further attempts are scheduled.

## Skip do-not-call contacts

Marking a contact doesn't block calls by itself. These places check the flag:

| Where | How to turn it on |
| - | - |
| [Create Phone Call](/api-references/create-phone-call) | Pass `honor_internal_dnc: true`. The request fails with a 400 error, `This number can't be called because the contact is on the do-not-call list`, when the contact for `to_number` is marked do-not-call. Defaults to `false`. |
| [Create SMS Chat](/api-references/create-sms-chat) | Pass `honor_internal_dnc: true`. The request fails with a 400 error, `This number can't be messaged because the contact is on the do-not-call list`, when the contact for `to_number` is marked do-not-call. Defaults to `false`. |
| **Make Outbound Call** in the dashboard | The **Honor DNC** switch, on by default. |
| Campaigns | Turn on internal DNC in the campaign's DNC settings to skip contacts marked do-not-call. |

[Batch calls](/deploy/make-batch-call) and inbound calls don't check `do_not_call`.

## SMS opt-out keywords

When someone replies to an SMS with a single opt-out keyword, Retell marks their contact as do-not-call and ends the chat. The keywords are `STOP`, `STOPALL`, `UNSUBSCRIBE`, `CANCEL`, `END`, `REVOKE`, `OPTOUT`, and `QUIT`, matched without case and with trailing `.` or `!` allowed. A keyword inside a longer message doesn't count. This applies to your own SMS-enabled numbers, not the shared [SMS-approved Retell numbers](/deploy/enable-sms#option-3-use-an-sms-approved-retell-number-no-a2p-required) used for in-call SMS.

If a message fails because the recipient has already opted out with the carrier, Retell marks the contact the same way.

## FAQ

<AccordionGroup>
  <Accordion title="Can I change what the agent says?">
    No. The confirmation question and the goodbye are fixed, and the agent translates them into the caller's language.
  </Accordion>

  <Accordion title="How do I take a number off the do-not-call list?">
    Open the contact on the [Contacts](/features/contacts) page and set **Do Not Call** to false, or update the contact through the API. Calls, chats, CRM syncs, and imports only ever set the flag to true, so a manual change sticks.
  </Accordion>

  <Accordion title="Does a do-not-call contact block inbound calls?">
    No. The flag only affects outbound calls, SMS, and campaigns that honor DNC.
  </Accordion>

  <Accordion title="My agent already has a tool named end_call_dnc. What happens?">
    Retell uses `end_call_dnc` for this feature. If your agent already has a tool with that name, DNC Detection is skipped for that agent's calls so your tool keeps working. Rename your tool to use DNC Detection.
  </Accordion>
</AccordionGroup>

Related: [Contacts](/features/contacts), [call disconnection reasons](/reliability/debug-call-disconnect), and [handle voicemail and IVR](/build/handle-voicemail).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.