Skip to main content
A 10DLC campaign defines your messaging use case — what you’re sending, who you’re sending to, and how recipients opted in. Every campaign must be registered with The Campaign Registry (TCR) and approved by mobile carriers before you can send messages at scale. This guide walks you through creating campaigns via API and Portal, choosing the right use case, writing sample messages that pass carrier review, and handling rejections.
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 CaseDescriptionExample
CUSTOMER_CARESupport and service messages”Your ticket #4521 has been updated. View details at…”
DELIVERY_NOTIFICATIONOrder and shipping updates”Your package shipped! Tracking: 1Z999…”
ACCOUNT_NOTIFICATIONAccount alerts and changes”Your password was changed. If this wasn’t you, call…”
MARKETINGPromotional content”Summer sale! 30% off all items this weekend…”
2FATwo-factor authentication codes”Your verification code is 847291. Expires in 10 min.”
SECURITY_ALERTSecurity-related notifications”New login detected from Chrome on Windows…”
POLLING_VOTINGSurveys and polls”How was your experience? Reply 1-5.”
CHARITYNonprofit fundraising and awareness”Thanks for supporting Habitat! Text DONATE for…”
POLITICALPolitical campaigns and advocacy”Reminder: Vote on Nov 5th. Find your polling place…”
MIXEDMultiple message types (most common)Combination of the above

Special use cases

Use CaseDescriptionRequirements
LOW_VOLUMEUnder 6,000 messages/monthSimplified registration
SOLE_PROPRIETORIndividual/small business without EINSee Sole Proprietor guide
EMERGENCYLife-threatening alertsMust demonstrate emergency nature
AGENTS_FRANCHISESISVs sending on behalf of clientsAdditional compliance requirements
SWEEPSTAKESContests and giveawaysMust include rules and terms
Choose carefully. Changing a campaign’s use case after registration requires creating a new campaign. Carriers reject campaigns where sample messages don’t match the declared use case.

Create a campaign

Required fields

FieldTypeDescription
brandIdstringYour registered brand ID
usecasestringUse case type (see table above)
descriptionstringWhat your campaign does (2-4 sentences)
sample1stringFirst sample message
sample2stringSecond sample message
messageFlowstringHow users opt in to receive messages
helpMessagestringResponse to HELP keyword
optinKeywordsstringComma-separated opt-in keywords
optoutKeywordsstringComma-separated opt-out keywords
helpKeywordsstringComma-separated help keywords

Optional fields

FieldTypeDefaultDescription
embeddedLinkbooleanfalseMessages contain URLs
embeddedPhonebooleanfalseMessages contain phone numbers
numberPoolbooleanfalseUsing number pool for sending
ageGatedbooleanfalseContent requires age verification
directLendingbooleanfalseRelated to direct lending
subscriberOptinbooleantrueSubscribers have opted in
subscriberOptoutbooleantrueSubscribers can opt out
subscriberHelpbooleantrueHelp keyword is supported
sample3stringThird sample message (recommended)
sample4stringFourth sample message
sample5stringFifth sample message
curl -X POST https://api.telnyx.com/v2/10dlc/campaignBuilder \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "brandId": "BRAND_ID",
    "usecase": "DELIVERY_NOTIFICATION",
    "description": "Order confirmation and delivery status updates for e-commerce customers who purchase through our website.",
    "sample1": "Hi {{name}}, your order #{{orderId}} has been confirmed! Estimated delivery: {{date}}. Track at https://acme.com/track/{{orderId}} Reply STOP to opt out.",
    "sample2": "Great news! Your package is out for delivery and should arrive by 5 PM today. Driver: {{driverName}}. Reply STOP to unsubscribe.",
    "sample3": "Your order #{{orderId}} has been delivered to your front door. Rate your experience: https://acme.com/review/{{orderId}}",
    "messageFlow": "Customers opt in at checkout by checking a consent box that reads: I agree to receive order updates via SMS. Frequency varies. Msg & data rates may apply.",
    "helpMessage": "Acme Corp order updates. For help, visit https://acme.com/support or call +15551234567. Reply STOP to cancel.",
    "optinKeywords": "START, YES, SUBSCRIBE",
    "optoutKeywords": "STOP, UNSUBSCRIBE, CANCEL, QUIT",
    "helpKeywords": "HELP, INFO",
    "embeddedLink": true,
    "numberPool": false,
    "ageGated": false
  }'

Writing sample messages that pass review

Carriers manually review your sample messages. Poorly written samples are the #1 reason campaigns get rejected.
Every sample should include opt-out instructions:
“Your order #12345 has shipped! Track at https://acme.com/track/12345. Reply STOP to unsubscribe.”
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.”
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)
Carriers reject vague samples:
❌ “This is a test message” ❌ “Hello, this is a message from our company”
Carriers prohibit or restrict:
  • Cannabis / CBD messaging
  • Gambling content (varies by state)
  • Firearms sales
  • Payday lending
  • Content targeting minors without age gate
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.
CarrierTypical TimelineNotes
T-MobileInstant to 24 hoursUsually the fastest
AT&T1-3 business daysMay require additional review for some use cases
Verizon1-3 business days
US Cellular3-5 business daysSmaller carrier, longer provisioning
You can check provisioning status per carrier via the API:
curl -s https://api.telnyx.com/v2/10dlc/campaignBuilder/{campaignId} \
  -H "Authorization: Bearer YOUR_API_KEY" | jq '.data.mnoMetadata'

Check campaign status

# Get campaign details
curl -s https://api.telnyx.com/v2/10dlc/campaignBuilder/{campaignId} \
  -H "Authorization: Bearer YOUR_API_KEY" | jq '{
    status: .data.status,
    usecase: .data.usecase,
    brandId: .data.brandId,
    createDate: .data.createDate
  }'

Campaign statuses

StatusMeaning
ACTIVEApproved and ready to send
EXPIREDCampaign expired (renew required)
SUSPENDEDSuspended by carrier — contact support

List all campaigns

curl -s https://api.telnyx.com/v2/10dlc/campaignBuilder \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -G -d "page[size]=20"

Handle campaign rejections

Campaigns can be rejected during carrier review. Common reasons and how to fix them:
Rejection ReasonFix
Samples don’t match use caseRewrite samples to match your declared use case exactly
Missing opt-out languageAdd “Reply STOP to unsubscribe” to every sample
Vague message flowDescribe the exact opt-in mechanism (website form, checkout checkbox, etc.)
Prohibited contentRemove restricted content (cannabis, gambling, etc.)
Brand not vettedComplete brand vetting before resubmitting

Resubmitting a rejected campaign

You cannot edit a rejected campaign. Instead, create a new campaign with corrected information:
  1. Review the rejection reason (check Event Notifications webhooks)
  2. Fix the identified issues in your samples and description
  3. Create a new campaign via the API or Portal
  4. Reassign your phone numbers to the new campaign
Each campaign submission incurs a TCR registration fee. Review your samples carefully before submitting to avoid repeated rejections and fees.

Campaign compliance best practices

1

Match content to use case

Only send messages that match your registered campaign use case. Sending marketing from a CUSTOMER_CARE campaign risks suspension.
2

Honor opt-outs immediately

Process STOP requests within seconds. Carriers monitor compliance. See Advanced Opt-In/Out for implementation.
3

Keep records

Maintain proof of consent (opt-in records with timestamp, source, and phone number). Carriers may request this during audits.
4

Monitor throughput

Don’t exceed your campaign’s allocated throughput. Check 10DLC Rate Limits for your brand score tier.
5

Review Event Notifications

Set up webhooks for 10DLC events to catch approval, rejection, and suspension events in real time.

Competitor comparison

FeatureTelnyxTwilioVonage
Campaign creationAPI + PortalAPI + ConsoleAPI + Dashboard
Use case types15+ standard typesSimilar TCR typesSimilar TCR types
Sample messages2 required, up to 52 required2 required
MNO status visibilityPer-carrier status via APIPer-carrier statusLimited visibility
Rejection handlingCreate new campaignCreate new campaignCreate new campaign

Next steps