10DLC Campaign Rejection Reasons & Fixes
Roughly 90% of 10DLC rejections trace to a handful of fixable gaps. Here's every common cause, its code, and the exact fix — before you burn another $15.
Campaign vetting is done by a DCA (Direct Connect Aggregator), typically takes ~3–5 business days, and costs $15 per submission. The painful part: each rejection-and-resubmission costs another $15, and DCAs do not credit partial fixes — you must resolve every cited issue before resubmitting.
Stuck on a specific code or symptom? Use the Rejection-Reason Troubleshooter to jump straight to the cause and fix.
The rejection-reason → fix table
Exact numeric codes shift over time and vary by platform (Twilio’s 30xxx codes vs raw TCR codes), so confirm against your provider’s live console. The causes and fixes below are stable.
| # | Rejection cause | Code (approx.) | Fix |
|---|---|---|---|
| 1 | Opt-in language doesn't match sample content | ~30909 / 30916 | Align the CTA wording, the use case, and the message samples so they describe the same program. |
| 2 | Marketing consent bundled with transactional or general T&C/privacy | 30913 / 30923 | Make the SMS marketing consent standalone and optional — its own unchecked checkbox. |
| 3 | Pre-checked or missing consent box | 30925 / 30931 | Add an unchecked, skippable SMS-consent checkbox the user must actively tick. |
| 4 | Missing CTA disclosures | 30924 | Add message type, frequency, "Msg & data rates may apply", and STOP/HELP to the opt-in. |
| 5 | Consent flow unverifiable / behind a login / on paper | 30909 / 30921 | Supply a hosted screenshot or document link of the opt-in for reviewers. |
| 6 | Privacy policy missing / broken / 404 / login-gated | 30932 + brand codes | Publish a public, working privacy policy and link it from the website and opt-in form. |
| 7 | Privacy policy shares mobile data for marketing | 30932 | Add the clause: SMS opt-in data and consent are never shared/sold to third parties for marketing. |
| 8 | Brand–website mismatch / insecure / broken / form-only / under construction | 30919–30922 | Match the registered legal name, serve HTTPS, and add a real business-description page. |
| 9 | DBA / legal-name or sole-prop / EIN mismatch | 30914 / 30915 / 30918 | Reconcile the brand registration to exactly match IRS/EIN records. |
| 10 | Personal email (gmail) or unauthorized contact | 30971 / 30972 | Use a business-domain email and an authorized representative. |
| 11 | Samples copied/identical, no brand name, link shorteners, or HTTP URLs | 30911 + high-risk codes | Write distinct samples, include the brand name, and use full HTTPS URLs only (no bit.ly, no bare HTTP). |
| 12 | Prohibited content (SHAFT, cannabis/CBD, high-risk loans, debt, gambling, crypto, MLM) | 30940–30964 | Usually non-fixable for that use case — remove the content. It cannot be registered. |
Sample-message hygiene
A large share of rejections come from sloppy sample messages. Before you submit:
- Use 2–5 distinct samples — never duplicate or near-duplicate text.
- At least one sample must contain the brand name; at least one should include opt-out language (“Reply STOP to cancel”).
- Use
[bracketed]placeholders for variable fields (Hi [name], your order [#] shipped). - Full HTTPS URLs only — no
bit.ly/link shorteners, no barehttp://. - If a sample contains a link or phone number, set
has_embedded_links/has_embedded_phoneto match. Mismatches get flagged. - A Mixed campaign needs at least one promotional and one transactional sample.
The three things that align — or you fail
The single most common root cause is misalignment. Your campaign description, your use case, your sample messages, and the opt-in flow on your website must all describe the same program. If your samples look like marketing but your use case says “Account Notification”, you’ll be rejected.
- Consent & opt-in — get the CTA right at the source.
- Privacy policy requirements — the #1 silent rejection cause.
- Campaign registration — field-by-field requirements.