Easy A2P

Pillar Guide

Every TCR Rejection Reason in GoHighLevel, Explained: The 2026 GHL Trust Center Field Reference

Your GoHighLevel brand keeps failing the legal-name match? This field reference now covers the fastest fix — upload your IRS CP-575 PDF in Trust Center to auto-prefill your legal name, EIN, and address — plus what to do when the CP-575 is lost (request a 147C letter). Every TCR rejection cause, mapped to its exact Trust Center field. Updated for TCR's March 23, 2026 granular rejection codes (30940–30964).

By Gary Vogt · · 24 min read

If you run a GoHighLevel agency and have ever seen a TCR rejection email saying something vague like “non-compliant content” or “vetting failed” — and then sat there wondering exactly what went wrong inside GHL Trust Center — you’re not alone. The Campaign Registry (TCR) and the major U.S. carriers run a deeply opaque review process that only tells you the first thing it noticed, not everything that’s actually broken.

This guide is the field reference I wish existed when I started helping GoHighLevel agencies submit A2P 10DLC registrations. Every documented rejection cause, what triggers it, what GHL Trust Center field it maps to, and the exact fix — organized so you can navigate to your specific error code or symptom and get a working answer in under 60 seconds. The 27 rejection causes below are mapped to the actual fields in GHL Trust Center, not generic Twilio documentation, so you can find the rejection trigger inside GHL without translating between platforms.

📕 Want this as a printable field reference? Download the free TCR Rejection Decoder (PDF) — all 27 rejection causes, the Twilio error-code table, and the 5-step recovery playbook in one guide you can keep on hand. Free, just your email.

The short version

Rejections fall into three buckets:

  1. Brand-side rejections — your business identity didn’t pass vetting. EIN issues, address issues, website issues, name mismatches.
  2. Campaign-side rejections — your messaging program didn’t pass review. Vague descriptions, sample message problems, consent flow problems, Privacy Policy/Terms of Service problems.
  3. Content violations (error 30883) — your business activity is in a permanently prohibited category. Cannot be fixed by rewriting; the activity itself is ineligible for 10DLC.

The first two are usually fixable on resubmission. The third is not. If you’re seeing error 30883 specifically, the fix is moving to toll-free numbers or changing the underlying business activity — no amount of copy rewriting will get you approved.

How TCR rejection actually works

A quick definition before the causes, because the name misleads almost everyone: The Campaign Registry (TCR) doesn’t review your campaign. TCR is the registry — the central database where your brand and campaign get registered so carriers can see who’s sending what. TCR’s own explainer deck is explicit that it “does not review, approve, or reject campaigns” — that’s done by the campaign sharing chain: your platform’s Campaign Service Provider (for GHL, the LeadConnector/Twilio layer) and the Direct Connect Aggregators that vet campaigns before AT&T, T-Mobile, and Verizon accept the traffic. TCR even points opt-in and opt-out questions back to your provider — it’s a data registry and reputation authority, not a review desk. So when this guide says “TCR rejection,” it means what the industry means: a rejection of your TCR-registered campaign, issued by reviewers in that chain and surfaced in GHL as a Twilio error code.

Before diving into specific causes, it helps to understand how the campaign review process is structured. Three things are not obvious from the rejection emails:

The review stops at the first issue

When your submission goes through review, the process halts as soon as a reviewer finds something that warrants rejection. The rejection email cites that one issue — but your submission may have additional problems that weren’t flagged because the review never got to them. This means:

  • Don’t fix only the cited issue. Audit the whole submission against current standards before resubmitting.
  • Multiple sequential rejections are common when agencies fix one thing at a time. Resubmissions themselves are free (no Campaign Vetting Fee), but each cycle adds 1-3 days (Sole Prop) or 3-15 days (Standard) of waiting before your client can send messages. Three or four sequential rejections can stretch a launch from days into months.

Brand approval and campaign approval are separate

A brand has to be approved first before campaigns can run under it. So a “rejection” might be at the brand stage (your business identity isn’t accepted) or at the campaign stage (the brand is fine, but the specific messaging program isn’t approved). The email tells you which.

Eligibility tier matters

Some rejections are eligible for resubmission after fixes. Others are permanently terminal — typically content violations (SHAFT categories, cannabis, payday lending). Resubmitting a permanently-rejected category just wastes the fee.

If you’re seeing rejection language that mentions “ineligible,” “permanently rejected,” “prohibited content,” or error code 30883, stop and reassess whether 10DLC is even the right path before paying for another submission attempt.

The Twilio error code system, briefly explained

TCR rejections that surface through Twilio (which is what GoHighLevel uses under the hood) come with numeric error codes in the 308XX range. Each code corresponds to a specific vetting outcome. Quick map:

  • 30883 — Campaign vetting rejection — Content Violation (SHAFT, cannabis/CBD, other prohibited categories).
  • 30884 — Campaign vetting rejection — Spam/Phishing (campaign was identified as a known spam or phishing pattern).
  • 30885 — Campaign vetting rejection — High Risk (associated with potentially fraudulent activity).
  • 30886 — Campaign vetting rejection — Invalid Campaign Description (description is vague, doesn’t align with use case, or doesn’t match samples/brand).
  • 30887 — Campaign vetting rejection — Opt-out Error (opt-out details don’t clearly show how end users can stop receiving messages).
  • 30888 — Campaign vetting rejection — Age Gate Not Present / Not Acceptable (age-gated content claimed but the age verification flow is missing or inadequate).
  • 30889 — Campaign vetting rejection — Embedded Phone Number (campaign declared embedded phone numbers but samples don’t show them, or vice versa).
  • 30890 — Campaign vetting rejection — Subscriber Help info inadequate (HELP message lacks brand name, support contact, or clear assistance instructions).
  • 30898 — Campaign vetting rejection — Excessive EIN (the same EIN has been used for too many brand registrations or duplicative registrations without clear justification).
  • 30903 — Campaign rejection — Incorrect Sole Prop Brand Registration (brand was filed as Sole Prop but has an EIN, or vice versa, or business info is incomplete/invalid).
  • 30909 — Campaign vetting rejection — Message Flow or Call to Action incomplete/unverified (consent collection isn’t documented at the submitted opt-in URL, or required CTA disclosure elements are missing). The most common code for opt-in/consent gaps. See our opt-in pillar for the full CTA disclosure requirements.

The March 23, 2026 granular rejection codes (30940–30964)

On March 23, 2026, GoHighLevel and The Campaign Registry rolled out granular, per-reason content-rejection codes in the 30940–30964 range. Per GHL’s rejection-reasons article, “new granular error codes provide more precise rejection reasons compared to previous general codes.”

Two things to know before you read the list:

  • They’re additive, not a rename. The broad codes above — 30883, 30884, 30885, and the disallowed-content code 30897 — are still active. A content rejection may now surface as one of those or as a specific code below. Treat this as a crosswalk, not a replacement.
  • Almost all of them are terminal. Every code below states, on its own Twilio error page, that the rejected campaign is not eligible for resubmission. For the content and activity codes that’s because the business activity itself is prohibited on 10DLC — no rewrite helps. The two URL-format codes (30963, 30964) are the only near-fixes; see the note under the last table.

Each label below is quoted verbatim from its own page in Twilio’s error dictionary.

Prohibited business activity or content (30940–30952) — the rejection reads your business activity and website, not the wording of one message. Rewriting samples does not clear these:

CodeTwilio labelResubmit?
30940Cannabis, CBD, or illegal substance content detectedNo
30941Prescription drug or controlled substance content detectedNo
30942Loan marketing content detectedNo
30943Third-party debt collection content detectedNo
30944Gambling or betting content detectedNo
30945Sweepstakes or contest content detectedNo
30946Stock alert content detectedNo
30947Cryptocurrency content detectedNo
30948High-risk investment content detectedNo
30949Debt reduction or consolidation content detectedNo
30950Credit repair content detectedNo
30951Third-party lead generation or MLM content detectedNo
30952Non-federally compliant use case detectedNo

SHAFT content (30953–30958):

CodeTwilio labelResubmit?
30953Sex or adult content violation detectedNo
30954Hate speech or violent content detectedNo
30955Alcohol promotion content detectedNo
30956Alcohol content without required age verification detectedNo
30957Firearms or explosives content detectedNo
30958Tobacco or vape content detectedNo

High-risk or deceptive (30959–30964):

CodeTwilio labelResubmit?
30959Fraudulent or misleading content detectedNo
30960Known phishing campaign detectedNo
30961High-risk domain reputation detectedNo
30962Deceptive marketing practices detectedNo
30963Public URL shortener detected in campaignNo
30964Non-secured URL (http) detectedNo

30963 and 30964 are the only easily avoidable ones. Twilio still marks the rejected campaign not eligible for resubmission, but the cause is a formatting choice, not a prohibited activity: 30963 fires on public link shorteners (bit.ly, tinyurl) — swap to a branded or dedicated domain; 30964 fires on non-secure http links — switch to https. Correct the URLs, register a clean new campaign, and you’re through.

Why deleting a word won’t save you

The granular split exposes a trap: most of these codes key off your business activity and website, not the text of one message. A wellness brand that gets 30940, deletes “CBD” from its two samples, and resubmits gets 30940 again — per Twilio, cannabis and CBD are prohibited regardless of state-level legality, and the rejection reads the website and business activity. There is no copy edit that clears it. The same holds for 30960 (known phishing): softening the wording doesn’t help when the pattern itself is what’s flagged. Knowing which bucket your code lands in is the difference between a five-minute URL swap and a dead end.

Below, every rejection cause is mapped to the GHL Trust Center field that triggers it and the specific code or vetting outcome that surfaces. Use Cmd+F (or Ctrl+F) to find the cause matching your rejection email.

Brand-side rejections — 10 causes

Brand-side rejections fail before any campaigns can run. The fix is at the Brand Registration step in GHL Trust Center, not the campaign step.

Trigger: The Legal Business Name you entered in the Brand Registration step in Trust Center doesn’t exactly match what the IRS shows for your EIN. TCR cross-references against the IRS CP 575 letter (the EIN confirmation document).

Common causes:

  • Using your DBA name in the Brand Registration field instead of the legal entity name (the DBA goes in the Campaign Description and consumer-facing copy — see below — not on the brand record)
  • Missing or extra punctuation (“Smith, LLC” vs “Smith LLC”)
  • Missing entity suffix (“Smith Consulting” vs “Smith Consulting LLC”)
  • Including a comma or period the IRS record doesn’t have

Fix: Pull out the IRS CP 575 letter (you received it when the EIN was issued) and copy the Legal Business Name from line 1 character-for-character. Don’t use a W-9, W-2, or your bank’s record of the name — only the CP 575. Update the Legal Business Name field in GHL Trust Center to exactly match.

Important nuance — using a DBA across the rest of the submission is supported. Per GHL’s Understanding A2P Campaign Rejection Reasons & Required Fixes article, businesses with a DBA different from the legal entity declare the relationship in the Campaign Description with the sentence “We are doing business as [DBA Name].” The DBA can then appear in samples, opt-in checkboxes, opt-in confirmation, and consumer-facing copy, with “[Legal Name] DBA [DBA Name]” in formal sections (Privacy Policy and Terms of Service headers). Only the Brand Registration field itself is locked to the IRS-verified legal entity name.

The fastest fix: upload your CP-575 and let Trust Center prefill the fields

To use the IRS CP-575 in GoHighLevel’s Trust Center, upload the PDF (max 5MB) on the Business Details step and Trust Center auto-prefills your legal business name, EIN, and registered address straight from it. If you’ve lost your CP-575, the IRS won’t reissue it — request a 147C letter and use that instead.

This is the surest way to beat the exact-match trap above. Instead of retyping the legal name from memory (where a missing “(LLC)” suffix or a stray comma triggers the rejection), you hand Trust Center the source document and it fills the fields for you. Per GoHighLevel’s Standard Brand registration guide, you drag and drop the CP-575 PDF (max 5MB), and Trust Center reads the legal name, EIN, and address off the letter to pre-fill your registration. The upload path is for EIN (Standard-tier) brands — Sole Proprietors without an EIN register differently (see our Sole Proprietor guide).

Two things the prefill does not relieve you of checking:

  • The legal name still has to be the first line of the letter. GoHighLevel’s brand-approval best practices are explicit: “You will only want to submit the first line of the IRS letter in your brand submission.” Their example — submit “ACME LLC”, not “ACME LLC Theresa Lopez-Fitzgerald MBR” — because the responsible-party line, if it comes along, “can cause rejections.” When the legal name genuinely wraps onto more than one line above the address, GHL’s guidance is to enter all lines above the address line as the single legal name. Confirm the prefilled field matches the letter before you continue.
  • DBAs still go elsewhere. The prefill fills the brand’s legal-entity name; your trading name belongs in the Campaign Description and consumer-facing copy, exactly as described in cause #1 above and in our DBA guide.

Lost your CP-575? Request a 147C letter

The CP-575 is the one-time confirmation the IRS mailed when your EIN was issued — and the IRS does not print a second one. As the IRS-letter guidance puts it: “Once issued, the original EIN confirmation letter cannot be issued again by the IRS. Instead, they issue another verification letter (147C).” The 147C carries the same legal name, EIN, and address, so it works everywhere this page tells you to reach for the CP-575 — the exact-match name in cause #1, the $11 vetting appeal in cause #2, and the Trust Center upload above.

To request one, call the IRS Business & Specialty Tax Line at 800-829-4933 and verify your business details with the agent; the letter is free and arrives by mail (or, in some cases, fax). Read the same “first line only” rule off the 147C that you would off the CP-575.

Easy A2P checks the name your brand actually submitted — before you submit. Our copy review reads your Brand Registration content against the exact-match rules TCR vets on (legal name vs. website, entity suffix, DBA placement, Sole Prop vs. Standard tier), so a mistyped legal name doesn’t cost you another 3–15-day re-review cycle. We don’t approve anything — TCR and the carriers do that — but we help you ship it clean the first time. Review your submission with 3 free credits →

2. EIN issued too recently (brand-new EIN)

Trigger: Brand-new EINs take a few weeks to propagate into the third-party registries TCR verifies against, so a fresh EIN comes back unverifiable. GHL’s brand-approval guidance is to wait at least 30 days from issuance before submitting or retrying.

Symptom: Brand registration comes back “Unverified” or with a vetting failure mentioning the EIN couldn’t be confirmed.

Fix: Wait out the propagation window (GHL advises 30+ days from issuance), then resubmit. If you need to launch sooner, file the $11 identity-vet appeal (per TCR’s July 2026 fee schedule) with your complete IRS CP 575 PDF — screenshots or partial uploads get appeals rejected, and appeals are slow and not always granted. Waiting is the cheaper path. (Corrected July 2026 — an earlier version of this guide said 15 days; GHL’s current guidance is a few weeks of propagation and 30+ days before a retry.)

3. Address is a PO Box or virtual mailbox

Trigger: The business address you entered is a PO Box, UPS Store mailbox, virtual office service (Regus, WeWork virtual addresses, etc.), or mail forwarding service.

Why this gets rejected: Carriers want a verifiable physical location tied to the business. Mail-only addresses can’t be cross-referenced against business registries.

Fix: Use a physical street address — typically the business’s actual operating location or, for solo home-based businesses, the home address. The address won’t be publicly displayed; it’s only used for TCR vetting purposes.

4. Website inaccessible, password-protected, or under construction

Trigger: TCR’s vetting system attempts to load the website URL you submitted. If the site returns an error, requires a password, redirects to a “coming soon” page, or otherwise can’t be loaded as a normal visitor would see it, vetting fails.

Common causes:

  • Site is down for maintenance during vetting
  • Site requires login to access main content
  • Site has a “coming soon” splash screen
  • URL was misspelled in the registration
  • Site domain redirects to a different domain
  • SSL certificate has expired

Fix: Open the URL you submitted in an incognito browser tab. The site must load fully on first request, no login required, with the business name and basic contact information visible. If you have any kind of access wall, password, or maintenance mode, remove it before resubmitting.

Trigger: The Legal Business Name you registered doesn’t appear anywhere on the website you submitted, or only appears buried in metadata where a reviewer can’t find it.

Why this matters: TCR uses the website to confirm the registered identity is legitimate. The legal entity name needs to be discoverable by a human visitor — that’s the verification anchor.

Fix: Add the registered legal name to the website. It doesn’t have to be on the homepage banner, but it does need to be visible somewhere the reviewer will look — typically the footer, the About page, the Privacy Policy header, or the Terms of Service header. Common patterns:

  • No DBA: Footer reads ”© 2026 Apex Dental Group LLC. All rights reserved.” Legal entity name appears, verification passes.
  • DBA in use: Homepage and storefront branding say “Apex Dental” (the DBA), and the footer reads ”© 2026 Apex Dental Group LLC, doing business as Apex Dental.” Both names visible, relationship declared, verification passes.

A site that shows only the DBA with no legal entity disclosure anywhere fails verification because TCR can’t connect the public brand to the registered entity. The fix isn’t “rebrand the site to the legal name” — it’s “disclose the legal entity in the footer or PP/ToS so the reviewer can find the connection.”

6. DUNS number submitted instead of EIN

Trigger: Some agencies confuse DUNS (Dun & Bradstreet’s commercial identifier) with EIN. TCR requires a valid US EIN in the format XX-XXXXXXX. DUNS numbers are not accepted and will cause an Unverified state.

Fix: Locate your IRS CP 575 letter and enter the 9-digit EIN in the correct format. If you don’t have an EIN at all, register at the Sole Prop tier instead (see our Sole Proprietor guide).

7. Duplicate brand or contact info already in use

Trigger: TCR has rules limiting reuse of contact information across brand registrations. Two common patterns trip agencies:

  • Excessive EIN reuse: The same EIN has been used for too many brand registrations or duplicative brands without clear business justification (Twilio error 30898).
  • Sole Prop phone reuse: Each phone number can only be approved on one Sole Prop brand. Trying to register a second Sole Prop brand using the same phone fails.

When you trip either limit, the new brand registration fails.

Fix: Use a different business email and a different phone number for the new brand. For agencies registering many client brands, this often means using each client’s actual contact info rather than reusing the agency’s contacts across all of them.

8. Sole Proprietor misregistration (error 30903)

Trigger: This fires in two scenarios:

  • You registered a brand as Sole Prop but it has an EIN (TCR thinks it should be Standard)
  • You registered a brand as Standard but the EIN can’t be verified

Fix: Match your registration tier to your actual entity status. If you have a verifiable EIN, register as Standard or Low Volume Standard. If you don’t have an EIN at all, register as Sole Prop and ensure the business name doesn’t contain LLC, Inc, Corp, Company, Team, Group, or similar entity-suggesting terms (see the Sole Proprietor guide for the full Sole Prop registration walkthrough).

9. Industry / vertical mismatch

Trigger: The Business Industry dropdown you selected in Trust Center doesn’t match what the website actually does. For example: registered industry is “Real Estate” but the website is about HVAC services.

Why it matters: Carriers use industry to apply category-specific rules (e.g., financial services have stricter content requirements). A mismatched industry undermines this whole system.

Fix: Update the Business Industry to match what the business actually does. If the website covers multiple lines of business, pick the one most associated with the SMS messaging program you’re registering.

10. Foreign / non-US entity

Trigger: The country selected was something other than United States or Canada, or the registered address is in a country not supported by 10DLC. Other regions follow different carrier rules (UK Mobile Number Range, EU CLI, etc.) that 10DLC doesn’t cover.

Fix: 10DLC is a U.S. and Canada system. If your business operates elsewhere, you need a different SMS routing solution for those markets — speak with your carrier or platform about international SMS options.

Easy A2P helps with brand-side rejections. Our copy review system checks Brand Registration content against current TCR vetting rules — including recent-EIN propagation gaps (no fixed 15- or 45-day rule), PO Box detection, name-vs-website consistency, and Sole Prop tier checks. We catch these before submission, so you don’t burn another 3-15 day re-review cycle on a configuration mistake. Review your submission with 3 free credits →

Campaign-side rejections — 17 causes

Campaign-side rejections happen after the brand is approved. The fix is in the campaign details: use case, samples, opt-in flow, consent text, Privacy Policy, Terms of Service.

11. Campaign description too vague

Trigger: The Use Case Description field is generic, echoes the use case dropdown label verbatim, or doesn’t name specific message types. Examples that get rejected:

  • “Mixed (multiple types)”
  • “Marketing messages”
  • “Various updates”
  • “Account notifications and service updates”

Fix: Name the actual specific content the business sends. For a real-estate agent: “appointment reminders for property tours, listing alert notifications, and follow-up messages after open houses.” For a med spa: “promotional offers on cosmetic procedures, treatment prep instructions, and post-visit care reminders.” Specificity is what passes review.

12. Cold outreach or purchased lists in campaign description

Trigger: The Use Case Description hints at outbound prospecting to non-opted-in contacts. Red-flag phrases:

  • “We reach out to prospects”
  • “Customers are sourced from our marketing partners”
  • “Leads obtained through third-party providers”
  • “Cold outreach campaign”
  • “We contact homeowners about their property”

Why it auto-rejects: Lead generation through purchased, rented, shared, or brokered contact lists is a forbidden category under A2P 10DLC. The TCPA requires prior express written consent from the actual recipient.

Fix: Rewrite the description to emphasize that all recipients have explicitly opted in via a documented consent mechanism (website form, paper form, QR code, etc.). If your business actually does cold outreach from purchased lists, no description rewriting will fix this — it’s permanently ineligible. Toll-free numbers may be the alternative.

13. Opt-in flow description vague or missing

Trigger: The “How do contacts opt in?” field doesn’t specify the actual mechanism. Vague phrases like “customers contact us” or “users sign up” aren’t sufficient.

What reviewers want: Specific, named opt-in mechanism. Examples that pass:

  • “Customers opt in by submitting their phone number through an online website form at example.com/contact that includes explicit SMS consent language.”
  • “Customers opt in verbally during in-person consultations where messaging purpose and STOP instructions are explained.”

Fix: Name the actual opt-in mechanism (Website Form, Paper Form, Verbal, QR Code, Kiosk, Keyword, Facebook Lead Form, Chat Widget) and describe how consent is captured.

14. Sample messages contain merge field placeholders

Trigger: Sample messages include unfilled curly-brace template variables like {{contact.first_name}} or {{location.name}}. Campaign reviewers see these as broken code.

Fix: Replace merge fields with either real example names (“Sarah”) or square-bracket placeholders like [Customer Name]. GHL’s own Understanding A2P Campaign Rejection Reasons & Required Fixes article (under error code 30893) explicitly endorses bracket notation: “Messages should reflect actual content to be sent, indicate templated fields with brackets (e.g., [First Name])…” Never submit samples with curly braces.

15. Sample messages missing STOP language

Trigger: Neither sample message includes opt-out instructions. Carriers require documented STOP language.

Fix: Add a STOP instruction to at least one sample message. GHL Trust Center sample messages use “unsubscribe” and “opt-out” interchangeably — both pass review. Common acceptable phrasings include “Reply STOP to unsubscribe.” and “Reply STOP to opt-out.” We walk through this one in more depth, including where agencies most often leave it out, in why TCR rejects campaigns for missing STOP language.

16. Sample messages contain deceptive eligibility language

Trigger: Samples use phishing-style or fake-eligibility patterns:

  • “You’ve been selected”
  • “Congratulations, you qualify”
  • “You may have been pre-approved”
  • “You are one of the few”
  • “Exclusively selected”

Why it rejects: These mimic phishing patterns and violate CTIA guidelines on deceptive language. Auto-failure even on otherwise opted-in lists.

Fix: Rewrite samples without any “you’ve been selected” or qualification framing. Use direct, specific language: “Hi [Name], your appointment is confirmed for [Date]. Reply STOP to unsubscribe.”

17. Sample messages don’t match the declared use case

Trigger: Campaign is registered as a non-marketing use case (Customer Care, Account Notification, etc.) but samples contain promotional content. Or registered as 2FA but samples are appointment reminders.

Fix: Either change the registered use case to match the actual messages, or rewrite samples to fit the registered use case. For Mixed campaigns, both transactional and promotional samples are valid — but they must be in clearly separate samples, not one combined sample.

18. Insufficient sample messages for Mixed or Marketing

Trigger: Mixed and Marketing use cases require two distinct sample messages showing the range of content. Submitting only one sample fails for these tiers.

Fix: Provide two samples, each illustrating a different aspect of the program (e.g., one transactional, one promotional for Mixed; or two different promotional patterns for Marketing).

Trigger: The opt-in form has a single checkbox covering both marketing and non-marketing content. Phrasing like “I agree to receive appointment reminders, promotions, and other messages from [Business].”

Why it fails: TCPA requires separate express written consent for marketing and a lower bar for transactional. A combined checkbox creates coerced consent.

Fix: Split into two separate, optional, unchecked checkboxes — one for marketing, one for non-marketing. Each independently opt-in, neither required to submit the form.

Trigger: Either consent checkbox is pre-checked when the form loads. Carriers verify this on the live form, not just in the registration text.

Fix: Both checkboxes must be unchecked by default. The user must take affirmative action to opt in. Verify on the live form (not just in code) — pre-checked behavior often comes from form-builder defaults that are easy to overlook.

21. Non-marketing checkbox uses vague generic copy

Trigger: Non-marketing checkbox text is generic (“non-marketing messages,” “service updates,” “general notifications”) without naming the actual specific content.

Fix: Reference the actual specific message type. For a dental office: “I consent to receive appointment reminders and treatment-related communications from [Business Name].” For a delivery service: “I consent to receive order confirmations, shipping updates, and delivery notifications from [Business Name].“

22. Marketing checkbox on a non-marketing-only campaign (or vice versa)

Trigger: Use case mismatch between the campaign declaration and the consent boxes:

  • Campaign is registered as Marketing-only but a non-marketing checkbox is also submitted
  • Campaign is registered as a non-marketing-only use case (Customer Care, etc.) but a marketing checkbox is submitted

Fix: Either change the campaign use case to Mixed (which validly has both) or remove the mismatched checkbox.

23. Privacy Policy missing the TCR non-sharing clause (error 30932 / 30908)

Trigger: The Privacy Policy doesn’t contain language stating that mobile information will not be shared with third parties for marketing/promotional purposes. Carriers scan for this clause and reject without it. In GHL Trust Center this surfaces as error 30932 — “Privacy policy indicates opt-in data is shared with third parties for marketing” — whether the clause is missing entirely or your policy affirmatively states that opt-in data is shared. The same rejection can also come back as the closely related code 30908 (“Compliant Privacy Policy Required”) when the Privacy Policy is missing, can’t be verified, or simply omits the non-sharing statement; the fix below resolves either code.

Seeing this called 9108 or 7103 elsewhere? Some third-party A2P guides label this same Privacy Policy non-sharing rejection error 9108, or more recently 7103 (“Privacy Policy Allows Sharing”). Those labels don’t appear in GoHighLevel’s Trust Center or on Twilio’s own error pages — there the rejection is 30932 or 30908, the codes above. Whatever label your guide uses, the fix below is the same clause.

Fix: Add this exact paragraph (or a clear equivalent) to your Privacy Policy:

“No mobile information will be shared with third parties/affiliates for marketing/promotional purposes. Information sharing to subcontractors in support services, such as customer service, is permitted. All other use case categories exclude text messaging originator opt-in data and consent; this information will not be shared with any third parties.”

24. Privacy Policy missing “Information We Collect” disclosure

Trigger: The Privacy Policy doesn’t describe what personal information is collected from users (phone numbers, names, contact details). GHL’s compliance tool now flags this as a hard failure.

Fix: Add a section explicitly listing what’s collected — phone number, name, email address, etc. — and where it’s collected (the opt-in form, the website contact page, etc.).

25. Privacy Policy missing “Data Security” disclosure

Trigger: The Privacy Policy doesn’t describe security measures used to protect user data. Encryption in transit, access controls, secure third-party processors.

Fix: Add a Data Security section listing typical SaaS security measures: TLS encryption in transit, access controls limiting data to authorized personnel, secure third-party processors (e.g., GoHighLevel, Twilio, Stripe).

26. Terms of Service missing one or more of the 7 required SMS clauses

Trigger: The Terms of Service SMS section doesn’t include all required elements. There are seven:

  1. Business Identity / Program Description
  2. STOP opt-out instructions (universal, not scoped to one message type)
  3. HELP support instructions with contact info
  4. Carrier Liability disclaimer
  5. Message Frequency & Rates disclosure
  6. Privacy Policy cross-link
  7. Age Restriction (18+) statement

Fix: Audit your Terms of Service against the seven clauses above. Missing any one causes rejection. The Age Restriction (18+) clause is now flagged by GHL’s compliance tooling as a hard requirement — older Terms of Service templates often lack this.

27. Privacy Policy / Terms of Service not linked on opt-in form

Trigger: The Opt-In Flow Description doesn’t confirm that Privacy Policy and Terms of Service are linked on the form’s footer (or adjacent to the consent checkboxes).

Why it matters: TCR requires both documents to be accessible from the opt-in form, not just from the website’s main pages. The link placement is verified on the live form during vetting.

Fix: Add Privacy Policy and Terms of Service links to the form’s footer (or directly under the consent checkboxes), and update the Opt-In Flow Description to explicitly state where the links are placed.

Easy A2P catches every one of these. Our copy review system runs your campaign content against the same patterns campaign reviewers use — including all 17 campaign-side rejection causes above. Most agencies recover the cost of credits on a single avoided rejection. Try with 3 free credits →

Content violations — error 30883 and the permanently ineligible categories

Some categories cannot be registered for 10DLC under any circumstances. No description rewriting, no consent flow improvements, no Privacy Policy adjustments will get them approved. The remedy is either changing the underlying business activity or moving to toll-free numbers, which have a different content review.

If you receive error code 30883 (Content Violation) or any rejection citing “ineligible,” “prohibited content,” or “permanently rejected,” you’re in this category.

Cannabis cluster (auto-rejected regardless of state legality)

Cannabis, marijuana, hemp, CBD, cannabidiol, THC, dispensaries, cannabis delivery, weed, hash, delta-8, delta-9, THCA, CBG, CBN, cannabis oils, hemp-derived products, and any synonym or related term. Auto-rejected regardless of state-level legality or licensing status. The federal classification of cannabis as a controlled substance overrides state law for carrier policy purposes.

Adult content (SHAFT — sex)

Adult entertainment, adult novelties, dating sites that primarily serve sexual content, escort services, OnlyFans-type subscription content. Permanently ineligible.

Hate speech (SHAFT — hate)

Content targeting protected classes with hostility, hate group recruitment, content advocating violence against groups. Permanently ineligible.

Alcohol (restricted, not banned — but with caveats)

Alcohol is technically a “restricted” category, not “permanently ineligible” — licensed alcohol businesses can register if they implement age-gating on their opt-in form and website. However, without proper age verification, alcohol-related campaigns are rejected. If you’re submitting an alcohol-related campaign, ensure the opt-in form has a 21+ age attestation and the website has age-gating in place before resubmitting.

Firearms (SHAFT — firearms)

Sale of firearms, ammunition, or firearm accessories. Federally regulated firearms dealers may have specific exceptions but most general firearm businesses are ineligible.

Tobacco and vaping (restricted, with age-gating)

Tobacco, cigarettes, cigars, e-cigarettes, vaping products. Like alcohol, these are restricted rather than fully banned, but require age-gating (21+ in some jurisdictions, 18+ minimum) on the opt-in form to be eligible.

Payday lending and high-interest loans

Payday loans, short-term high-interest lending, title loans, advance fee loans. Permanently ineligible. If your lending business is mortgage, auto, business loans, or other regulated lending categories, you may be eligible — choose the correct industry classification.

Third-party debt collection

Third-party debt collection (collecting on behalf of other companies) and debt relief / debt settlement services. Permanently ineligible. First-party debt collection (a company collecting on its own receivables) may qualify with special vetting through TCR.

Cryptocurrency

Cryptocurrency exchanges, ICOs, crypto trading platforms, and most crypto-adjacent businesses are heavily restricted or ineligible. Carrier policies vary; if you’re in this space, expect significant scrutiny and possibly rejection.

Lead generation services

Lead-gen as a service (companies that aggregate consumer information to sell to other businesses) is permanently ineligible. The acquired contacts haven’t opted into the lead-gen company’s messaging program — the consent doesn’t transfer.

Gambling / sweepstakes (restricted, special use case)

Licensed gambling and sweepstakes campaigns require both age-gating (21+) and registration under TCR’s Sweepstakes special use case. Without those configurations, they’re rejected.

Multi-Level Marketing (MLM)

Not strictly forbidden but heavily scrutinized. MLM campaigns face higher rejection rates and stricter compliance review. If you’re in MLM, expect TCR vetting to be thorough.

Twilio error code reference

When a campaign rejection surfaces through Twilio infrastructure (which is what GHL uses), you may see a numeric error code. Quick reference:

CodeMeaningEligible for resubmission?
30883Content Violation (SHAFT, cannabis/CBD, prohibited categories)No — permanently ineligible
30884Spam/Phishing — known spam or phishing patternNo in current form — appeal or new campaign with materially different content
30885High Risk — potentially fraudulent activityNo in current form — appeal or substantially different approach
30886Invalid Campaign DescriptionYes, after rewriting description
30887Opt-out Error — opt-out instructions inadequateYes, after fixing opt-out language
30888Age Gate Not Present / Not AcceptableYes, after implementing proper age verification
30889Embedded Phone Number — declared/sample mismatchYes, after aligning samples with declarations
30890Subscriber Help info inadequateYes, after improving HELP message
30898Excessive EIN — too many brands per EINYes, after consolidating brands or providing justification
30903Incorrect Sole Prop Brand RegistrationYes, after re-registering at the correct tier
30909Message Flow / CTA incomplete or unverified — consent gapYes, after fixing the opt-in form and consent disclosure
30932Privacy Policy shares opt-in data with third parties for marketing — TCR non-sharing clause missingYes, after adding the non-sharing clause to your Privacy Policy
30908Compliant Privacy Policy Required — policy missing, unverifiable, or omitting the non-sharing clauseYes, after adding (or making verifiable) the non-sharing clause

Since March 23, 2026, content rejections may also surface as granular codes in the 30940–30964 range — see the granular-codes section earlier on this page for the full crosswalk and Twilio’s verbatim label for each. If you receive a code not listed here, check Twilio’s error code dictionary for the most current list. Each code links to a dedicated page describing the trigger and resolution.

What to do after a rejection — the recovery playbook

The first instinct after rejection is usually to fix the cited issue and resubmit. That’s often wrong, because TCR only tells you the first issue — there may be more.

The right sequence:

Step 1 — Read the error code carefully

Identify whether it’s brand-side or campaign-side, eligible or terminal. If it’s terminal (30883 or any forbidden category), stop here and reassess the business activity. Resubmitting won’t help.

Step 2 — Audit the entire submission, not just the cited cause

Use the 27 causes above as a checklist. Even if the rejection only mentioned one item, validate that none of the others apply. The next rejection cycle will surface the next-deepest issue, costing you another 1-3 days (Sole Prop) or 3-15 days (Standard) of delay before your client can send messages.

Step 3 — Fix every issue you find

Update the registration in GHL Trust Center. Verify the website is live, the Privacy Policy has all required clauses, the Terms of Service has all 7 required clauses, the consent checkboxes are not pre-checked, the sample messages have STOP language and no merge fields, and the campaign description names actual specific message types.

Step 4 — Review for errors before resubmitting

This is where Easy A2P pays for itself. Run the entire submission through our copy review system before you resubmit. Catching one additional issue before submission saves another 1-3 days (Sole Prop) or 3-15 days (Standard) of re-review delay before your client can send.

Step 5 — Submit with confidence

Once validated, submit. Most properly-prepared submissions pass on the first attempt or after one corrected resubmission.

How Easy A2P prevents these

Every rejection cause in this guide maps to a rule in our copy review system. Brand-side issues, campaign-side issues, content violations — we check for all of them before you submit, so you don’t burn fees and delays in the rejection-and-resubmit loop.

We’re particularly tuned for the specific patterns GHL Trust Center surfaces, which differ slightly from the patterns Twilio’s general A2P documentation describes. GHL has its own quirks — locked use case dropdowns for Sole Props, specific Privacy Policy phrasing requirements, Trust Center field review that other platforms don’t share. Our copy review system was built for GHL agencies first.

If you’re deciding between doing this by hand, using GHL’s built-in checker, or a third-party tool, we’ve laid the tradeoffs out side by side — see Easy A2P compared to the alternatives, Easy A2P vs GoHighLevel’s native checker, and Easy A2P vs A2P Wizard. And if what you want first is the money side: what registration actually costs in GoHighLevel breaks out every fee, and the true cost of a rejection covers what a failed submission costs an agency beyond the fee itself.

Review your A2P submission with 3 free credits →

A final reality check

Most A2P 10DLC rejections come down to small details — a missing “(LLC)” suffix, a Google Voice number on a Sole Prop registration, a Privacy Policy missing one specific paragraph, a sample message with {{contact.first_name}} instead of a real example. Each detail looks minor in isolation. The rejection email rarely tells you which one tripped the system.

That’s the loop this guide is meant to short-circuit. If you came here from a rejection email, search this page for the cited error code or symptom, fix what you find, then audit the rest before resubmitting. If you’re a careful reader, you’ll fix multiple issues at once and save yourself another rejection cycle.

If you’d rather work from something you can keep open beside the Trust Center, the TCR Rejection Decoder is a free PDF organised by the rejection email you actually received rather than by cause number. And if you want the exact error code your rejection cited mapped straight to the field that produced it, the A2P 10DLC rejection code index covers all 85 codes Twilio returns.

If you’d rather have software check all 27 of these against your specific submission, that’s what Easy A2P does. Pay-as-you-go credits, 3 free to start, no card required.

Frequently Asked Questions

What does TCR error code 30883 mean? +
Error 30883 is a Content Violation — TCR has determined that your campaign deals with content that's prohibited under A2P 10DLC registration terms. The catch-all category is SHAFT: Sex, Hate, Alcohol, Firearms, Tobacco. Cannabis, CBD, and hemp products fall under this rejection too despite not being literally in the SHAFT acronym. 30883 is INELIGIBLE for resubmission — you cannot fix it by rewriting the description. The remedy is either changing your business activity or moving to toll-free numbers, which have different content restrictions.
What does TCR error code 30884 mean? +
Error 30884 indicates your campaign was flagged as high risk for spam or phishing. This is typically triggered by sample messages that mimic phishing patterns (urgency language, suspicious links, fake-account-warning copy) or by campaign descriptions that suggest mass outreach to non-opted-in contacts. Unlike 30883, this is generally eligible for resubmission once the offending patterns are removed — you'll need to rewrite samples and the campaign description to remove anything that reads as deceptive.
What does TCR error code 30903 mean? +
Error 30903 is Incorrect Sole Prop Brand Registration. It fires when you register a Sole Proprietor brand but the business actually has an EIN (so it should be Standard tier), or vice versa — you registered Standard tier without a verifiable EIN. TCR cross-references against IRS records during vetting. The fix: re-register at the correct tier matching your actual entity status. If you have an EIN, register Standard tier. If you don't, register Sole Prop tier and remove any LLC/Inc/Corp suffix from the business name.
What does TCR error code 30932 mean? +
Error 30932 fires in GHL Trust Center when your Privacy Policy indicates that opt-in (mobile) data is shared with third parties for marketing or promotional purposes — the rejection maps to the Privacy Policy field. The fix is the TCR non-sharing clause: state explicitly in your Privacy Policy that mobile information will not be shared with third parties or affiliates for marketing/promotional purposes. Sharing with subcontractors that provide support services, such as customer service, is permitted. Carriers scan for this exact clause and reject the campaign when the policy is missing it or says the opposite. A closely related code, 30908 ('Compliant Privacy Policy Required'), covers the same non-sharing requirement when the Privacy Policy is missing, can't be verified, or omits the clause entirely rather than affirmatively allowing sharing — the fix is identical.
Is TCR error 9108 or 7103 the same as 30932 / 30908 for the Privacy Policy? +
They point at the same Privacy Policy non-sharing rejection under different labels. Some third-party A2P guides call it error 9108, or more recently 7103 ('Privacy Policy Allows Sharing'). Those labels don't appear in GoHighLevel's Trust Center or on Twilio's own error pages — there the same rejection surfaces as 30932 (Privacy Policy indicates opt-in data is shared with third parties for marketing) or 30908 ('Compliant Privacy Policy Required'). The fix is identical for every label: add the TCR non-sharing clause to your Privacy Policy, stating that mobile information will not be shared with third parties or affiliates for marketing or promotional purposes, with support subcontractors such as customer service permitted.
Why was my GoHighLevel A2P 10DLC campaign rejected without specific feedback? +
The campaign review process stops at the first issue it encounters and reports only that issue — even if your GHL Trust Center submission has multiple problems. So a rejection email citing 'vague campaign description' might also have a missing Privacy Policy clause and a non-compliant opt-in flow that aren't mentioned. Always review the entire submission against current standards, not just the cited issue, before resubmitting. The deeper issues will surface on the next attempt and waste another resubmission cycle. This is especially common for GHL agencies because Trust Center has multiple separate fields (Brand Registration, Campaign Description, Sample Messages, Opt-In Flow, Privacy Policy, Terms of Service) and an issue in any one of them can cause rejection.
Can I resubmit a rejected A2P 10DLC campaign? +
Most rejections are eligible for resubmission after fixes — you correct the issue and TCR re-reviews. Per GHL Help Center, resubmitting a rejected campaign is free (no additional Campaign Vetting Fee). The cost of each cycle is the time delay (1-3 days for Sole Prop, 3-15 days for Standard). The exceptions are content violations (error 30883) involving SHAFT content, cannabis, payday lending, third-party debt collection, and other permanently prohibited categories. These cannot be fixed by rewriting copy — the business activity itself is ineligible for 10DLC. The remedy in those cases is moving to toll-free numbers or, for some categories, changing the business model.
What's the difference between a brand rejection and a campaign rejection? +
Brand rejection means your business identity didn't pass TCR's vetting — issues with your EIN, legal name, address, website, or contact information. The brand has to be approved before any campaigns can run under it. Campaign rejection means the brand is fine but your specific messaging program (use case, sample messages, opt-in flow, consent text) didn't pass review. Campaign rejections happen far more often than brand rejections because there's much more to get wrong.
How long does it take to fix a TCR rejection? +
Fix time depends on the cause. Configuration issues like a wrong address or business name take minutes. Privacy Policy or Terms of Service rewrites take 30-60 minutes. Campaign description rewrites take 15-30 minutes. The waiting period for resubmission review is typically 1-3 business days for Sole Prop tier and 3-15 days for Standard tier. The total elapsed time from rejection to re-approval is usually 1-2 weeks if you fix all underlying issues on the first try, or 4-6 weeks if you have to cycle through multiple rejections because TCR only flags one issue at a time.
What does 'TCR vetting failed' mean for my brand? +
TCR vetting failed means your brand didn't pass The Campaign Registry's identity verification process. The vetting system cross-references your submitted business information (legal name, EIN, address, website) against IRS records, Secretary of State filings, public business databases, and your stated website. Any inconsistency — name mismatch, recent EIN, address that doesn't match registries, website that doesn't load — causes vetting to fail. The remedy is making everything consistent: your registered business name should match the IRS CP 575 letter exactly, the website should be live and display the business name, and the address should be findable in public records.
What does TCR error code 30940 mean? +
Error 30940 is a granular content-rejection code, live since March 23, 2026, that Twilio labels 'Cannabis, CBD, or illegal substance content detected.' It fires on cannabis, CBD, marijuana, or controlled-substance content, and per Twilio the rejected campaign is not eligible for resubmission — the prohibition applies regardless of state-level legality. The rejection reads your business activity and website, not just your sample messages, so deleting a word like 'CBD' won't clear it. The realistic path is toll-free messaging, which has a different content review.
What replaced TCR error codes 30883, 30884, 30885, and 30897? +
Nothing replaced them. As of March 23, 2026, GoHighLevel and The Campaign Registry added granular per-reason codes alongside the broad ones, which are still active. Content and activity rejections may now surface as a specific code in the 30940–30964 range: 30940–30952 cover prohibited activities (cannabis, prescription drugs, loans, debt collection, gambling, crypto, lead-gen and MLM, and more), 30953–30958 cover SHAFT content (sex, hate, alcohol, firearms, tobacco), and 30959–30964 cover high-risk and deceptive patterns (fraud, phishing, deceptive marketing, public URL shorteners, and non-HTTPS links). The older broad codes still appear on some rejections.
Are the granular A2P codes (30940–30964) eligible for resubmission? +
On their own Twilio error pages, every code in the 30940–30964 range states that the rejected campaign is not eligible for resubmission. For the content and activity codes (30940–30962), that is because the underlying business activity is prohibited on 10DLC — rewriting copy will not help, and the realistic path is toll-free messaging. The two near-exceptions are formatting problems rather than prohibited content: 30963 (a public URL shortener like bit.ly) and 30964 (an http link). You still cannot resubmit the rejected campaign, but the fix is trivial — use a branded domain over HTTPS — so you register a clean new campaign.
I got a TCR error code in the 309xx range — what do I do? +
First find which bucket it is in. The procedural codes (30886 vague description, 30887 opt-out, 30888 age gate, 30889 embedded number, 30890 HELP, 30903 Sole Prop tier, 30909 consent and CTA, and 30932 and 30908 for the Privacy Policy non-sharing clause) are fixable — correct the named field and resubmit for free. The content and activity codes (30940–30962) are terminal: the business activity itself is ineligible for 10DLC, so no rewrite clears them. The only near-fixes are 30963 (swap a public URL shortener for a branded domain) and 30964 (move links to HTTPS), which you correct by registering a new campaign.
Can I upload my CP-575 to GoHighLevel to fill in my brand details? +
Yes. On the Business Details step of Trust Center, EIN (Standard-tier) brands can drag and drop the IRS CP-575 PDF (max 5MB), and Trust Center auto-prefills the legal business name, EIN, and registered business address from the letter — per GoHighLevel's Standard Brand registration guide. It's the surest fix for the legal-name mismatch, the most common brand-side rejection, because you hand Trust Center the source document instead of retyping the name. Still confirm the prefilled legal name is the first line of the letter before continuing.
What do I do if I lost my CP-575 letter for A2P registration? +
The IRS does not reissue the CP-575 — once it's issued, that letter is never printed again. Request a 147C letter instead by calling the IRS Business & Specialty Tax Line at 800-829-4933; it's free and carries the same legal name, EIN, and address. Use the 147C anywhere A2P registration asks for the CP-575: the exact-match legal name in GHL Trust Center, the $11 EIN vetting appeal, and the CP-575 upload/prefill flow. Submit only the first line of the letter as your legal business name.
What legal business name do I enter from my CP-575 or 147C letter? +
Enter the first line of the IRS letter, exactly as printed. Per GoHighLevel's brand-approval guidance, submit "ACME LLC" — not "ACME LLC Theresa Lopez-Fitzgerald MBR" — because the responsible-party line can cause rejections. If the legal name genuinely wraps onto more than one line above the address, enter all lines above the address line as the single legal name. Match it character-for-character, including the entity suffix and any punctuation the IRS record shows.

Get notified when we publish new guides

Pillar guides on TCR rejection codes, GHL Trust Center walkthroughs, and industry-specific A2P 10DLC registration — delivered when they go live. No spam, unsubscribe anytime.

Stop guessing whether your A2P submission will pass.

Easy A2P reviews your full submission against current TCR and GHL standards before you submit. Catch the rejection causes others miss — including the Sole Proprietor traps in this guide.

Try Easy A2P with 3 free credits →

No credit card · ~90 seconds to review · pay-as-you-go after