TextPilot

The Developer's Guide to 10DLC Compliance

Everything you need to know about 10DLC registration, why carriers require it, and how TextPilot handles compliance so you can focus on building.

The Developer's Guide to 10DLC Compliance

If you're sending SMS from an application in the US, you've probably encountered the term 10DLC. It stands for "10-Digit Long Code" — the standard phone number format that carriers now require registration for. Ignore it, and your messages get throttled or blocked entirely.

Here's what you need to know.

What Is 10DLC?

10DLC is a carrier-mandated system that requires businesses to register their identity (brand) and messaging use case (campaign) before sending application-to-person (A2P) SMS via standard 10-digit phone numbers.

The major US carriers — AT&T, T-Mobile, and Verizon — implemented 10DLC to:

  • Reduce spam: Registered senders get better deliverability
  • Increase transparency: Carriers know who's sending what
  • Improve user trust: Recipients can verify legitimate senders

The Registration Process

Step 1: Brand Registration

You register your business identity with The Campaign Registry (TCR). This includes:

  • Legal business name
  • EIN (Employer Identification Number)
  • Business address
  • Website
  • Industry vertical

TCR assigns your brand a trust score based on business size, history, and verification. Higher trust = higher throughput.

Step 2: Campaign Registration

Next, you register each messaging use case:

  • Campaign type: Transactional, marketing, 2FA, alerts, etc.
  • Description: What messages you're sending and why
  • Sample messages: Examples of actual SMS content
  • Opt-in flow: How users consent to receive messages
  • Opt-out handling: How users can stop messages (STOP keyword)

Step 3: Phone Number Assignment

Once your campaign is approved, you assign phone numbers to it. These numbers can then send messages under your registered campaign.

Throughput Limits

Your throughput depends on your trust score:

Trust ScoreMessages per SecondDaily Cap
Low1 msg/s~2,000
Medium10 msg/s~20,000
High75 msg/s~200,000
Top150+ msg/sUnlimited

Without 10DLC registration, you're limited to about 1 message per second with heavy filtering. Many messages simply won't be delivered.

Common Rejection Reasons

Campaigns get rejected for:

  1. Vague descriptions: "We send texts to users" isn't enough. Be specific about your use case.
  2. Missing opt-in flow: You must describe exactly how users consent to receive SMS.
  3. No opt-out mechanism: Every campaign must support STOP/HELP keywords.
  4. Mismatched samples: Your sample messages must match your declared campaign type.
  5. Prohibited content: Cannabis, gambling, and certain other verticals have restrictions.

How TextPilot Handles 10DLC

We built 10DLC registration directly into the TextPilot dashboard so you don't have to deal with TCR directly.

On the Hobby Plan (Free)

You send from our shared number pool. These numbers are already registered under a shared campaign, so you can start sending immediately. The tradeoff: lower throughput and shared sender reputation.

On Paid Plans (Builder / Studio)

You get dedicated phone numbers with your own brand and campaign registration:

  1. Go to the Registration page in your dashboard
  2. Fill in your brand details — we submit to TCR automatically
  3. Create a campaign describing your use case
  4. Once approved (usually 1-3 business days), we provision and assign your dedicated number

The entire process happens through our dashboard. No API calls to TCR, no carrier portals, no paperwork.

// Once registered, sending works exactly the same
import { TextPilot } from 'textpilot'
const tp = new TextPilot('tp_live_...')

await tp.send('+16195551234', 'Your verification code is 4821')
// Sent from your registered, dedicated number

Best Practices

  1. Register early: Don't wait until you have high volume. Register your brand as soon as you know you'll be sending SMS.

  2. Be specific in campaign descriptions: "OTP codes for user authentication on our SaaS platform" is much better than "sending messages."

  3. Implement proper opt-in: Have users explicitly consent to SMS. A checkbox during signup works. Save proof of consent.

  4. Handle STOP/HELP: TextPilot automatically handles these keywords for you, but make sure your app logic respects opt-outs too.

  5. Keep content consistent: Send messages that match your registered campaign type. Don't send marketing on a transactional campaign.

  6. Monitor deliverability: Use TextPilot's dashboard to track delivery rates. A sudden drop might indicate a compliance issue.

Timeline

PhaseDuration
Brand registration1-2 business days
Campaign review1-5 business days
Number provisioningInstant after approval
Total2-7 business days

Start the process now, and you'll be fully registered before your next sprint ends.

Conclusion

10DLC compliance isn't optional — it's the cost of doing business with US carriers. But it doesn't have to be painful. TextPilot handles the registration process, carrier communication, and ongoing compliance so you can focus on building your app.

Register your brand → | Learn more about 10DLC