Executive Summary
TCR error codes and Campaign rejection codes tell you why a Brand or Campaign failed review. They are not mystical—most cluster around identity mismatches, website/privacy failures, weak message_flow, sample problems, or use-case mismatches. This guide explains how to read codes, a remediation decision framework, deep focus on privacy failures such as 9108, prevention tactics, and checklists. Exact code catalogs differ by CSP UI; always use the code and plain-language reason your provider returns.
Short answer: Treat TCR rejection codes as a queue item with owner, root cause, fix, and resubmit verification—not a blind retry. For privacy failures (including 9108-class issues), fix the public Privacy Policy SMS language and URL accessibility first, then resubmit through your CSP.
Who This Is For / Who It Is Not For
Who this is for: Messaging ops, compliance, and agency teams fixing failed filings.
Who this is not for: Anyone seeking a guarantee that one edit yields instant approval, or invented “most common code percentages.”
Definitions
| Term | Meaning |
|---|---|
| Rejection code | Machine/human code explaining Campaign/Brand failure |
| DCA / vetting | Downstream review steps in some CSP paths |
| 9108-class | Privacy policy not compliant / missing SMS language themes |
| Message_flow failure | Opt-in story missing, vague, or mismatched to reality |
| Sample failure | Samples missing Brand, mismatched use case, or low quality |
| Resubmission | New review cycle after fixes—may incur fees (CSP-specific) |
How to Read a Rejection
- Capture the raw code + provider message + timestamp.
- Classify: identity, website, privacy, consent/flow, samples, use case, content policy.
- Reproduce the failure (open URLs in private browser).
- Fix root cause; avoid drive-by edits.
- Update packet; resubmit once.
- Log outcome for pattern analysis.
How to Fix TCR Campaign Rejection Error Codes, Step by Step
Every rejection follows the same loop. You diagnose and repair the packet; your Campaign Service Provider (CSP) resubmits it. MyTCRPlus does not file with The Campaign Registry and does not send messages.
- Copy the exact code and text from your CSP portal or email. Twilio-hosted campaigns show a 30xxx code; other CSPs pass the TCR or carrier code through.
- Look the code up in the TCR Rejection Code Fix Directory or paste it into the Rejection Remediation Tool. Each code page names the cause, the field to change and the evidence reviewers expect.
- Fix the asset, not only the form field. If the code points at the website, privacy policy or opt-in page, change the live page first, purge any CDN cache and load it in a private window.
- Re-check related fields. A privacy fix often also needs the campaign description, message flow and sample messages to match. Run the SMS Message Validator on the samples and the Consent Language Validator on the opt-in text.
- Resubmit once, through the same CSP. Do not create a duplicate campaign; duplicates can trigger their own rejection codes and extra vetting fees.
- Log the change. Record the code, the fix, the date and the resubmission ID so a second rejection can be compared against the first.
Category Table
| Category | Typical symptoms | First checks |
|---|---|---|
| Identity / EIN | Brand failed | Legal name vs CP 575; tax ID format |
| Website | Unreachable, parked, login | HTTPS live; related to Brand |
| Privacy | 9108 / Twilio 30908 themes | Public SMS section; non-sharing; STOP |
| Message flow | Vague opt-in | List every real method + URLs |
| Samples | No Brand name; promo in care | Rewrite 2–5 honest samples |
| Use case | Wrong enum | Align content to Campaign type |
| Content policy | Forbidden categories | Remove or change program |
How to Fix TCR Rejection Code 9108 (Privacy Policy)
MyTCRPlus documents that 9108 generally means the Privacy Policy URL missing, unreliable, or lacking required SMS-related language—especially mobile-number/SMS consent non-sharing for third-party marketing and program/opt-out description including STOP (9108 guide). Twilio error 30908 similarly flags compliant privacy policy requirements during campaign vetting.
Remediation:
- Confirm URL loads anonymously within a few seconds.
- Add dedicated SMS section in the Privacy Policy body (not only Terms).
- State non-sharing of mobile opt-in data for third-party marketing if that is your practice—and make practice match policy.
- Describe program types and STOP/HELP.
- Ensure CTA links to the same policy URL you submit.
- Purge CDN caches; re-test.
- Resubmit with the correct URL.
What reviewers check for 9108
- The privacy policy URL loads over HTTPS without a login, pop-up wall or geo-block.
- The policy has a section about text messaging, not only a general data clause.
- It states that mobile numbers and SMS opt-in data are not sold or shared with third parties for their marketing.
- It names the program, message frequency, “Msg & data rates may apply”, and how to opt out (STOP) and get help (HELP).
- The URL in the campaign matches the link shown at the point of opt-in.
Sample SMS privacy policy language
Mobile information will not be shared with third parties or affiliates for marketing or promotional purposes. Text messaging originator opt-in data and consent will not be shared with any third parties. You can reply STOP to cancel and HELP for help. Message frequency varies. Msg & data rates may apply.
Adapt the wording to what your business actually does; the policy must match practice. For the full walkthrough see How to fix TCR rejection code 9108 and why privacy policy compliance fails.
Privacy-policy rejection codes
These codes describe the same family of problems as 9108, including Twilio’s 30908. Each page has the cause and the fix.
| Code | Problem |
|---|---|
| 7200 | Privacy Policy Mentions Marketing |
| 7107 | Verbal Privacy Disclosure Missing |
| 7105 | Privacy Policy SSL Failed |
| 7102 | Privacy Policy Link Invalid |
| 7101 | Privacy Policy URL Broken |
| 7100 | Privacy Policy URL Missing |
| 7014 | Privacy Policy Mentions Marketing |
| 7013 | Privacy Policy SSL Failed |
| 852 | Terms and Privacy Links Missing |
| 809 | Privacy Policy Attachment Missing |
| 805 | Privacy Policy Missing or Non-compliant |
| 3008A | CTA Missing Privacy Link |
| 2121 | Opt-in Form Missing Privacy Instructions |
| 2106 | Verbal Script Missing Privacy Instructions |
| 851 | Privacy Policy Disclosure Missing |
| 7103 | Privacy Policy Allows Sharing |
| 30908 | Privacy Policy Missing or Non-compliant |
Decision Framework
- Parse code family.
- Validate public artifacts.
- Diff live CTA vs message_flow.
- Diff samples vs production templates.
- Fix; peer-review; resubmit.
- If second failure, escalate to CSP support with evidence—do not thrash weekly.
Risk and Failure Modes
| Risk | Why | Mitigation |
|---|---|---|
| Blind resubmit | Burns time/fees | Preflight checklist |
| Fixing Terms not Privacy | 9108 persists | Edit Privacy Policy |
| URL mismatch | Old URL in form | Update submission fields |
| JS-only content | Crawler misses text | Static HTML visible |
| Sample theater | Production differs | Change control |
Implementation Checklist
| Step | Owner | Artifact |
|---|---|---|
| Log rejection | Ops | Ticket |
| Reproduce URLs | Web | Screenshots |
| Privacy edit | Legal/web | Policy diff |
| Flow/samples edit | Compliance | Packet |
| Preflight | Ops | Checklist |
| Resubmit | Ops | New status |
| Postmortem | Compliance | Notes |
Use MyTCRPlus rejection resources and tools to structure fixes—not as guaranteed clearance.
All 185 TCR Rejection Codes by Category
Every code in the MyTCRPlus rejection code directory, grouped by what it is about. Open a code for its cause, the field to change and the resubmission checklist.
Privacy policy (17)
- 805 Privacy Policy Missing or Non-compliant
- 809 Privacy Policy Attachment Missing
- 851 Privacy Policy Disclosure Missing
- 852 Terms and Privacy Links Missing
- 2106 Verbal Script Missing Privacy Instructions
- 2121 Opt-in Form Missing Privacy Instructions
- 3008A CTA Missing Privacy Link
- 7013 Privacy Policy SSL Failed
- 7014 Privacy Policy Mentions Marketing
- 7100 Privacy Policy URL Missing
- 7101 Privacy Policy URL Broken
- 7102 Privacy Policy Link Invalid
- 7103 Privacy Policy Allows Sharing
- 7105 Privacy Policy SSL Failed
- 7107 Verbal Privacy Disclosure Missing
- 7200 Privacy Policy Mentions Marketing
- 30908 Privacy Policy Missing or Non-compliant
Opt-out, STOP and HELP (27)
- 2112 Verbal Script Missing STOP Instructions
- 2117 Opt-in Form Missing HELP Instructions
- 2118 Opt-in Form Missing STOP Instructions
- 2119 Verbal Script Missing HELP Instructions
- 2126 Opt-in Form Missing STOP Instructions
- 2127 Verbal Script Missing STOP Instructions
- 2128 Opt-in Form Missing HELP Instructions
- 2131 Verbal Script Missing STOP Instructions
- 2137 Opt-in Instructions Missing HELP Instructions
- 2138 Opt-in Instructions Missing STOP Instructions
- 3003A CTA Missing HELP Instructions
- 3004A CTA Missing STOP Instructions
- 5100 Opt-out Missing Brand Name
- 5101 Opt-out Keywords Missing
- 5102 Opt-out Missing Confirmation Text
- 5107 Opt-in Missing HELP Info
- 5108 Opt-in Missing Opt-out Info
- 6002 Opt-in Msg Missing HELP Info
- 6003 Opt-in Msg Missing STOP Info
- 6007 HELP Msg Missing Brand Name
- 6008 HELP Msg Missing Contact Info
- 6009 HELP Email Mismatch
- 6010 STOP Msg Missing Brand Name
- 6011 STOP Msg Missing Confirmation Text
- 8100 Sample Missing Opt-out Language
- 30887 Opt-out Workflow Error
- 30890 Subscriber HELP Message Error
Consent and opt-in (42)
- 714 Invalid Opt-in Court Order
- 803 Website Missing Opt-in Language
- 2100 No Opt-in Method Found
- 2101 Marketing Missing Written Consent
- 2102 Informational Missing Express Consent
- 2103 Opt-in URL SSL Failed
- 2104 Opt-in URL Domain Missing
- 2105 Verbal Script Text Missing
- 2107 Verbal Script Missing Fee Disclosure
- 2108 Verbal Script Missing Brand Name
- 2109 Verbal Script Missing Message Type
- 2110 Verbal Script Missing Frequency Disclosure
- 2111 Verbal Script Missing Fee Disclosure
- 2113 Opt-in Form Missing Brand Name
- 2114 Opt-in Form Missing Message Type
- 2115 Opt-in Form Missing Frequency Disclosure
- 2116 Opt-in Form Missing Fee Disclosure
- 2120 Opt-in URL Missing
- 2122 Verbal Script Missing Brand Name
- 2123 Verbal Script Missing Message Type
- 2124 Verbal Script Missing Frequency Disclosure
- 2125 Webpage Missing Opt-in Form
- 2129 Attachment Missing Opt-in Form
- 2130 Attachment Missing Verbal Script
- 2132 Opt-in Instructions Insufficient
- 2133 Opt-in Instructions Missing Brand Name
- 2134 Opt-in Instructions Missing Message Type
- 2135 Opt-in Instructions Missing Frequency Disclosure
- 2136 Opt-in Instructions Missing Fee Disclosure
- 2139 Form Missing Phone Input Field
- 3001A CTA Consent Mechanism Insufficient
- 3012A Mixed Opt-in Types Prohibited
- 5104 Opt-in Missing Brand Name
- 5105 Opt-in Missing Frequency Disclosure
- 5106 Opt-in Missing Fee Disclosure
- 6001 Opt-in Msg Missing Brand Name
- 6004 Opt-in Msg Missing Frequency Disclosure
- 6005 Opt-in Msg Missing Fee Disclosure
- 6006 Opt-in Confirmation Msg Missing
- 7104 Invalid Opt-in Court Order
- 30894 Invalid Brand Information
- 30896 Opt-in Workflow or CTA Error
Sample messages, links and phone numbers (21)
- 601 Attributes Mismatch Website or Samples
- 602 Use Case Mismatches Sample Messages
- 603 Brand Website and Samples Inconsistent
- 1101 Website URL Domain Mismatch
- 2004 Description Mismatches Sample Messages
- 3007A CTA Missing Terms Link
- 3009A CTA Missing Phone Number
- 3011A CTA URL Missing or Inaccessible
- 6012 Sample Msg Missing Brand Name
- 6013 Public URL Shortener Detected
- 6014 Sample Msg Mismatches Use Case
- 6103 Campaign Field Contains Emojis
- 7006 Sex Content Missing Age Gate
- 8101 Sample Missing Brand Name
- 8102 Missing Sample for Use Case
- 8200 Marketing Sample Without Attribute
- 30889 Embedded Phone Number Undeclared
- 30891 Invalid Website URL
- 30892 Public URL Shortener Prohibited
- 30893 Invalid Sample Messages
- 30907 Website URL Validation Issue
Brand identity, EIN and website (20)
- 710 Reseller Brand Non-compliant KYC
- 711 Duplicate EIN Usage
- 713 Brand Email Domain Invalid
- 801 Sole Proprietor Criteria Unmet
- 802 Sole Proprietor Not Supported
- 807 Inauthentic Website
- 1003 Brand Website Inaccessible
- 1004 Website Translation Failed
- 1100 Online Presence Missing
- 1103 Website SSL Certificate Failed
- 2001 Duplicate Campaign Registration
- 2006 Brand Name Mismatch
- 3000 CTA Website Inaccessible
- 3002A CTA Missing Brand Name
- 6100 Sole Proprietor Not Supported
- 6101 Duplicate Campaigns Snowshoeing Detected
- 30881 Invalid Brand Support Email
- 30888 Age Gate Missing on Website
- 30898 Excessive EIN Registration
- 30903 Sole Proprietor Mismatch
Prohibited and restricted content (35)
- 701 Prohibited Content: Cannabis/CBD
- 702 Prohibited Content: Firearms & Ammo
- 703 Prohibited Content: Explicit Sexual
- 704 Prohibited Content: Gambling
- 705 Prohibited Content: Hate Speech
- 706 Prohibited Content: Alcohol Age Gate
- 707 Prohibited Content: Tobacco & Vape
- 708 Lead Gen Affiliate Marketing Prohibited
- 709 High Risk Financial Services Prohibited
- 712 Direct Lending Attribute Missing
- 1001 Age Gate Attribute Missing
- 1002 Direct Lending Attribute Missing
- 3010A CTA Missing Age Gate
- 3100 High Risk Financial Content Prohibited
- 3101 Affiliate Marketing with High Risk
- 3102 Affiliate Marketing Prohibited
- 3103 Direct Lending Content Mismatch
- 4100 SHAFT Content Violation Detected
- 7001 Prohibited Third Party Job Boards
- 7002 Prohibited Lead Generation Affiliate
- 7003 Prohibited Gambling Content
- 7004 Prohibited High Risk Financial
- 7005 Prohibited Illegal Substances
- 7007 Alcohol/Vape Missing Age Gate
- 7008 Prohibited Competitive Marketing
- 7009 Prohibited Illegal Weapons
- 7010 Prohibited Third Party Collections
- 7011 Prohibited Illegal Firearms
- 7012 Prohibited Hate Speech
- 8000 Political Content Without Attribute
- 8001 Charity Content Without Attribute
- 9001 Political Missing FEC ID
- 9002 Charity Missing 501c3 Proof
- 30883 SHAFT Content Violation Detected
- 30895 Direct Lending Attribute Missing
Use case and campaign description (9)
- 861 CTA Flows Non-compliant
- 2002 Campaign Description Unclear
- 2003 Description Mismatches Use Case
- 2005 Undeclared Use Case Detected
- 2200 Marketing Flow Without Attribute
- 8003 Cart Reminder Without Marketing
- 8004 Undeclared Mixed Use Cases
- 30885 High Risk or Deceptive Marketing
- 30886 Invalid Campaign Description
Throughput, field format and verification (14)
- 506 Content Not in English
- 611 Keyword Responses Incomplete
- 804 CTA Insufficient or Missing
- 806 CTA Location Unclear
- 808 Excessive Rejection Limit Reached
- 3005A CTA Missing Frequency Disclosure
- 3006A CTA Missing Fee Disclosure
- 3104 T-Mobile Daily Limit Exceeded
- 3105 Required Fields Missing
- 6102 Contact Info Contains Spaces
- 30882 Terms & Conditions Violation
- 30884 Spam or Phishing Risk Detected
- 30897 Disallowed Content Detected
- 30909 Call-to-Action Verification Issue
FAQ
How do I fix TCR campaign rejection error codes for A2P 10DLC?
Look up the exact code, fix the live asset it points to (website, privacy policy, opt-in flow or samples), check the related fields still match, then resubmit once through the same CSP. The step-by-step list above covers each stage.
What are TCR error codes?
Provider-returned codes explaining Brand/Campaign failures in the 10DLC registration path.
How do I fix 9108?
Repair Privacy Policy accessibility and SMS-specific language, then resubmit via CSP.
Does Twilio 30908 mean the same as 9108?
Related privacy-compliance themes; follow the exact provider message and docs for your path.
Who approves Campaigns?
TCR/CSP ecosystem roles vary; TCR resources note CSPs register Brands and approval paths involve upstream partners—use your CSP’s status model.
Should I change use case to get approval?
Only if it truthfully matches traffic—do not mis-label marketing as care.
Are fees charged again on resubmit?
Often yes—confirm with your CSP; do not invent amounts.
Where is the full code list?
The TCR Rejection Code Fix Directory lists all 185 codes with a fix page for each; they are also grouped by category above. Your CSP’s troubleshooting article remains authoritative for the wording of codes it surfaces.
Can tools auto-fix codes?
Tools can validate language/URLs; humans still confirm business truthfulness.
Worked example: reading a rejection notice
A clinic's rejection notice lists codes 2115 (opt-in form missing frequency disclosure) and 8101 (sample missing brand name). Instead of fixing only the first code, it looks up both in the rejection code directory, adds frequency to the form, rewrites every sample to start with the clinic name and checks the rest of the submission against the same opt-in and sample checklists.
It resubmits once with a note listing all changes. Because reviewers often report only the first issues they find, the full self-check prevents a third code appearing on the next review.
Additional Remediation and Budget Controls
Create a shared tracker with columns for code, CSP message, root cause category, owner, fix link, resubmit date, and outcome. Review the tracker in a weekly standup until the backlog clears. For pricing, maintain a living rate card spreadsheet with CSP name, quote date, Brand fees, Campaign fees by use case, vetting options, commitment terms, and per-segment assumptions. Re-quote whenever you add a Brand or Campaign type. Pair finance and compliance so rejection loops and fee surprises surface together. Before approving a new messaging vendor, require their fee schedule and a sample invoice showing pass-through lines. Document whether resubmission fees apply after privacy or sample fixes so leadership is not blindsided. Keep screenshots of the CSP fee pages you relied on (with dates) beside the purchase order. When comparing toll-free versus 10DLC total cost of ownership, include number rental, verification labor, monthly Campaign fees, and expected segment volume—not just the sticker Brand fee. Revisit assumptions quarterly because CSP fee cards and carrier surcharges change. If a quote seems far from a public help article, ask the account manager which lines are TCR pass-through versus platform markup. Never publish internal budget numbers as if they were universal market fees.
Quality Gates Before Resubmit or Go-Live
- Private-browser load of website and privacy URLs succeeds.
- SMS section visible in page source without login.
- Samples name Brand and match use case.
- message_flow lists every real opt-in path.
- Finance acknowledges any resubmit or monthly fees from the current quote.
- STOP/HELP configured on the messaging service.
- Owner signs the launch checklist.
Key Takeaways
- TCR error codes are diagnostic—classify before resubmitting.
- Privacy failures need public SMS policy language and reliable URLs.
- Align message_flow and samples with production.
- Log patterns; fix root causes.
- Avoid guaranteed-approval claims.
Disclaimer
This article is for informational purposes only and is not legal advice. Carrier policies, CSP requirements, fees, TCR processes, and TCPA/state rules change and are fact-specific. Confirm with your provider and qualified counsel before registering or sending commercial messages.
Main guide: TCR campaign rejection: 10DLC rejection reasons and fixes