← All posts

A2P 10DLC for GoHighLevel: the plain-English guide to getting registered (and staying delivered)

What A2P 10DLC actually is, how to register your brand and campaign inside GoHighLevel, the real reasons registrations get rejected, and the Twilio error codes that mean your texts aren't landing.

If you run SMS through GoHighLevel and your messages have started quietly disappearing, the culprit is almost always A2P 10DLC, the US carrier registration system for application-to-person texting. This is the guide we wish every agency had before their first campaign got filtered.

What A2P 10DLC actually is

A2P stands for application-to-person: any text sent by software rather than a human thumb. 10DLC means 10-digit long code, i.e. a normal local number. US carriers now require every business sending A2P traffic over a 10-digit number to register two things: a Brand (who you are) and a Campaign (what you send and why). Unregistered traffic gets throttled, filtered, or blocked outright.

Registration is not optional and it is not instant. Budget 1–3 weeks, and never promise a client their SMS will be live "tomorrow" until the campaign shows as approved.

Registering in GoHighLevel, step by step

  1. Open the sub-account → Settings → Phone Numbers → Trust Center and start the A2P registration.
  2. Submit the Brand: legal business name, EIN, address, and website. The name and EIN must match IRS records exactly. A mismatch is the #1 rejection reason.
  3. Create the Campaign: pick a use-case (usually Mixed or Customer Care), describe what you send, and provide two real sample messages that include the business name and an opt-out line.
  4. Confirm your opt-in flow. Carriers want proof consent was collected: a form screenshot, checkbox language, or a keyword opt-in. "We bought a list" is an automatic decline.
  5. Wait for approval, then attach the approved campaign to the sending number.

Why registrations get rejected

Most rejections come down to a handful of avoidable mistakes:

  • EIN / legal name mismatch: it must match the IRS letter character-for-character, not your DBA.
  • No visible opt-out: every sample message needs a Reply STOP to opt out (or similar).
  • Vague sample messages: "Hi, thanks!" tells the reviewer nothing. Show a real, branded message.
  • Missing opt-in proof: no consent mechanism described means an instant decline.
  • Prohibited content: anything touching cannabis, loans, or high-risk finance faces far stricter review.

The Twilio error codes that mean you're blocked

GoHighLevel runs on Twilio underneath, so when texts fail you'll often see a Twilio code in the logs. The ones that actually mean "A2P problem":

  • 30034: sending A2P traffic over an unregistered number. Register the campaign.
  • 30007: carrier filtered the message as spam. Usually content or an unregistered/low-trust campaign.
  • 30032: the number type isn't permitted for this traffic. Check the number is 10DLC and campaign-attached.
  • 30003 / 30005: unreachable or unknown destination handset (not an A2P issue, but a bad number).
If you're seeing 30034 or 30007 across a whole sub-account, stop sending. Every filtered message drags down your campaign's trust score and makes the next one more likely to fail too.

Staying delivered after approval

  • Keep opt-out honored automatically. GoHighLevel handles STOP, but never re-add someone who opted out.
  • Warm up volume gradually; a brand-new number blasting thousands of texts looks exactly like spam.
  • Keep message content close to your registered samples. Wildly different content erodes trust scores.
  • Monitor throughput (MPS) on high-volume sends so you don't queue faster than the number can deliver.

A2P is tedious, but it's also the difference between a client's automations working and silently failing. If you'd rather hand the whole registration (brand, campaign, opt-in proof, and troubleshooting) to a team that does it every week, that's exactly what we do.

Want this handled for you, end to end?

Book a call