Here's the part of 10DLC registration nobody warns you about: the sample messages you paste into the campaign form aren't drafts. To the carrier reviewer, they're a contract. They describe the kind of traffic your number is allowed to send, and if what you type doesn't line up with your stated use case and your opt-in language, the whole campaign gets kicked back — sometimes with a one-line rejection reason that tells you almost nothing.
Full disclosure: I work for Ready, and we handle 10DLC brand and campaign registration in-app, so I've watched a lot of these rejections come back and a lot of resubmissions clear. The pattern is boringly consistent. It's almost never the "real" content of your texts. It's the placeholder samples, the missing opt-out line, and a mismatch between what your sign-up form promises and what your samples actually deliver.
The reviewer isn't reading your marketing — they're checking three alignments
A human (or increasingly, an automated first pass) looks at your campaign registration and checks whether three things agree:
- Use case ↔ samples. If you filed a "Marketing" campaign, the samples had better read like marketing. If you filed "Customer Care" or "Account Notification," a promo-sounding sample is a contradiction.
- CTA ↔ consent. The call-to-action you describe (how people opt in) has to match the opt-in language, and the samples have to be the thing people actually consented to receive.
- Samples ↔ carrier content rules. No SHAFT content (sex, hate, alcohol, firearms, tobacco), no misleading claims, and every sample that involves recurring messaging needs opt-out language.
Rejections happen at whichever of these breaks first. Fix that one and the rest usually pass.
Sample messages: the mistakes that get you kicked back
The single most common failure is a lazy placeholder. People type Test message or Hi {{name}}, thanks! into the sample field because it feels like a form field, not the actual thing being reviewed. Reviewers reject those because they can't verify what you'll send.
Before / after that clears review
| Rejected sample | Why it failed | Rewrite that passes |
|---|---|---|
Hi, thanks for signing up! | No brand, no opt-out, no indication of what the traffic is | Acme Dental: Your appointment is confirmed for Tue 3/12 at 2pm. Reply C to confirm or call 555-0100. Reply STOP to opt out. |
Get 20% off now!!! | Reads spammy, no brand, no consent trail, no STOP | Acme Coffee: Flash sale — 20% off beans today only with code BEAN20. Shop: acme.co/sale. Msg&data rates may apply. Reply STOP to end. |
Your code is 123456 | Fine content, but filed under a Marketing campaign — mismatch | Keep the sample, but file it under a 2FA / Account Notification use case instead |
We miss you! Come back for a deal 🎁 | Emoji plus vague "come back" with no opt-in path described | Acme Store: We saved your cart! Complete checkout and save 10%: acme.co/cart. Reply STOP to unsubscribe. |
Notice what the passing versions share: a brand name up front, a concrete action, and an opt-out on anything recurring. Reviewers are looking for exactly those signals. Give them all three and there's nothing left to reject.
A related trap: filing a Marketing campaign for what's actually transactional traffic (or vice versa). That's its own quiet disaster — it passes review but throttles delivery later. We wrote that up separately in Registering a 'Marketing' Campaign for Transactional Texts Is Why Your Delivery Silently Drops.
Match your samples to the use case you actually filed
The registration form asks you to pick a use case, and every sample you give has to belong to that bucket. Two or three samples that all read as the same type of message is the safe move. Mixing a promo blast and an OTP code into one campaign is a fast rejection — and even if it slipped through, carriers would filter the mismatched traffic.
If you genuinely send both promotional and transactional messages, that's two campaigns, often two numbers. SaaS teams hit this constantly with 2FA codes and marketing living on the same number; the split is covered in Sending 2FA Codes and Promo Blasts From the Same Number Gets Both Filtered.
Not sure which use case to file? The picking guide walks through it: Matching Use-Case to What You Actually Send.
Opt-in language is where more campaigns die than the samples
The samples get the attention, but the call-to-action and consent description kill just as many registrations. Reviewers want to see, in plain language:
- Where people opt in (website form, checkout checkbox, keyword-to-number, paper form at the counter)
- What they're agreeing to receive (message type and rough frequency)
- The required disclosures: "Message and data rates may apply," "Message frequency varies," and how to opt out (STOP) and get help (HELP)
Before / after opt-in description
Rejected:
"Customers give us their number and we text them."
That tells the reviewer nothing verifiable. No source, no consent, no disclosures.
Passes:
"Customers opt in at checkout on acme.co by checking an unchecked box that reads: 'Text me order updates and promotions from Acme. Msg frequency varies. Msg & data rates may apply. Reply STOP to cancel, HELP for help.' A link to Terms and Privacy Policy appears next to the checkbox."
The second version names the source, quotes the exact consent text, and shows the disclosures. There's nothing for the reviewer to guess at — and the CTA now clearly matches the samples.
One nuance that trips up ecommerce specifically: browse-abandonment triggers need a consent path that cart abandonment doesn't, because the person may never have handed over their number with that intent. Worth a read if you run either flow: Browse-Abandonment Texts Need a Consent Path Cart Abandonment Doesn't.
CTA-to-consent alignment: the mismatch that reads as bait-and-switch
This is the subtle one. Your opt-in says people signed up for appointment reminders. Your samples include a 20%-off promo. To a reviewer, that's consent for one thing being used for another — and it's exactly the pattern spam complaints follow. Either:
- Narrow your samples to match what people actually consented to, or
- Broaden your opt-in language to explicitly include promotions ("order updates and promotions"), and file the right use case for it.
Pick one and make the whole registration internally consistent. A campaign where the CTA, the consent text, the use case, and the samples all describe the same traffic clears review the fastest.
The SHAFT and formatting rejections you can pre-empt
A few mechanical things reviewers reject on sight:
- SHAFT content — anything touching sex, hate, alcohol, firearms, or tobacco needs age-gating and often a specialized use case; many carriers block it outright. If your rejection reason literally says "SHAFT," here's the rewrite path: Your 10DLC Campaign Got Rejected for 'SHAFT'.
- Public URL shorteners — a
bit.lylink in a sample can get flagged because shared shortener domains carry other people's spam reputation. Use your own domain. - ALL CAPS and excessive punctuation —
FREE!!! ACT NOW!!!reads as spam to filters and reviewers alike. - Missing STOP on any recurring-message sample.
Why in-app registration cuts the rejection loop short
When you register through a raw CPaaS API, a rejection often means waiting days, re-editing a form you barely remember, and resubmitting into the same queue — with A2P onboarding stretching two to four weeks total.
Ready handles brand and campaign registration inside the app, with the sample-message and opt-in fields laid out so the alignments above are hard to get wrong, and most approvals land same-day. The carrier fees are the standard ones — roughly ~$10/mo per brand and ~$20/mo per campaign — billed transparently, not marked up. If a rejection does come back, you're editing the exact fields in context and resubmitting, not restarting. The full timeline breakdown is here: Most A2P Onboarding Takes 2–4 Weeks — Here's Every Step That Compresses Into a Same-Day Approval.
None of this makes you immune to a rejection — carriers change their standards, and edge cases exist. But getting the three alignments right the first time is the difference between a same-day approval and a week of back-and-forth.
The practical takeaway
Write your samples as real messages, not placeholders: brand name up front, one clear action, STOP on anything recurring. Make the opt-in language quote the exact consent text and name the source. Then check that all four pieces — use case, CTA, consent, and samples — describe the same traffic. When they agree, there's nothing left for a reviewer to reject.
If you'd rather fill out fields that guide you toward passing samples instead of guessing at a blank form, you can start on Ready with 2,500 free credits and no card, or read more about how the messaging and compliance stack fits together on the product page.