Easy A2P Learn

Pillar Guide

Sample Messages That Pass A2P 10DLC: Compliant SMS Templates for GoHighLevel Agencies

Curly-brace merge fields left in sample messages are the #1 documented A2P 10DLC rejection cause. This guide gives you paste-ready compliant sample messages for every GHL use case — Marketing, Mixed, Account Notification, Customer Care, Delivery Notification, and 2FA — plus the 5 things every sample must include and the 6 patterns that auto-fail TCR review.

By Gary Vogt · · 16 min read

If you run a GoHighLevel agency and have ever submitted an A2P 10DLC campaign, you know how much weight TCR puts on the two sample messages you paste into Trust Center. They’re the smallest fields on the form, but they fail more registrations than any other section — and the failures are usually preventable. This guide walks through every pattern that gets sample messages approved, every pattern that auto-fails, and gives you paste-ready compliant samples for every GHL use case.

The short version

Every compliant A2P 10DLC sample message includes four elements:

  1. Identification of the sender by actual business name (not “us,” “we,” or “your team”)
  2. Specific message content showing the kind of message the campaign actually sends
  3. A name placeholder that’s either a real example “Hi Sarah” or square brackets [Customer Name] — never curly braces
  4. STOP to unsubscribe language in both samples

If your samples have all four elements and align with your registered use case, they pass. If they’re missing any element, they fail — and “Sample Messages” is the section TCR reviewers reject most often.

Why sample messages drive the #1 rejection cause

Across thousands of GHL agency submissions, the single most documented rejection trigger is curly-brace merge field variables left unfilled in sample messages. Patterns like {{contact.first_name}}, {{location.name}}, and {{user.email}} get pasted directly from GHL workflow templates into the Trust Center sample fields, and TCR reviewers see them as broken code. The system has no way to know whether {{contact.first_name}} is a placeholder or actual content the user intended to submit.

The fix is trivial in concept: replace the curly-brace variables with either real example names or square-bracket placeholders. But because most agency owners build their workflow templates with curly braces and copy-paste them into Trust Center, the mistake happens constantly. We covered this in the 27 TCR rejection causes guide but it’s worth repeating: this is the easiest rejection to avoid and the most common rejection to receive.

The five things every compliant sample message must include

Different from the four elements above (which describe what’s IN the sample), these are the five things the sample as a unit must demonstrate to TCR:

1. Specific business name in the body

The sample must identify the actual business sending the message. “from [Business Name]” or “from [Brand Name]” is acceptable when the brackets get filled with a real name. “from us,” “from our team,” “from your dental office,” and other generic phrasings are not. The reviewer needs to be able to read the sample and identify which registered brand the message originates from.

Use the consumer-facing brand — the name your recipients will actually see on the message. For most businesses without a DBA, that’s the legal entity name (matching the Brand Registration record). For businesses operating under a DBA, that’s the DBA — provided you’ve declared the relationship in the Campaign Description with “We are doing business as [DBA Name].” Per GHL’s Understanding A2P Campaign Rejection Reasons & Required Fixes article, sample messages that use the DBA are compliant when the relationship is declared. Without the declaration, the sample-vs-brand mismatch reads as a use-case inconsistency.

For Sole Proprietor brands, the business name is the proprietor’s legal name (or a state-registered DBA on file) — see our Sole Proprietor guide for the rules. For Standard tier brands, samples can use the legal name or the DBA per the rule above.

2. Specific message content

A sample that says “Reminder from Acme Dental” with no further content tells the reviewer nothing. Samples need to show what the message actually communicates: which appointment, what offer, which order, what update. The more specific the content, the easier the alignment check between sample and use case becomes.

3. A name placeholder in compliant format

Three options, in order of cleanest to most fragile:

  • Real example name: Hi Sarah, or Hello Marcus, — what the message will look like once personalized for a real recipient
  • Square-bracket placeholder: Hi [First Name], or Hello [Customer Name], — explicitly accepted by GHL Trust Center
  • No personalization: Hi there, — works but reads less natural and limits how the rest of the sample can reference the recipient

What’s never accepted: curly-brace template variables like {{contact.first_name}}. These look like broken code to TCR reviewers and cause automatic rejection. If your GHL workflow uses curly braces (which is GHL’s native merge-field syntax), strip them before pasting into Trust Center sample fields. The curly braces are for the actual production messages your campaign sends; the samples should show what the personalized output looks like.

4. STOP opt-out language

At minimum, STOP opt-out language must appear in at least one of your two samples. Best practice is to include it in both — that’s what GHL Trust Center’s own template samples do, and it eliminates any reviewer guesswork about which sample is the canonical one.

GHL Trust Center samples use “Reply STOP to unsubscribe” and “Reply STOP to opt-out” interchangeably; both pass review. The one common exception is 2FA samples, which the user receives only when they trigger them via login or transaction — STOP is acceptable but not always present in 2FA templates because the messaging is user-initiated rather than ongoing.

5. Use case alignment

If the campaign is registered as Marketing, both samples must be promotional content. If it’s registered as Customer Care, the message must be related to that use case. Mixed campaigns can have both promotional and transactional samples — but they should be in clearly separate samples, not combined into one. We covered the use case framework in detail in How to Choose the Right A2P 10DLC Use Case.

A quick terminology note that confuses a lot of agency owners: in A2P 10DLC contexts, “transactional” doesn’t refer to a sales transaction the way it does in marketing-speak. It’s a catch-all for all the non-promotional use cases — appointment reminders, account notifications, customer care responses, delivery updates, 2FA codes, security alerts. Anything that isn’t promotional content is treated as “transactional” for use-case-alignment purposes.

The use case alignment check is what catches Marketing campaigns submitted with appointment reminders, or Customer Care campaigns submitted with promotional offers. The reviewer reads samples as the canonical demonstration of what the campaign actually sends.

The six patterns that auto-fail

These are the patterns that consistently cause sample-message rejection in GHL agency submissions:

  1. Curly-brace merge fields: {{contact.first_name}}, {{custom_value.appointment_time}}, {{user.email}}. The #1 documented cause.

  2. Deceptive eligibility language: “You’ve been selected,” “Congratulations, you qualify,” “You may have been pre-approved,” “You are one of the few,” “Exclusively selected.” These mimic phishing patterns and violate CTIA guidelines on deceptive language. Auto-fail even when the sample is otherwise compliant.

  3. Use case mismatch: Promotional content in a non-marketing campaign, or transactional content in a Marketing campaign. The samples must match the registered use case.

  4. Missing STOP language in both samples: At least one sample must include opt-out instructions. Submitting two samples that both lack STOP language causes rejection.

  5. Generic brand identification: “from us,” “from our team,” “from [Generic Service].” TCR needs to identify the specific registered brand from the sample text.

  6. Insufficient sample count: Every GHL Trust Center campaign requires two distinct sample messages — Mixed, Marketing, and every non-marketing category (Customer Care, Account Notification, Delivery Notification, 2FA). Submitting only one sample causes rejection regardless of use case.

Mixed campaigns: two distinct samples, never combined

If your client’s campaign is registered as Mixed (or Low Volume Mixed), you need two sample messages that show the two sides of the program. The most common mistake is combining both content types into one sample:

❌ “Hi Sarah, your dental cleaning is confirmed for Tuesday at 2pm. Save 20% on whitening through Friday with code BRIGHT20. Reply STOP to opt-out.”

This combined message creates a use case mismatch because TCR reads it as either Marketing (the offer) or Customer Care (the appointment confirmation) — and registers an error if the campaign is Mixed. The compliant approach is two separate samples:

✓ Sample 1 (transactional): “Hi Sarah, your dental cleaning with Acme Dental is confirmed for Tuesday at 2pm. Reply 1 to confirm or call us to reschedule. Reply STOP to opt-out.”

✓ Sample 2 (promotional): “Save 20% on whitening at Acme Dental through Friday with code BRIGHT20. Book online at example.com/whitening. Reply STOP to opt-out.”

This pattern — one transactional, one promotional, both with brand name and STOP language — is exactly what TCR reviewers expect to see for Mixed campaigns. It also documents that your client’s program legitimately sends both content types, which is what justifies the Mixed registration in the first place.

We covered the consent-checkbox side of Mixed campaigns in the opt-in guide — Mixed requires two checkboxes on the opt-in form to match the two-sample structure.

Bracket placeholders vs. curly braces vs. real names

The three personalization formats GHL agencies use, with TCR’s read on each:

FormatExampleTCR result
Real example nameHi Sarah,✓ Passes — cleanest
Square-bracket placeholderHi [First Name],✓ Passes — explicitly accepted
Curly-brace merge fieldHi {{contact.first_name}},❌ Auto-fails — reads as broken code

Square brackets are GHL Trust Center’s native placeholder convention, and they’re explicitly endorsed in GHL’s own Understanding A2P Campaign Rejection Reasons & Required Fixes article (under error code 30893):

“Messages should reflect actual content to be sent, indicate templated fields with brackets (e.g., [First Name])…”

Curly braces are GHL’s production merge-field syntax — they get filled in when the campaign actually sends messages — but they’re not what reviewers want to see in the samples.

When you copy a sample message from a GHL workflow template that uses curly braces, do a find-and-replace to swap them for either real names or square-bracket placeholders before pasting into Trust Center.

Templates by use case

Paste-ready compliant samples for every GHL use case. Replace [Business Name] with the registered legal name, [Customer Name] with either a real example name or kept as a placeholder, and adapt the specifics (dates, offers, product names) to match what your client actually sends.

Marketing

Marketing campaigns require two distinct promotional samples. (Note: there’s no separate “Low Volume Marketing” use case in GHL Trust Center — Low Volume is a brand-tier designation, not a use case modifier. To get lower throughput on a Marketing program, register at Low Volume Standard tier and pick Marketing.)

Sample 1 — Offer announcement:

“Hi Sarah, [Business Name] is running a Mother’s Day sale: 20% off all jewelry through Sunday. Shop online at example.com/sale or stop by the store. Reply STOP to unsubscribe.”

Sample 2 — Product announcement:

“Hi [Customer Name], just landed at [Business Name] — our new spring collection. Browse it at example.com/spring. Reply STOP to opt-out.”

Mixed (or Low Volume Mixed) — TWO samples required

Sample 1 — Transactional:

“Hi [Customer Name], your appointment at [Business Name] is confirmed for [Date] at [Time]. Reply 1 to confirm or call us to reschedule. Reply STOP to unsubscribe.”

Sample 2 — Promotional:

“Hi [Customer Name], [Business Name] is offering 15% off your next visit through Friday with code SAVE15. Book at example.com/book. Reply STOP to opt-out.”

Account Notification

Sample 1 — Status update:

“Hi [Customer Name], your [Business Name] account balance is $124.50 and your next payment of $42.00 is due [Date]. View details at example.com/account. Reply STOP to unsubscribe.”

Sample 2 — Scheduled reminder:

“Hi Sarah, your [Business Name] subscription renews [Date] for $19.99. To make changes, log in at example.com/account before that date. Reply STOP to opt-out.”

Customer Care

Sample 1 — Inquiry response:

“Hi [Customer Name], this is [Agent Name] from [Business Name] customer support. I have an update on your case #12345. Please call us at 555-555-5555 or reply with questions. Reply STOP to unsubscribe.”

Sample 2 — Follow-up:

“Hi Marcus, following up on your support ticket from yesterday. Did our last response resolve the issue? Reply YES or reply with details. [Business Name] support. Reply STOP to opt-out.”

Delivery Notification

Sample 1 — Shipment update:

“Hi [Customer Name], your [Business Name] order #12345 has shipped and will arrive [Date]. Track at example.com/track/12345. Reply STOP to unsubscribe.”

Sample 2 — Delivery confirmation:

“Hi Sarah, your [Business Name] order has been delivered. If you have any issues, contact us at example.com/support. Reply STOP to opt-out.”

2FA / One-Time Passcode

Sample 1 — Login code:

“Your [Business Name] verification code is 123456. This code expires in 10 minutes. If you didn’t request this code, ignore this message or contact support.”

Sample 2 — Transaction verification:

“Hi [Customer Name], your [Business Name] transaction code is 654321. Enter this code to complete your purchase. Code expires in 5 minutes.”

(Note: 2FA samples don’t typically need STOP language because the user receives messages only when they trigger them through their own login or transaction. Including STOP is still acceptable and harmless if you prefer consistency across all your samples.)

Industry-specific examples

The patterns above adapt to any industry. A few common GHL agency verticals with example samples:

Real estate (Mixed)

Sample 1 — Showing reminder:

“Hi Sarah, your showing of 123 Maple St with [Agent Name] at [Brokerage Name] is confirmed for [Date] at [Time]. Reply CANCEL to reschedule. Reply STOP to opt-out.”

Sample 2 — New listing alert:

“Hi [Customer Name], new listing in your search area: 456 Oak Ave, $425K, 3BR/2BA. View at example.com/456oak. [Brokerage Name]. Reply STOP to unsubscribe.”

Dental practice (Mixed)

Sample 1 — Appointment reminder:

“Hi [Customer Name], your cleaning at [Practice Name] is [Date] at [Time]. Reply 1 to confirm or call 555-555-5555 to reschedule. Reply STOP to unsubscribe.”

Sample 2 — Promotional offer:

“Hi Sarah, [Practice Name] is offering free whitening with any cleaning booked through Friday. Book at example.com/dental. Reply STOP to opt-out.”

Fitness studio (Marketing)

Sample 1 — Class promotion:

“Hi [Customer Name], [Studio Name] added new spin classes Tuesdays at 6pm. First class free with code SPIN. Sign up at example.com/spin. Reply STOP to unsubscribe.”

Sample 2 — Member offer:

“Hi Marcus, members save 20% on personal training sessions through Sunday at [Studio Name]. Book at example.com/pt. Reply STOP to opt-out.”

Salon / spa (Mixed)

Sample 1 — Appointment confirmation:

“Hi [Customer Name], your appointment at [Salon Name] is [Date] at [Time] with [Stylist Name]. Reply C to confirm. Reply STOP to opt-out.”

Sample 2 — Seasonal offer:

“Hi Sarah, [Salon Name] is offering 25% off color services through Friday. Book online at example.com/color. Reply STOP to unsubscribe.”

Professional services / consulting (Customer Care)

Sample 1 — Document request:

“Hi [Customer Name], [Firm Name] received your file. We’ll have an update by [Date]. Reply with any questions or call 555-555-5555. Reply STOP to opt-out.”

Sample 2 — Status update:

“Hi Marcus, [Firm Name] filed your paperwork today. Tracking ID: 12345. Full update by [Date]. Reply STOP to unsubscribe.”

STOP language: “unsubscribe” vs. “opt-out” vs. “cancel”

The honest answer here is more nuanced than “any word works.” GHL Trust Center’s published sample templates uniformly use “unsubscribe” in samples — that’s the safest exact match. “Opt-out” is what GHL uses in checkbox copy, and it’s widely accepted by carriers and aggregators in samples too. “Cancel” appears in some industry templates outside GHL but isn’t documented as part of GHL’s sample standard — I haven’t independently verified that “cancel” passes GHL Trust Center review consistently.

Recommended order from safest to least documented:

  • “Reply STOP to unsubscribe.” ← GHL’s documented sample standard
  • “Reply STOP to opt-out.” ← Accepted by carriers/aggregators broadly; matches GHL’s checkbox copy
  • “Text STOP to unsubscribe.” ← Variant of the standard; passes
  • “Reply STOP to cancel.” ← Used in some non-GHL industry templates; uncertain status in GHL Trust Center specifically — use at your own risk
  • “Reply STOP.” ← Works but minimum information; leaves the recipient to infer what STOP does

If you want a single rule of thumb: use “Reply STOP to unsubscribe” in samples. It’s GHL’s documented standard, it’s the exact phrasing their templates use, and it removes any reviewer guesswork.

What we’ve seen fail or warn:

  • “Reply STOP to stop receiving promotional messages.” (scoped opt-out — once the FCC’s “revoke-all” rule takes effect — currently scheduled for January 31, 2027 after multiple postponements — this becomes non-compliant; and even today reviewers prefer unconditional STOP)
  • “Reply NO to opt-out.” (STOP is the required keyword, not NO)
  • “To unsubscribe, reply with the word UNSUBSCRIBE.” (substituting UNSUBSCRIBE for STOP doesn’t satisfy carrier requirements)

For consent-checkbox text — different surface from samples — the canonical phrasing is “Text HELP for help, reply STOP to opt-out.” See the opt-in guide for the consent disclosure rules. Sample messages have looser conventions; checkbox text is stricter.

Common rejection scenarios and the fixes

The five most common sample-message rejections in GHL agency campaigns:

“Sample contains unfilled merge fields”

Trigger: {{contact.first_name}} or similar curly-brace patterns left in the sample.

Fix: Replace with [First Name] or a real example like Sarah. Search your sample for {{ — if any matches appear, rewrite. This single fix resolves the #1 rejection cause.

”Sample uses deceptive eligibility language”

Trigger: Phrases like “You’ve been selected,” “You qualify,” “Pre-approved,” “Exclusively chosen.”

Fix: Rewrite the sample without the eligibility framing. “Save 20% with code SAVE20” works; “You’ve been selected for 20% off” does not.

”Sample doesn’t match the registered use case”

Trigger: Promotional content in a non-marketing campaign, or appointment-reminder content in a Marketing campaign.

Fix: Either change the campaign use case to match the actual content (most common: switch from Marketing-only to Mixed) or rewrite the sample to match the registered use case.

”Insufficient sample count”

Trigger: Mixed or Marketing campaign with only one sample submitted.

Fix: Submit two distinct samples. For Mixed, one transactional and one promotional. For Marketing, two different promotional patterns (e.g., offer announcement + product launch).

”Sample missing brand identification”

Trigger: “Reminder from us,” “Update from your provider,” “Hi from our team.”

Fix: Include the actual business name in the sample. “Reminder from Acme Dental.” “Update from Sarah Mitchell Real Estate.”

How Easy A2P helps with sample messages

Easy A2P’s copy review system catches every pattern in this guide before submission. Paste your two samples in and we flag:

  • Curly-brace merge fields
  • Missing STOP language in both samples
  • Deceptive eligibility patterns
  • Generic brand identification
  • Use case mismatch with the registered campaign type
  • Insufficient sample count for Mixed/Marketing campaigns

If you’re starting from scratch instead of reviewing existing samples, the Draft Fresh Copy Wizard generates compliant two-sample sets aligned to your registered use case in under 60 seconds — using the patterns this guide documents.

Run your samples through the copy review system →

A note on character counts

Sample messages don’t have a hard character limit at the GHL Trust Center registration step, but practical SMS economics matter:

  • Under 160 characters: one segment, single billable unit
  • 161-306 characters: two segments, twice the cost per send
  • 307-459 characters: three segments

Most compliant samples land between 90 and 140 characters including STOP language. That fits one segment cleanly and reads natural. Pushing samples to 200+ characters is technically allowed but doubles your per-message throughput consumption when the actual messages your campaign sends look similar to the samples.

The Opt-In Confirmation Message — the field where users get a welcome SMS after signing up — has its own 320-character cap and its own required elements. We covered that in the opt-in guide. Sample messages don’t share that constraint, but tighter is better.

Final checklist before you paste samples into Trust Center

A 30-second sanity check before you submit:

  1. Do both samples include the actual business name (not “us” or “our team”)?
  2. At least one sample has STOP language (both is safer)?
  3. No curly-brace {{merge_fields}} anywhere in either sample?
  4. Personalization uses real names or [Square Brackets], not {{curly}} ones?
  5. Both samples align with the registered use case (no promotional content in non-marketing campaigns)?
  6. For Mixed/Marketing: two distinct samples, not one?
  7. No “you’ve been selected” or similar eligibility framing?
  8. Each sample under ~140 characters for clean single-segment delivery?

If all eight check out, your sample messages section will pass TCR review. If any are off, fix before submitting — sample-message rejections are the most expensive in delay terms even though resubmissions are free, because each rejection cycle costs 1-3 days (Sole Prop) or 3-15 days (Standard) before your client can send messages.


Need help reviewing or drafting your A2P 10DLC sample messages before you submit a GHL campaign? Run them through Easy A2P’s copy review system — it audits both samples against all six rejection patterns in this guide and generates compliant replacements when needed.

Frequently Asked Questions

What's the #1 reason A2P 10DLC sample messages get rejected? +
Curly-brace merge field variables left in sample messages — patterns like {{contact.first_name}} or {{location.name}} — are the #1 documented rejection cause for GoHighLevel agencies. TCR reviewers see unfilled template variables as broken code. Replace them with either real example names ('Hi Sarah') or square-bracket placeholders ([Customer Name]). Square brackets are explicitly accepted by GHL's documentation; curly braces are an automatic fail.
How many sample messages do I need for a Mixed A2P 10DLC campaign? +
Mixed and Marketing use cases require two distinct sample messages that show the range of content the campaign sends. Submitting only one sample causes rejection for these tiers. For Mixed campaigns, the two samples should illustrate both sides — one transactional (appointment reminder, account update) and one promotional (offer, sale, product announcement). Single non-marketing campaigns (Customer Care, Account Notification, Delivery Notification, 2FA) require 2 sample messages as well.
Do sample messages need to include STOP language? +
Yes, Stop language needs to be included in sample messages. GHL Trust Center samples use 'Reply STOP to unsubscribe' and 'Reply STOP to opt-out' interchangeably — both pass review. The STOP language only needs to appear in samples; you don't need to include 'Text HELP for help' in samples (HELP belongs in opt-in checkboxes, opt-in confirmation, and the Terms of Service).
Can I use real customer names in A2P 10DLC sample messages? +
Yes, and it's often the cleanest approach. Using a real example name like 'Hi Sarah' or 'Hello Marcus' shows the reviewer exactly how the message will look once personalization is applied. The alternative is square-bracket placeholders like [Customer Name] or [First Name] — also accepted. Avoid curly-brace template variables ({{contact.first_name}}) which read as broken code to TCR reviewers and cause automatic rejection.
What sample message patterns auto-fail TCR review? +
Six patterns cause near-automatic rejection: (1) curly-brace merge field variables left unfilled, (2) deceptive eligibility language like 'You've been selected' or 'You qualify' (mimics phishing), (3) sample content that doesn't match the registered use case (promotional content in a non-marketing campaign or vice versa), (4) missing STOP opt-out language in both samples, (5) generic brand identification like 'from us' or 'from our team' instead of the actual business name, and (6) only one sample submitted for Mixed or Marketing campaigns when two are required.
Should sample messages match the campaign use case I selected in GHL? +
Yes — and use case mismatch is one of the most common rejection causes after merge fields. If your campaign is registered as Marketing, every sample must be promotional content (offers, sales, product announcements). If it's registered as Customer Care, samples must be conversational support replies. Mixed campaigns can include both transactional and promotional samples — but they should be in clearly separate sample messages, not combined into one. The reviewer reads the samples as the canonical demonstration of what your messaging program actually sends.
Do I need 'Reply HELP for help' in my sample messages? +
No. HELP belongs in three places — the opt-in checkbox disclosure, the opt-in confirmation message, and the Terms of Service SMS section — but not in sample messages. Adding 'Reply HELP for help' to samples is technically harmless but eats character count and isn't expected by GHL Trust Center. The required keyword in samples is STOP. HELP is documented elsewhere in the registration.
What's the maximum length for an A2P 10DLC sample message? +
Sample messages have no hard character limit at the registration step, but each message should fit within one or two SMS segments (160 characters per segment) for delivery efficiency. Messages longer than 160 characters become 'concatenated' messages that count as multiple segments toward your throughput cap. Most compliant samples are 80-140 characters including STOP language. The Opt-In Confirmation Message — separate field, separate rule — has a 320-character cap; samples don't have that constraint but practical limits apply.

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