Easy A2P Learn

Pillar Guide

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

A complete reference for every TCR rejection cause hitting GoHighLevel agencies — what each error code means in plain English, the GHL Trust Center field that triggered it, and the exact fix. Brand-side, campaign-side, and the content violations permanently ineligible for resubmission.

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.

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

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

TCR stops at the first issue

When TCR reviews your submission, the system halts as soon as it 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.

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.

2. EIN issued less than 15 days ago

Trigger: TCR cannot verify EINs that are less than 15 days old. The IRS public database doesn’t update immediately.

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

Fix: Wait until the 15-day window has elapsed since IRS issuance, then resubmit. If you absolutely need to launch sooner, TCR allows manual review with an $11 vetting appeal fee plus a copy of your full IRS CP 575 PDF — but this is slow and not always granted. The cheaper path is waiting.

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 TCR rejects this: 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 TCR 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 the 15-day EIN waiting period, 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 TCR wants: 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}}. TCR 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.”

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

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.

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 TCR 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 TCR rejects a campaign that 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

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.

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 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.
Why was my GoHighLevel A2P 10DLC campaign rejected without specific feedback? +
TCR's 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.

Get notified when we publish new guides

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

Stop guessing whether your A2P submission will pass.

Easy A2P validates 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 validate · pay-as-you-go after