Prerequisites: You need an approved brand before creating campaigns. Your brand’s vetting score affects campaign throughput — see 10DLC Rate Limits.
Campaign use case types
Choose the use case that best describes your messaging. Carriers review this against your sample messages, so accuracy matters.Standard use cases
| Use Case | Description | Example |
|---|---|---|
CUSTOMER_CARE | Support and service messages | ”Your ticket #4521 has been updated. View details at…” |
DELIVERY_NOTIFICATION | Order and shipping updates | ”Your package shipped! Tracking: 1Z999…” |
ACCOUNT_NOTIFICATION | Account alerts and changes | ”Your password was changed. If this wasn’t you, call…” |
MARKETING | Promotional content | ”Summer sale! 30% off all items this weekend…” |
2FA | Two-factor authentication codes | ”Your verification code is 847291. Expires in 10 min.” |
SECURITY_ALERT | Security-related notifications | ”New login detected from Chrome on Windows…” |
POLLING_VOTING | Surveys and polls | ”How was your experience? Reply 1-5.” |
CHARITY | Nonprofit fundraising and awareness | ”Thanks for supporting Habitat! Text DONATE for…” |
POLITICAL | Political campaigns and advocacy | ”Reminder: Vote on Nov 5th. Find your polling place…” |
MIXED | Multiple message types (most common) | Combination of the above |
Special use cases
| Use Case | Description | Requirements |
|---|---|---|
LOW_VOLUME | Under 6,000 messages/month | Simplified registration |
SOLE_PROPRIETOR | Individual/small business without EIN | See Sole Proprietor guide |
EMERGENCY | Life-threatening alerts | Must demonstrate emergency nature |
AGENTS_FRANCHISES | ISVs sending on behalf of clients | Additional compliance requirements |
SWEEPSTAKES | Contests and giveaways | Must include rules and terms |
Create a campaign
- API
- Portal
Required fields
| Field | Type | Description |
|---|---|---|
brandId | string | Your registered brand ID |
usecase | string | Use case type (see table above) |
description | string | What your campaign does (2-4 sentences) |
sample1 | string | First sample message |
sample2 | string | Second sample message |
messageFlow | string | How users opt in to receive messages |
helpMessage | string | Response to HELP keyword |
optinKeywords | string | Comma-separated opt-in keywords |
optoutKeywords | string | Comma-separated opt-out keywords |
helpKeywords | string | Comma-separated help keywords |
Optional fields
| Field | Type | Default | Description |
|---|---|---|---|
embeddedLink | boolean | false | Messages contain URLs |
embeddedPhone | boolean | false | Messages contain phone numbers |
numberPool | boolean | false | Using number pool for sending |
ageGated | boolean | false | Content requires age verification |
directLending | boolean | false | Related to direct lending |
subscriberOptin | boolean | true | Subscribers have opted in |
subscriberOptout | boolean | true | Subscribers can opt out |
subscriberHelp | boolean | true | Help keyword is supported |
sample3 | string | — | Third sample message (recommended) |
sample4 | string | — | Fourth sample message |
sample5 | string | — | Fifth sample message |
Writing sample messages that pass review
Carriers manually review your sample messages. Poorly written samples are the #1 reason campaigns get rejected.✅ Do: Include opt-out language
✅ Do: Include opt-out language
Every sample should include opt-out instructions:
“Your order #12345 has shipped! Track at https://acme.com/track/12345. Reply STOP to unsubscribe.”
✅ Do: Make samples realistic and specific
✅ Do: Make samples realistic and specific
Use real-looking content with your actual brand name:
“Hi Sarah, your Acme Corp appointment is confirmed for Tuesday at 2 PM. Reply YES to confirm or HELP for assistance.”
✅ Do: Match samples to your use case
✅ Do: Match samples to your use case
If your use case is
DELIVERY_NOTIFICATION, all samples should be about deliveries:✅ “Your package has shipped via FedEx. Tracking: 1Z999AA10123456784” ❌ “Check out our summer sale! 30% off everything!” (This is marketing, not delivery)
❌ Don't: Use generic placeholder text
❌ Don't: Use generic placeholder text
Carriers reject vague samples:
❌ “This is a test message” ❌ “Hello, this is a message from our company”
❌ Don't: Include prohibited content
❌ Don't: Include prohibited content
Carriers prohibit or restrict:
- Cannabis / CBD messaging
- Gambling content (varies by state)
- Firearms sales
- Payday lending
- Content targeting minors without age gate
✅ Do: Describe your opt-in flow clearly
✅ Do: Describe your opt-in flow clearly
The
messageFlow field should explain exactly how users consent:“Users sign up on our website at https://acme.com/signup where they enter their phone number and check a box that reads: ‘I agree to receive order updates via SMS from Acme Corp. Msg frequency varies. Msg & data rates may apply. Reply STOP to cancel.’”
MNO provisioning timeline
After TCR approves your campaign, each carrier (MNO) provisions it on their network independently. This affects when you can send messages on each carrier.| Carrier | Typical Timeline | Notes |
|---|---|---|
| T-Mobile | Instant to 24 hours | Usually the fastest |
| AT&T | 1-3 business days | May require additional review for some use cases |
| Verizon | 1-3 business days | — |
| US Cellular | 3-5 business days | Smaller carrier, longer provisioning |
You can check provisioning status per carrier via the API:
Check campaign status
Campaign statuses
| Status | Meaning |
|---|---|
ACTIVE | Approved and ready to send |
EXPIRED | Campaign expired (renew required) |
SUSPENDED | Suspended by carrier — contact support |
List all campaigns
Handle campaign rejections
Campaigns can be rejected during carrier review. Common reasons and how to fix them:| Rejection Reason | Fix |
|---|---|
| Samples don’t match use case | Rewrite samples to match your declared use case exactly |
| Missing opt-out language | Add “Reply STOP to unsubscribe” to every sample |
| Vague message flow | Describe the exact opt-in mechanism (website form, checkout checkbox, etc.) |
| Prohibited content | Remove restricted content (cannabis, gambling, etc.) |
| Brand not vetted | Complete brand vetting before resubmitting |
Resubmitting a rejected campaign
You cannot edit a rejected campaign. Instead, create a new campaign with corrected information:- Review the rejection reason (check Event Notifications webhooks)
- Fix the identified issues in your samples and description
- Create a new campaign via the API or Portal
- Reassign your phone numbers to the new campaign
Campaign compliance best practices
Match content to use case
Only send messages that match your registered campaign use case. Sending marketing from a
CUSTOMER_CARE campaign risks suspension.Honor opt-outs immediately
Process STOP requests within seconds. Carriers monitor compliance. See Advanced Opt-In/Out for implementation.
Keep records
Maintain proof of consent (opt-in records with timestamp, source, and phone number). Carriers may request this during audits.
Monitor throughput
Don’t exceed your campaign’s allocated throughput. Check 10DLC Rate Limits for your brand score tier.
Review Event Notifications
Set up webhooks for 10DLC events to catch approval, rejection, and suspension events in real time.
Competitor comparison
| Feature | Telnyx | Twilio | Vonage |
|---|---|---|---|
| Campaign creation | API + Portal | API + Console | API + Dashboard |
| Use case types | 15+ standard types | Similar TCR types | Similar TCR types |
| Sample messages | 2 required, up to 5 | 2 required | 2 required |
| MNO status visibility | Per-carrier status via API | Per-carrier status | Limited visibility |
| Rejection handling | Create new campaign | Create new campaign | Create new campaign |