If you're sending SMS messages in the United States, you've probably heard about A2P 10DLC. But what exactly is it, and why does it matter for your business? This comprehensive guide covers everything developers need to know.
Understanding A2P 10DLC
A2P stands for Application-to-Person messaging. This is any SMS sent from a business application to a consumer's phone. Examples include:
- Verification codes (OTP/2FA)
- Order confirmations
- Appointment reminders
- Marketing campaigns
- Notifications and alerts
10DLC stands for 10-Digit Long Code. These are standard US phone numbers with 10 digits, like (312) 555-1234. Before the 10DLC system, these numbers were primarily used for person-to-person (P2P) communication.
Why Was 10DLC Created?
In the past, businesses could send unlimited SMS messages from any phone number without oversight. This led to massive spam problems:
- Unwanted marketing messages
- Phishing attempts
- Robocall-style text blasts
- No accountability for bad actors
In 2021, the major US carriers (AT&T, T-Mobile, and Verizon) collaborated to create the 10DLC framework. The goals were:
How 10DLC Registration Works
Step 1: Brand Registration
First, you register your business (brand) with The Campaign Registry (TCR). You'll need:
- Legal business name
- EIN (Employer Identification Number)
- Business address
- Website URL
- Contact information
- Business type/vertical
Brand registration typically takes 1-2 business days.
Step 2: Campaign Registration
Next, you register your messaging use case (campaign). Each campaign describes:
- Use case - What type of messages you're sending (2FA, marketing, notifications, etc.)
- Sample messages - Examples of the content you'll send
- Opt-in process - How users consent to receive messages
- Opt-out process - How users can stop receiving messages (usually "Reply STOP")
Campaign registration takes 1-5 business days, depending on your use case.
Step 3: Number Assignment
Finally, you assign phone numbers to your registered campaigns. Each number can only be associated with one campaign.
Trust Scores and Throughput
After registration, your brand receives a Trust Score that determines your messaging throughput (messages per second). The scoring system:
| Trust Score | Message Throughput |
|---|---|
| Low | 1 msg/sec |
| Medium-Low | 2 msg/sec |
| Medium | 5 msg/sec |
| Medium-High | 10 msg/sec |
| High | 15 msg/sec |
Factors Affecting Trust Score
- Business age and reputation
- Brand vetting (optional $40 fee for faster approval)
- Use case type (2FA gets higher scores than marketing)
- Historical messaging behavior
10DLC vs Short Codes vs Toll-Free
| Feature | 10DLC | Short Code | Toll-Free |
|---|---|---|---|
| Number format | (312) 555-1234 | 12345 | 1-800-555-1234 |
| Setup time | 1-2 weeks | 8-12 weeks | 1-2 weeks |
| Monthly cost | Low | $1,000+ | Medium |
| Throughput | 1-15 msg/sec | 100+ msg/sec | 3-10 msg/sec |
| Best for | Most use cases | High-volume campaigns | Customer support |
When to Use Each
10DLC is ideal for:
- Small to medium businesses
- Transactional messages (OTP, confirmations)
- Moderate marketing campaigns
- Two-way conversations
Short Codes are better for:
- Very high-volume messaging
- Time-sensitive campaigns
- Large enterprises with budget
Toll-Free works well for:
- Customer support
- Businesses wanting a 1-800 image
- Lower registration requirements
What Happens Without Registration?
As of February 2025, all major US carriers block unregistered A2P traffic. If you try to send without registration:
Common 10DLC Use Cases
1. Two-Factor Authentication (2FA)
TypeScriptimport Zavudev from "@zavudev/sdk"; const client = new Zavu(); await client.messages.send({ to: "+14155551234", channel: "sms", text: "Your verification code is 847293. Valid for 5 minutes.", });
Campaign type: Authentication (highest throughput)
2. Order Notifications
TypeScriptawait client.messages.send({ to: "+14155551234", channel: "sms", text: "Your order #12345 has shipped! Track: https://track.example.com/12345", });
Campaign type: Delivery notifications
3. Appointment Reminders
TypeScriptawait client.messages.send({ to: "+14155551234", channel: "sms", text: "Reminder: Your appointment is tomorrow at 2:00 PM. Reply Y to confirm or N to reschedule.", });
Campaign type: Account notifications
4. Marketing Campaigns
TypeScriptawait client.messages.send({ to: "+14155551234", channel: "sms", text: "Flash sale! 20% off everything today only. Shop now: https://shop.example.com. Reply STOP to unsubscribe.", });
Campaign type: Marketing (requires explicit opt-in)
Registration Requirements by Use Case
| Use Case | Opt-in Requirement | Sample Message Needed | Approval Time |
|---|---|---|---|
| 2FA/OTP | Implicit | Yes | 1-2 days |
| Transactional | Web form/App | Yes | 1-3 days |
| Notifications | Web form/App | Yes | 2-3 days |
| Marketing | Double opt-in | Yes | 3-5 days |
| Mixed | Strictest applies | Yes | 3-5 days |
How Zavu Simplifies 10DLC
Managing 10DLC compliance can be complex. Here's how Zavu handles it for you:
1. Automatic Registration
When you create a sender in Zavu, we automatically:
- Register your brand with TCR
- Create the appropriate campaign
- Assign your phone numbers
- Handle carrier connections
2. Included Fees
TCR charges registration fees that add up:
- $4 brand registration
- $15+ campaign registration
- Monthly maintenance fees
With Zavu, these fees are included in your plan.
3. Compliance Monitoring
Carrier policies change frequently. We:
- Monitor policy updates
- Adjust your registration as needed
- Alert you about required changes
- Prevent compliance issues before they happen
4. Simple API
TypeScriptimport Zavudev from "@zavudev/sdk"; const client = new Zavu(); // That's it - we handle the compliance const result = await client.messages.send({ to: "+14155551234", channel: "sms", text: "Your verification code is 123456", }); console.log(result.message.id);
Common 10DLC Questions
Do I need to register if I only send a few messages?
Yes. There are no volume exemptions. Even one message per day requires registration.
Can I use my existing phone number?
Yes, as long as it's a 10-digit US number. You'll need to register it with TCR before sending.
How long does registration take?
- Brand: 1-2 business days
- Campaign: 1-5 business days
- Total: Usually under 1 week
What if my campaign is rejected?
Common rejection reasons include:
- Missing opt-out instructions in samples
- Unclear use case description
- Missing business information
Zavu's team reviews your registration before submission to minimize rejections.
Can I send to multiple countries?
10DLC only applies to US numbers. For international messaging, different regulations apply. Zavu handles this automatically based on the destination number.
Getting Started
Ready to start sending compliant SMS? Here's how:
npm install @zavudev/sdkRelated Resources
- A2P 10DLC Fees 2025 - Complete fee breakdown
- 10DLC Registration Requirements - Step-by-step guide
- SMS API for Developers - Full API documentation
Need help with 10DLC compliance? Our team is here to help. Contact us or join our Discord community.