The A2P 10DLC rejection code index for GoHighLevel (2026)
Every GoHighLevel A2P rejection surfaces as a Twilio error code, and this index maps all of them: the broad 308xx codes, the 30910 to 30937 policy and consent codes (including 30923, consent required for service use), the March 2026 granular 30940 to 30964 range, each code's verbatim Twilio label, the exact Trust Center field it points to, and whether you can resubmit or the campaign is terminal. Dated and kept current.
In GoHighLevel, every A2P 10DLC rejection comes back as a numeric Twilio error code, and the code tells you both what tripped and whether you can fix it. This index lists all of them: the code, its verbatim Twilio label, the exact Trust Center field it points to, and whether resubmitting will work.
Last verified: 2026-07-22 against Twilio’s full error dictionary. That sweep pulled every documented code in the 30880 to 30972 range (85 of them) and each code’s own page, which is how the 30910 to 30937 policy codes below joined this index. This page is a living reference. When Twilio adds or relabels a code, the row and the date change with it.
How to read a GHL rejection
GoHighLevel runs A2P registration on Twilio underneath, so a rejection in Trust Center arrives as a Twilio error code in the 308xx or 309xx range. Each code maps to one of three outcomes:
- Fixable. Correct the named field and resubmit. Resubmitting a rejected campaign is free, per GHL’s Help Center; the cost is the wait (1 to 3 days for Sole Prop, 3 to 15 days for Standard).
- Formatting near-fix. The rejected campaign cannot be resubmitted, but the cause is a URL choice, not a prohibited activity. Fix the URL and register a clean new campaign.
- Terminal. The business activity itself is ineligible for 10DLC. No rewrite clears it; the realistic path is toll-free messaging.
And a handful of codes are none of the three: they are pipeline statuses, not rejections at all. Those get their own table below.
The full explanation of each cause, with example copy and the field-by-field fix, lives in the narrative pillar, Every TCR rejection reason in GoHighLevel, explained. This page is the lookup layer: find your code, get the field and the verdict, then jump to the pillar for the walk-through.
One structural fact worth knowing before you start: the review stops at the first problem it finds and reports only that one. Your submission may have more issues waiting behind the cited code. Fix the whole thing, not just the line in the email.
Fixable codes (correct the field, resubmit free)
These are the procedural rejections. The field named is the GHL Trust Center field where the fix goes.
| Code | Twilio label | GHL Trust Center field | Resubmit? |
|---|---|---|---|
| 30880 | Unknown Error | No single field named; check for companion codes | Yes, after fixing whatever the companion codes name |
| 30881 | Invalid Brand Support Email | Brand Registration (support email) | Yes, with a real business-domain email, never the agency’s |
| 30882 | Terms & Conditions | Terms of Service page + URL | Yes, after publishing a public Terms page with the SMS clauses |
| 30886 | Invalid Campaign Description | Campaign Description (Use Case Description) | Yes, after rewriting the description |
| 30887 | Opt-out Error | Sample Messages (STOP language) | Yes, after adding opt-out wording |
| 30888 | Age Gate Not Present / Not Acceptable | Opt-In Flow (age verification) | Yes, after adding a real age gate |
| 30889 | Embedded Phone Number | Sample Messages vs the embedded phone number setting | Yes, after matching the setting to the samples (numbers in samples if enabled, setting off if not) |
| 30890 | Subscriber Help info inadequate | Sample Messages (HELP reply) | Yes, after improving the HELP message |
| 30892 | Invalid Sample Message - Public URL Shorteners | Sample Messages (links) | Yes, after swapping to a branded HTTPS domain |
| 30893 | Inconsistency between Sample Message and Use-case | Sample Messages vs use case | Yes, after aligning samples with the declared use case |
| 30894 | Invalid Brand Information | Brand Registration vs Campaign Description | Yes, after registering under the client’s brand, not the agency’s |
| 30895 | Direct Lending - Campaign and Content Attribute Error | Campaign attributes (Direct Lending) | Yes, after declaring the direct-lending option or removing lending language |
| 30896 | Opt-in Error | Opt-In Flow Description | Yes, after spelling out exactly how consent is collected |
| 30898 | Excessive EIN | Brand Registration | Yes, after consolidating brands or justifying the reuse |
| 30899 | Campaign registration failed due to carrier rejection(s) | Whichever field the attached carrier codes name | Yes, after fixing the specific carrier findings |
| 30902 | A DCA2 rejected this campaign registration request | No single field named; review the whole submission | Yes, after a full pass over description, samples, and opt-in |
| 30906 | Campaign Rejected by Twilio | No single field named; review the whole submission | Yes, after a full pass over description, samples, and opt-in |
| 30903 | Incorrect Sole Prop Brand Registration | Brand Registration (tier) | Yes, after re-registering at the correct tier |
| 30908 | Compliant Privacy Policy Required | Privacy Policy | Yes, after adding or making verifiable the non-sharing clause |
| 30909 | Message Flow or Call to Action incomplete/unverified | Opt-In Flow Description + consent | Yes, after fixing the opt-in form and consent disclosure |
| 30932 | Privacy policy must disclose third-party data sharing | Privacy Policy | Yes, after adding the non-sharing clause |
The policy and consent codes (30900 to 30937)
These arrived alongside the granular content range and cover submission policy, consent structure, and identity matching. Unlike the 30940s, nearly every one is fixable: correct the named field (or re-scope the use case) and resubmit. Labels are verbatim from Twilio’s dictionary.
| Code | Twilio label | GHL Trust Center field | Resubmit? |
|---|---|---|---|
| 30900 | The campaign use case is ineligible for registration | Campaign Use Case | Yes, after re-scoping to an eligible use case |
| 30910 | A2P 10DLC campaigns must be submitted in English | Whole submission | Yes, in English (you can still send in other languages) |
| 30911 | Duplicate template text; each field must be unique | Sample Messages | Yes, after making each field distinct |
| 30912 | A2P 10DLC is for application-to-person messaging only | Campaign Use Case | Yes, after describing an actual A2P program |
| 30913 | Marketing and informational consent must be separate | Opt-In Checkboxes | Yes, after splitting into two separate checkboxes |
| 30914 | Sole proprietor campaign title does not match sole proprietor name | Brand Registration (Sole Prop) | Yes, after matching the title to the registered individual |
| 30915 | Sole proprietor must use individual’s name, not business name | Brand Registration (Sole Prop) | Yes, under the person’s legal name |
| 30916 | Use case mismatch between lead generation and lead nurture | Campaign Use Case | Yes, after aligning the use case with the actual program |
| 30917 | All opt-in methods must include complete workflow descriptions | Opt-In Flow Description | Yes, after describing every method end to end |
| 30918 | DBA name does not match the legal business name on file | Brand Registration | Yes, after reconciling DBA and legal name |
| 30923 | Message consent cannot be required for service use | Opt-In Flow / Checkboxes | Yes, after unbundling consent from signup (details below) |
| 30924 | Missing or non-compliant consent agreement language in opt-in flow | Opt-In Flow / Checkboxes | Yes, after adding the full consent disclosure |
| 30925 | Opt-in must be unchecked by default; active consent required | Opt-In Checkboxes (live form) | Yes, after fixing the live form |
| 30926 | Multiple companies cannot share a single campaign | Campaign / Brand structure | Yes, one brand and one campaign per client |
| 30927 | Opt-in evidence is for a different company | Opt-In Flow (brand match) | Yes, with proof that names this brand |
| 30928 | Social influencer/public figure use case not permitted | Campaign Use Case | Yes, after re-scoping away from influencer promotion |
| 30929 | Emergency alert notifications are not a permitted use case | Campaign Use Case | Yes, under the EMERGENCY special use case (extra carrier review) or re-scoped |
| 30930 | Brand campaign limit of 100 reached | Brand Registration | No; consolidate campaigns or register another brand |
| 30931 | Opt-in process must allow consumers to decline | Opt-In Flow | Yes, after giving users a real way to say no |
| 30933 | Privacy Policy URL is required for A2P 10DLC campaign registration | Privacy Policy URL | Yes, after publishing and linking the policy |
| 30934 | Terms and Conditions URL is required for A2P 10DLC campaign registration | Terms of Service URL | Yes, after publishing and linking the terms |
| 30936 | HELP keyword response must meet requirements | HELP response | Yes, with brand name, support contact, and instructions |
| 30937 | Phone number limit exceeded for registration | Campaign phone numbers | Yes, after reducing the numbers on the campaign |
30933 and 30934 are the codes behind the Privacy Policy URL and Terms & Conditions URL fields that became required in GHL’s Campaign Details, the change we covered when it landed. 30913 is the two-separate-checkboxes rule wearing its own number.
Website verification codes
The reviewer visits your website. If it cannot be verified, these fire. They are website fixes, not copy fixes.
| Code | Twilio label | What tripped | Resubmit? |
|---|---|---|---|
| 30891 | Invalid Website URL | Site down, unreachable, or opt-in not findable | Yes, once the site is live and shows the opt-in |
| 30907 | Website URL Validation Issue | URL could not be verified | Yes, once the URL loads publicly |
| 30919 | Website lacks sufficient business or messaging use case info | Reviewer could not tell what the business does | Yes, after adding real business and messaging context |
| 30920 | Website is only a form; insufficient business context | Landing-page-only site | Yes, after adding business content beyond the form |
| 30921 | Website requires authentication and cannot be reviewed | Login wall | Yes, after making a public page available (or hosting an opt-in screenshot at a public URL) |
| 30922 | Website does not meet campaign verification requirements | General website failure | Yes, after addressing the above |
Statuses, not rejections
Four codes in this range are pipeline states. Nothing in your copy caused them and no copy change clears them.
| Code | Twilio label | What it means | What to do |
|---|---|---|---|
| 30901 | The campaign registration request timed out | Processing timeout, though reviews often stall on thin or inconsistent submissions | Tighten anything incomplete, then resubmit |
| 30904 | Campaign Not Shared with Twilio | The campaign never reached the reviewing platform | Contact GHL support to re-share it |
| 30905 | Campaign Review Pending by Twilio | Still in review | Wait it out |
| 30935 | Verification - Requested Cancellation | A cancellation you asked for was processed | Nothing, unless you want to re-register |
Terminal content codes (broad)
These predate the granular range and are still active. A content rejection may surface as one of these or as a specific 30940 to 30964 code below.
| Code | Twilio label | GHL Trust Center field | Resubmit? |
|---|---|---|---|
| 30883 | Content Violation (SHAFT, cannabis/CBD, prohibited categories) | Campaign content and declared business activity | No, terminal |
| 30884 | Spam/Phishing (known spam or phishing pattern) | Campaign Description + Sample Messages | No in current form; rework materially or appeal |
| 30885 | High Risk (potentially fraudulent activity) | Campaign content | No in current form; appeal or a substantially different approach |
| 30897 | Disallowed Content | Campaign content and declared business activity | No, terminal |
The March 23, 2026 granular codes (30940–30964)
On March 23, 2026, GoHighLevel and The Campaign Registry rolled out per-reason content codes in the 30940 to 30964 range. Per GHL’s Understanding A2P campaign rejection reasons and required fixes article, the granular codes “provide more precise rejection reasons compared to previous general codes.”
Two things to hold onto. They are additive, not a rename: the broad codes above are still live, so treat this as a crosswalk. And almost every one is terminal, because the code keys off your declared business activity and website, not the wording of a single message. A wellness brand that gets 30940, deletes “CBD” from its samples, and resubmits gets 30940 again. Each label below is quoted verbatim from its own page in Twilio’s error dictionary.
Prohibited business activity or content (30940–30952):
| Code | Twilio label | Resubmit? |
|---|---|---|
| 30940 | Cannabis, CBD, or illegal substance content detected | No |
| 30941 | Prescription drug or controlled substance content detected | No |
| 30942 | Loan marketing content detected | No |
| 30943 | Third-party debt collection content detected | No |
| 30944 | Gambling or betting content detected | No |
| 30945 | Sweepstakes or contest content detected | No |
| 30946 | Stock alert content detected | No |
| 30947 | Cryptocurrency content detected | No |
| 30948 | High-risk investment content detected | No |
| 30949 | Debt reduction or consolidation content detected | No |
| 30950 | Credit repair content detected | No |
| 30951 | Third-party lead generation or MLM content detected | No |
| 30952 | Non-federally compliant use case detected | No |
SHAFT content (30953–30958):
| Code | Twilio label | Resubmit? |
|---|---|---|
| 30953 | Sex or adult content violation detected | No |
| 30954 | Hate speech or violent content detected | No |
| 30955 | Alcohol promotion content detected | No |
| 30956 | Alcohol content without required age verification detected | No |
| 30957 | Firearms or explosives content detected | No |
| 30958 | Tobacco or vape content detected | No |
High-risk or deceptive (30959–30964):
| Code | Twilio label | Resubmit? |
|---|---|---|
| 30959 | Fraudulent or misleading content detected | No |
| 30960 | Known phishing campaign detected | No |
| 30961 | High-risk domain reputation detected | No |
| 30962 | Deceptive marketing practices detected | No |
| 30963 | Public URL shortener detected in campaign | No |
| 30964 | Non-secured URL (http) detected | No |
The last two are the only easy escapes. Twilio still marks the rejected campaign not eligible for resubmission, but the cause is a formatting choice. 30963 fires on public link shorteners like bit.ly or tinyurl, so swap to a branded or dedicated domain. 30964 fires on non-secure http links, so switch to https. Correct the URL, register a clean new campaign, and you are through.
Per-code fixes for the ones you can actually fix
The terminal codes have no fix on this platform. These do. Each links to the full walk-through in the pillar.
30909, message flow or CTA incomplete
The most common opt-in and consent rejection. It fires when consent collection is not documented at the opt-in URL you submitted, or a required CTA disclosure element is missing. Fix the opt-in form itself: two separate unchecked consent checkboxes, the mandatory disclosures, and links to your Privacy Policy and Terms of Service on the form. See the opt-in and consent pillar for the full CTA disclosure list.
30932 and 30908, the Privacy Policy non-sharing clause
30932 fires when your Privacy Policy says opt-in data is shared with third parties for marketing, or omits the non-sharing statement. 30908 (“Compliant Privacy Policy Required”) is the same requirement when the policy is missing, cannot be verified, or leaves the clause out. The fix for both is the TCR non-sharing clause: state that mobile information will not be shared with third parties or affiliates for marketing or promotional purposes, and that sharing with support subcontractors such as customer service is permitted. The exact paragraph and where it goes are in the Privacy Policy and Terms of Service templates guide.
30903, incorrect Sole Prop registration
Your registration tier does not match your entity. You filed Sole Prop but the business has an EIN (should be Standard), or you filed Standard but the EIN cannot be verified. Re-register at the tier that matches reality. If you have no EIN, register Sole Prop and drop any LLC, Inc, or Corp suffix from the name. The Sole Proprietor guide covers the full walkthrough.
30886, invalid campaign description
The Use Case Description is generic or echoes the dropdown label. Name the actual message types the business sends. “Appointment reminders for property tours, listing alerts, and open-house follow-ups” passes where “various updates” does not.
30890, subscriber HELP inadequate
Your HELP reply lacks the brand name, a support contact, or clear assistance instructions. Add all three to the HELP auto-response and resubmit. The related 30936 fires on the same requirement when the HELP keyword response itself falls short.
30923, consent required for service use
The most misunderstood code in the range, because it regularly hits businesses doing something completely normal: requiring phone verification at signup. The error text names the trigger directly: consent to receive messages cannot be a required condition for “using your service, creating an account, or completing a transaction.”
Here is the part that trips people. Reviewers never see your app. They read your opt-in description and message_flow, and if those say “user agrees to receive SMS to sign up,” it reads as a gate whether the payload is a marketing blast or a one-time passcode. The fix is wording plus structure:
- For marketing and notification streams, make consent optional and separate from signup, and say so: “Consent is not a condition of purchase.”
- For user-requested verification codes (2FA, login, account recovery), drop the consent checkbox entirely. The user entering their number and tapping the button is the consent. A checkbox that gates a required code is required by definition, which manufactures the exact violation you are trying to clear.
- Describe the flow as a literal action with the URL: “User enters their number at [url] and taps Send verification code. One code is sent in direct response. No recurring or promotional messages.”
- Register strictly as 2FA if that is what the campaign is. Broader use cases invite the bundled-consent read.
Requiring phone verification to create an account is fine. Every bank does it. What cannot be required is standing consent to a message stream.
30913, 30924, 30925, and 30931, the rest of the consent cluster
Four codes, one theme: consent has to be a real, separate, active choice. 30913 fires when marketing and informational consent share a checkbox, so split them — it is common enough that we gave it its own write-up. 30924 fires when the consent disclosure is missing or does not cover what you send, so put the full disclosure at the point of opt-in. 30925 fires when the live form’s box is pre-checked, and reviewers check the actual form at your URL, not just your pasted copy. 30931 fires when there is no way to decline at all. If you fix one, check the other three while you are in there, because the review stops at the first problem it finds.
Brand rejections that arrive without a granular code
Not every rejection carries a 309xx number. Brand-side vetting failures (a legal name that does not match IRS records, a PO Box address, a DUNS number entered where an EIN belongs, a non-US entity) often come back as a plain “vetting failed” or “unverified” state. When brand problems do carry codes, they are 30881 (support email), 30894 (brand information mismatch), 30898 (excessive EIN), 30903 (Sole Prop tier), 30914 and 30915 (Sole Prop naming), 30918 (DBA mismatch), and the two contact codes 30971 (business email must use the official domain) and 30972 (contact must be an authorized business representative). The other brand causes, and their fixes, are numbered 1 through 10 in the rejection pillar.
If you want this in a form you can keep beside you
This page is organised by code, which is what you want when you have a number in front of you. If you would rather work from the wording of the email itself, the TCR Rejection Decoder is a free PDF that starts from the rejection message and walks to the field that caused it. For the underlying causes in full prose — all of them, with the fix for each — see every TCR rejection reason explained.
Where Easy A2P fits
Easy A2P reads your Trust Center copy before you submit and reports back what tripped a rule and how to fix it, across all ten Trust Center sections (Brand Registration, Campaign Description, both Sample Messages, Opt-In Flow Description, Opt-In Confirmation Message, both consent checkboxes, and the Privacy Policy and Terms of Service SMS sections). A Review (1 credit) gives you findings plus specific remediation guidance. When you want the rewritten copy handed to you paste-ready, Draft mode (2 credits) or Fix My Copy (1 credit) does that. We do not approve anything; the carriers and their review chain do that. We help you ship it clean the first time. Review your submission with 3 free credits.
Frequently Asked Questions
Why was my A2P 10DLC campaign rejected in GoHighLevel? +
What does TCR error 30932 mean? +
Are the granular codes 30940 to 30964 eligible for resubmission? +
Can I resubmit a rejected A2P campaign for free? +
Which A2P rejection codes are terminal? +
What does Twilio error 30923 mean? +
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