Most 10DLC rejections don't come from your sample messages or your use-case pick. They come from the field almost nobody proofreads: the opt-in language on your form. Carriers read the exact words next to your checkbox, and if those words are missing four specific elements, they bounce the campaign — sometimes without telling you which element was the problem.
Full disclosure: I work for Ready, an SMS platform where you register 10DLC in-app and most approvals land same-day. That means I've watched a lot of consent language go through the pipe and seen exactly which phrasings sail and which get kicked back for a rewrite. This is the teardown.
What the carrier is actually checking
When you submit a 10DLC campaign, you supply a URL or screenshot of where consent happens, plus a text field describing the opt-in flow. A reviewer (part human, part automated screening) looks for four things in the consent language itself:
- Program/brand name — who is sending.
- Message type disclosure — marketing, alerts, reminders, etc.
- Frequency and rate disclosure — "message frequency varies," "msg & data rates may apply."
- STOP/HELP + terms/privacy — the opt-out method and links to Terms and Privacy Policy.
Miss any one and you're likely to get a rejection or a "pending — more info needed" that stalls you a day or two. The fix is almost always a wording change, not a product change. (If your rejection was about the sample message instead, that's a different problem — see how to write sample messages that pass.)
The consent line that clears
Here's a checkout/form consent line that hits all four elements. This is close to the pattern I'd submit without hesitation:
☐ By checking this box, I agree to receive recurring marketing text messages (e.g. cart reminders, promotions) from Acme Coffee at the number provided. Consent is not a condition of purchase. Msg frequency varies. Msg & data rates may apply. Reply STOP to unsubscribe, HELP for help. See Terms and Privacy Policy.
Notice what it does:
- Names the brand ("Acme Coffee") so the number ties to a real, registered entity.
- Says "recurring marketing text messages" — the message type is explicit, and it matches what you'd register as a marketing use case. If you register marketing but your consent line says "appointment reminders," that mismatch is a rejection trigger. (More on that in matching use-case to what you actually send.)
- "Consent is not a condition of purchase" — a TCPA-required phrase whenever consent sits next to a transaction.
- Frequency + rates + STOP/HELP + links, all present.
The three phrases that get you rejected
1. "By signing up, you agree to receive texts" — with no checkbox
The problem isn't the words, it's the absence of an affirmative action. A phone field with buried fine print is not consent. Carriers want an unchecked box the user actively ticks, or a keyword they text in. Pre-checked boxes are also a rejection — and in some jurisdictions, illegal.
If your opt-in is a "text us your number" sign at the register, that's the same gap in physical form — the POS opt-in fix is one line.
2. "We may occasionally send you offers and updates"
"May" and "occasionally" read as vague to a reviewer, and worse, they blur message type. "Offers and updates" mixes marketing with transactional, which means one opt-in is trying to cover two consent categories that legally live apart. If you send both promos and reminders, you either register two campaigns or write consent that explicitly covers both — you can't hand-wave it. This exact blur is why reminders sent under a marketing registration get throttled.
3. "Enter your number to get your discount code"
This one's sneaky because it converts great. But it makes texting a condition of getting the discount, which violates the "consent is not a condition of purchase" rule. Carriers flag incentive-gated opt-ins where the only path to the reward is agreeing to marketing texts. The fix: offer the code regardless, and make the SMS opt-in a separate, optional checkbox.
Accept vs reject, at a glance
| Consent element | Passes | Gets rejected |
|---|---|---|
| Action | Unchecked box user ticks; keyword text-in | Pre-checked box; phone field alone |
| Brand | Named ("from Acme Coffee") | "from us" / no name |
| Message type | "recurring marketing texts" | "offers and updates" (mixed) |
| Frequency | "Msg frequency varies" | omitted |
| Rates | "Msg & data rates may apply" | omitted |
| Opt-out | "Reply STOP to unsubscribe" | omitted, or STOP-only with no HELP |
| Links | Terms + Privacy both linked | one or neither |
| Incentive | Discount given regardless | "enter number to get code" |
The trigger-link trap (GHL users, read this)
A common GoHighLevel mistake: treating a trigger link click as consent. It isn't. Clicking a link in an email or on a page doesn't create an SMS opt-in record with the four disclosures attached, and if a carrier audits your consent source, a trigger link won't hold up. It can void your registration. If you're on GHL, the trigger-link vs keyword consent breakdown walks through the compliant path.
Ready's native GHL integration syncs inbound and outbound both ways and maps per sub-account, so keyword opt-ins captured in Ready flow into the right location's consent record — but the consent still has to be real. The tooling records the attestation; it can't invent permission that never happened.
Transactional consent is not marketing consent
If you registered a transactional campaign — order confirmations, shipping updates — the consent bar is lower because the customer is asking for the service. But that consent does not stretch to cover a "20% off your next order" upsell bolted onto the shipping text. That upsell is marketing, and it needs marketing consent. The clean way to bridge them is a one-tap upgrade offer, covered in the post-purchase consent upgrade. Cross that line without it and you're sending marketing to a list that never opted into marketing — the exact thing STOP-rate spikes and complaints get traced back to.
Before you hit submit: a 60-second checklist
Run your consent language against this. If every box is checked, first-submission approval is the likely outcome:
- [ ] There's an affirmative action (checkbox or keyword), not just a phone field.
- [ ] The brand/program name appears in the consent text.
- [ ] Message type is stated and matches your registered use case.
- [ ] "Msg frequency varies" (or a specific frequency) is present.
- [ ] "Msg & data rates may apply" is present.
- [ ] "Reply STOP to unsubscribe, HELP for help" is present.
- [ ] Terms and Privacy Policy are both linked.
- [ ] "Consent is not a condition of purchase" appears if it sits by a transaction.
- [ ] The consent URL you submit actually shows the checkbox live (screenshot mismatches get bounced).
That last one catches more people than you'd think — the reviewer visits your submitted URL, and if the checkbox isn't visible there (it's behind a login, or on a different page), you get a "cannot verify" bounce.
Once it's approved, the work isn't done
Passing registration means your campaign can send. It doesn't mean every message will deliver. Content-level filtering still applies after approval — a clean registration with spammy message content still gets silently filtered. And STOP handling has to be airtight going forward: Ready honors STOP/UNSUBSCRIBE automatically and propagates the opt-out so the contact can't be re-messaged across campaigns, which keeps your complaint rate — and your sender reputation — intact.
The practical takeaway
Consent language is the cheapest thing to get right and the most common thing to get wrong. Copy the passing example above, swap in your brand, confirm the message type matches your registered use case, and make sure the live page shows the checkbox. That combination is what turns a two-week rejection loop into a same-day approval.
If you'd rather register 10DLC in the same place you send — brand and campaign both in-app, most approvals same-day — you can start on Ready with 2,500 free credits and no card. And if you just want to see how the registration flow and pricing shake out first, the details are on the product page.