---
title: "10DLC rules for AI-generated text messages"
description: "AI-written texts are still A2P traffic: register the campaign, keep the agent's texts matching its samples, stop drift into marketing, re-register on change."
url: https://www.unitpost.com/blog/agents/10dlc-ai-generated-texts
section: Blog
updated: 2026-11-02
---
# 10DLC rules for AI-generated text messages

Texts an AI agent writes for a business are application-to-person (A2P) traffic, so the 10DLC rules apply unchanged: register the brand and a campaign with The Campaign Registry, and make sure what the agent sends matches the campaign's use case and sample messages. Keep the model inside templates, don't let an informational campaign pick up offers, declare links before the agent uses them, and register a new campaign when the use case changes.

## 10DLC rules for AI-generated text messages

> AI-written texts are still A2P traffic: register the campaign, keep the agent's texts matching its samples, stop drift into marketing, re-register on change.

Carriers don't ask who wrote a text. They ask who sent it, what it is for, and whether that matches what was registered. An AI agent makes the last question harder, because a model writes a slightly different text every time and has no idea what you told the carriers.

### Are AI-written texts A2P traffic?

Yes. The CTIA Messaging Principles (https://api.ctia.org/wp-content/uploads/2023/05/230523-CTIA-Messaging-Principles-and-Best-Practices-FINAL.pdf) separate consumer messaging, person to person, from everything else, and say that automation a business uses, in whole or in part, is not typical consumer operation (section 4.1.2). A text your agent writes and your system sends is a business message, whoever chose the words.

On a 10DLC number that means registration: a brand (your legal entity) and a campaign (the use case) with The Campaign Registry. TCR's overview (https://www.campaignregistry.com/wp-content/uploads/TCR-Intro-2026-v4_comp.pdf) says any business texting customers on 10DLC must register, including businesses that only send individual, non-marketing messages, and that all business messaging is A2P. Toll-free numbers go through toll-free verification instead, which asks for the same kind of information.

Neither process has an AI question. Both ask what you send.

### What does the registration commit you to?

A campaign registration describes your traffic in a handful of fields that carriers review:

- the use case, such as account notifications, customer care or marketing
- a description of the program and of how people opt in
- sample messages
- the replies to HELP and STOP
- content attributes: whether texts carry links, phone numbers or age-gated content

In Unitpost these live in a messaging program (`/sms/messaging-programs`): `message_type`, `sample_messages`, `help_message`, `stop_message`, `embedded_links`, `embedded_phones` and `age_gated`, plus a `recipe_id` such as `APPOINTMENT_REMINDERS` that fills in carrier-ready copy. Before a 10DLC campaign goes to review, Unitpost checks what carriers most often send back: your brand name in the samples and replies, a contact in the HELP reply, a STOP reply that says messages end, links or phone numbers in samples when the campaign says it has none, and two to five sub-use cases on a mixed campaign.

The samples are a promise about future traffic. Unitpost's SMS Messaging Policy puts it plainly: what you send must look like the sample messages and use case you registered.

### How do you keep an agent's texts matching the samples?

Don't ask the model to remember the registration. Make it hard to leave:

- Give the agent templates, not a blank body. It picks a template and fills the fields, and your code renders the text that goes to `POST /sms`.
- Start every text with your business name, as the samples do, and keep the opt-out line where the samples have it.
- Check the rendered text before sending: no links when the program says `embedded_links: false`, no phone numbers when it says `embedded_phones: false`, and a length cap so a reminder doesn't turn into a paragraph.
- Allow free text only where the registration covers it, such as answers inside a customer care conversation the person started, and keep those on topic too.

How to send appointment reminders by SMS from an AI agent (/blog/agents/ai-agent-sms-appointment-reminders) walks through this for one use case.

### How does an informational campaign drift into marketing?

One helpful sentence at a time. A reminder campaign is informational. Ask a model to make reminders friendlier and it may add "book your next visit this week and get 10% off". CTIA notes that adding a call to action such as a coupon code to an informational text may make it promotional. Now a text sent under a notification registration, to people who agreed to reminders, is marketing.

Know what Unitpost catches and what it doesn't:

- Every send has a `type`: `transactional` (the default) or `marketing`. Marketing needs express consent on record for the recipient and waits for the recipient's local quiet hours.
- A marketing campaign over a number registered for a non-marketing use case is refused with `422 use_case_mismatch`. A marketing text over a sender pool set up for transactional or verification traffic fails with `sender_use_case_mismatch`.
- A single text sent through the API is not compared with the registration, and a promotional text sent as `transactional` skips the consent and quiet-hours checks. The API trusts the `type` you send.

So the last guard is yours. Don't let the agent choose `type`: fix it per tool. A reminder tool sends `transactional` with template text. Anything promotional goes through a marketing campaign, over a marketing registration, to contacts with marketing consent on record.

### What about links and content filtering?

Links are where agent texts most often get filtered. Carriers filter public link shorteners because they hide the destination, and CTIA asks that a shortener use a web address dedicated to the sender and that a linked site identify its owner (section 5.3.2).

- Declare links in the registration (`embedded_links` and a sample link) before the agent sends any.
- Give the agent the exact URL. A model asked for "the booking link" will produce something plausible, and plausible isn't yours.
- Link to your own domain. Unitpost flags public shorteners such as bit.ly with a `link_shortener` warning. It doesn't block them, but carriers may.

Content is screened as well. Every outbound text is checked against carrier-restricted categories (sex, hate, alcohol, firearms and tobacco, plus neighbors such as gambling, cannabis and high-risk loans) before it is billed, and a blocked one is refused with `422 validation_error`. A sample of unique content sent through the API may also be reviewed by an automated model. Neither check is a permission: a text the screen didn't catch can still break your registration.

### What do you do when the agent's use case changes?

Register a new campaign. A 10DLC campaign's use case can't be edited after registration, so a different use case means a new campaign with its own samples. Common triggers with agents:

- reminders that should start carrying offers, which is marketing
- a support agent that starts sending order updates or one-time codes
- texts that will now carry links or phone numbers the old registration said they wouldn't

In Unitpost, create or duplicate a messaging program for the new use case. Writing a program never changes an existing registration, so the old campaign keeps working while the new one is reviewed. Then register it from the dashboard, or with a quote (`POST /sms/quotes` with product `ten_dlc_campaign`, a `brand_id` and the `messaging_program_id`) and its confirm. Confirming charges the workspace and needs the `sms:purchase` scope, which no key preset includes. Keep that scope off the agent's key and let a person approve the purchase.

TCR puts campaign review at one to four weeks. Until the new campaign is approved, the agent stays on the old use case. Consent may need to change too. CTIA treats an opt-in as belonging to the campaign it was collected for, and reminder consent isn't the express written consent that marketing needs.

> **Not legal advice:** This describes carrier and industry guidance and how Unitpost behaves. Confirm the rules for your traffic with counsel and with the reviewers' feedback on your registration.

## FAQ

### Do I have to tell carriers that my texts are written by AI?

The registration Unitpost files asks for the use case, a description, how people opt in, sample messages, the HELP and STOP replies and content attributes such as links. None of those fields asks how a text was written. Carriers review whether your traffic matches what you registered, so an agent's texts have to look like the samples whoever wrote them.

### Can one 10DLC campaign cover reminders and promotions?

A mixed campaign can, with two to five sub-use cases named and samples that show each kind of message. It doesn't merge consent: marketing texts in it still need express written consent from each recipient, and on Unitpost they still wait for the recipient's quiet hours.

### Can an AI agent answer customer replies with free text on 10DLC?

Yes, when the campaign covers it. Replies inside a conversation the person started fit a customer care use case. Keep the agent on the subject the person raised and on your own business: a support reply that turns into a promotion is the same drift as a reminder that does.

## Related

- [How to make an AI agent ask before it sends email](https://www.unitpost.com/blog/agents/ai-agent-approval-before-send): Which agent sends need a person's approval, client confirmation vs server-side controls, and a draft, preview, confirm flow with timeouts and an audit trail.
- [How should an AI agent handle bounces and complaints?](https://www.unitpost.com/blog/agents/ai-agent-bounces-complaints): What happens after a bounce or spam complaint, what an AI agent sees on the next send, and rules that stop it retrying or working around the suppression list.
- [Have an AI agent send you a weekly deliverability report](https://www.unitpost.com/blog/agents/ai-agent-deliverability-report): Read Unitpost sending stats and domain DNS health over MCP or the CLI, have a model summarize bounces, complaints and DNS issues, and email the team weekly.
