Easy A2P

← Back to Blog

Rejection Causes April 13, 2026 · Gary Vogt · Updated June 10, 2026

Why TCR Rejects A2P 10DLC Campaigns for Missing STOP Language (And 3 Other Mistakes That Kill Approval)

Your client's A2P 10DLC campaign just got rejected. Again. And TCR didn't bother telling you why.

Ninety percent of the time, it's not a mystery. It's one of four mistakes I see over and over with GHL agencies. The number one offender is missing STOP language. The fix takes about 30 seconds once you know what TCR is actually looking for.

Here's what to check before you hit submit.

Smartphone showing an SMS message that includes STOP opt-out language

What TCR wants for STOP language

Every campaign you register gets sampled in two places: your sample messages and your Terms of Service. Both need to tell recipients they can cancel by replying STOP. Two contexts, slightly different wording, and getting them mixed up is one of the most common reasons campaigns come back rejected — see our full breakdown of every TCR rejection reason.

Sample messages: any STOP language works, but GHL templates use "unsubscribe"

This is the part most agencies overthink. The thing that actually matters to TCR is whether STOP language is present in your sample. Either "Reply STOP to unsubscribe" or "Reply STOP to opt out" satisfies that. There's no published TCR rule that one is correct and the other gets you rejected, and other aggregators treat both as acceptable.

That said, GHL's documented sample templates use "unsubscribe" specifically (even though GHL uses "opt out" elsewhere, like in checkboxes). Matching their exact phrasing isn't required for approval, but it removes one variable a reviewer could question. Use "unsubscribe" in your samples if you want to perfectly mirror GHL's templates. Use "opt out" if you prefer it. Either is likely to pass.

Both fine: Hi Sarah, your appointment is confirmed for Tuesday at 2pm. ABC Dental. Reply STOP to unsubscribe.
Also fine: Hi Sarah, your appointment is confirmed for Tuesday at 2pm. ABC Dental. Reply STOP to opt out.
Actual rejection cause: Hi Sarah, your appointment is confirmed for Tuesday at 2pm. ABC Dental. (No STOP language at all.)

Terms of Service: make STOP unconditional

Your ToS has to make STOP universal, not scoped to one type of message. The FCC's "revoke-all" consent rule — currently scheduled to take effect January 31, 2027 after multiple postponements — will require a single STOP request to apply to all messages from a sender. Carriers and TCR are already encouraging this ToS language ahead of the deadline. Scoping STOP to "marketing messages" implies the rest will keep coming, which the new rule won't allow.

Future-proof: Reply STOP at any time to cancel all messages.
Risky going forward: Reply STOP to stop receiving marketing messages.

Opt-in checkboxes: GHL's templates use "Reply STOP to opt out"

GHL's documented checkbox templates use "opt out" while their sample message templates use "unsubscribe." Either word communicates the same thing and there's no published TCR rule requiring one over the other in either context. Matching GHL's exact phrasing in each spot just removes one variable a reviewer could question. Use "opt out" in checkboxes if you want to mirror their templates exactly. If you have an existing form that uses "unsubscribe" in the checkbox and a sample that uses "opt out," neither is a known auto-reject on its own.

The 3 other instant-rejection mistakes

1. Merge field placeholders left in samples

Leaving {{contact.first_name}} or {{location.name}} in your submitted samples is an automatic reject. TCR is looking at what the recipient will actually see, and unreplaced merge fields look like broken code to a reviewer.

The fix: use real example data — "Hi Sarah, your appointment is confirmed…" with a real name, a real date, the real business name — or GHL's documented bracket notation like [Customer Name], which passes review. The auto-reject is specifically curly-brace merge fields: real data is strongest, brackets are accepted, {{merge_fields}} fail.

2. Missing business name in samples

Every sample should include the sending business's name (legal or DBA, depending on which one your customers actually recognize). "Your appointment is tomorrow at 3pm. Reply STOP to unsubscribe." That message doesn't tell the recipient who's texting them. CTIA messaging principles require sender identification — TCR's floor is that your samples identify the business, and in practice the safe play is putting the name in every one.

The fix: every sample gets the business name in it, either at the start ("ABC Dental: …") or end ("… ABC Dental."). If the business uses a DBA, use the DBA. That's the brand customers know.

3. Required consent checkbox

If the user can't submit your lead form without checking the SMS consent box, that's coerced consent. TCR treats coerced consent as no consent. The checkbox has to be unchecked by default and optional. The user needs to be able to become a lead without agreeing to SMS.

The fix: in GHL form settings, mark the consent checkbox as Optional and not pre-checked. If you've combined marketing and non-marketing consent (like "appointment reminders") into one checkbox, split them. TCR rejects combined boxes too.

Why these mistakes are so common

GHL's default form templates pre-fill a lot of this for you. But the defaults aren't TCR-safe in every case. Agencies who build custom forms, modify snippets, or import templates from other CRMs almost always end up with at least one of these four traps.

The frustrating part: TCR commonly returns vague rejection feedback like "campaign description issue" or "opt-in flow issue" without naming the specific rule that failed. Carriers and aggregators have publicly acknowledged the pattern — as aggregator Telgorithm puts it, "TCR often rejects a campaign based on the first issue they encounter, potentially overlooking other issues, and users shouldn't focus solely on the rejection reason as they might correct that issue, resubmit, and face rejection again for a different reason." Each rejection cycle adds 1-3 days (Sole Prop) or 3-15 days (Standard) before your client can send messages, and repeat rejections invite closer scrutiny on future submissions.

The 30-second pre-submit check

Before you click submit in the GHL Trust Center, confirm:

Get your campaign pre-checked before TCR sees it

Easy A2P runs every line of your A2P 10DLC submission through a deterministic rule library built from TCR's documented rejection causes — STOP language, merge fields, business name, checkbox structure, ToS clauses, Privacy Policy, and 100+ other checks. You get a pass/warn/fail score for each section before you submit, not days after.

The first 3 reviews are free. No card.

Start your free review

Written by Gary Vogt

Builder of Easy A2P — a registration toolkit built for GoHighLevel agency owners

Join the Beta