Start here
1. Read the rejection reason before changing anything
Twilio / TCR rejections come back as a category — vague description, content violation, opt-in not evidenced, use-case mismatch — not a line-by-line edit list. Find the rejection code in the Twilio Console, map it with the rejection reason guide, then choose the repair path below. Guessing burns a resubmission cycle.
Vague description
2. Rewrite a vague campaign description
"We send marketing messages to our customers" gets rejected. State the audience, the message types, where people opt in, and quote the consent text they see — enough for a reviewer to picture the exact message without visiting your site.
Sample messages
3. Fix sample messages
Each sample should read like a real send: brand prefix, specific content, a frequency hint, msg&data-rates, and Reply STOP / HELP on promotional traffic. Generic stand-ins read as placeholders. See the sample message checklist for bad-vs-good examples.
Opt-in evidence
4. Evidence your opt-in flow
Reviewers want to see where consent is captured: name the exact URL, quote the consent string verbatim, and confirm the box is unchecked by default. "Users sign up on our website" is a top rejection cause. The opt-in flow examples show what passes.
Privacy & disclosures
5. Repair privacy policy & SMS disclosures
Host a public privacy policy that covers SMS opt-in data and states you don't sell or share numbers for marketing. A policy that 404s, sits behind a login, or never mentions SMS counts as missing. The privacy policy requirements list the exact language carriers look for.
Crawlable URLs
6. Make every submitted URL crawlable
Every submitted URL — opt-in page, privacy policy, terms — must be publicly reachable with the SMS language visible without login. A 404, a login wall, or a page that doesn't describe SMS rejects the campaign even when the description is perfect.
Use case & content
7. Resolve use-case mismatch & disallowed content
Declare the use case that matches most of your traffic — MARKETING with transactional samples (or the reverse) is a mismatch rejection. Flag age-gated content, lending terms, or embedded links honestly; hidden attributes are what trigger content rejections. If you truly send two kinds of traffic, register two campaigns.
Final pass
8. Run a final pre-resubmission pass
Before you resubmit, run the full campaign back through the scanner and walk the resubmission checklist. An unchanged resubmit usually comes back as a faster rejection, not a faster approval — fix everything in one pass.