WARP guide
Messaging and 10DLC Registration
How to register 10DLC Brands and Campaigns, handle carrier review, assign numbers, and keep SMS traffic compliant.
10DLC is the registration framework for application-to-person SMS from standard local numbers. Before you send at scale, carriers require clear information about who you are, what you send, how recipients consent, and which numbers send the messages.
The workflow is:
- Register a Brand.
- Create a Campaign under that Brand.
- Wait for carrier review.
- Fix and resubmit if rejected.
- SMS-enable numbers.
- Assign numbers to the approved Campaign.
- Send traffic that matches the registered use case.
Brand Registration
A Brand identifies the legal business behind the messages. Use accurate, verifiable business information. Discrepancies between the Brand and public records can slow vetting or cause rejection.
If your organization has multiple business entities, register the entity responsible for the traffic. A Brand is not a marketing nickname; it should represent the legal sender.
Campaign Creation
A Campaign describes a specific messaging use case. It tells carriers what recipients will receive and how they agreed to receive it.
Campaign fields commonly include:
- Use case.
- Sample messages.
- Opt-in method.
- Opt-out language.
- Help language.
- Vertical or business category.
- Expected message behavior.
Use realistic sample messages. Carriers compare live traffic against what you registered. A vague sample such as "Your code is 1234" may be insufficient if the actual traffic includes marketing, account alerts, or customer support replies.
Carrier Review
Carrier review is performed by carriers and messaging ecosystem partners, not by WARP. It can take several days. Plan your launch with review time included.
The best way to move quickly is to submit accurate information the first time. Rushing with incomplete samples or unclear consent language often causes rejection and delays the launch.
Handling Rejections
If a Brand or Campaign is rejected, read the rejection reason carefully. Fix the named issue before resubmitting.
Common rejection causes:
- Business details do not match public records.
- Use case does not match sample messages.
- Opt-in process is unclear.
- STOP or HELP behavior is missing.
- Sample messages are too vague or unrealistic.
- The campaign attempts to cover unrelated traffic types.
Do not resubmit unchanged. Address the specific reason, then resubmit.
Assigning Numbers
A number must be on your account, SMS-enabled, and assigned to the approved Campaign before it can carry that Campaign's A2P traffic.
Assign only numbers that should send that Campaign's traffic. If a number sends a different type of message, register or use a different Campaign. Campaign accuracy protects deliverability.
SMS Routing Is Independent of Voice
Voice routing and SMS routing are separate. The trunk a number uses for calls does not control text messaging. Configure voice routing in Numbers and trunk settings. Configure messaging through SMS enablement and Campaign assignment.
Consent Requirements
Consent is mandatory. Your product must collect opt-in before sending, honor opt-out requests, and respond to help requests.
Typical recipient commands:
- STOP or equivalent opt-out means stop sending to that recipient.
- HELP should return a useful support or contact response.
Consent language in the Campaign should match the real user experience. Buzz can help explain the fields, but it cannot approve legal sufficiency.
Scopes and API Reference
Messaging reference and registration reads use messaging:campaigns:read:
GET /v1/messaging/use-casesGET /v1/messaging/entity-typesGET /v1/messaging/verticalsGET /v1/messaging/carriersGET /v1/messaging/dcasGET /v1/messaging/use-case-requirementsGET /v1/messaging/throughput-estimateGET /v1/messaging/brandsGET /v1/messaging/brands/:idGET /v1/messaging/campaignsGET /v1/messaging/campaigns/:idGET /v1/messaging/campaigns/:id/mno-statusGET /v1/messaging/campaigns/:id/sharingGET /v1/messaging/campaigns/:id/numbers
Registration and assignment writes use messaging:campaigns:write:
POST /v1/messaging/brandsPUT /v1/messaging/brands/:idDELETE /v1/messaging/brands/:idPOST /v1/messaging/brands/linkPOST /v1/messaging/campaignsPUT /v1/messaging/campaigns/:idPUT /v1/messaging/campaigns/:id/resubmitPOST /v1/messaging/campaigns/:id/numbersDELETE /v1/messaging/campaigns/:id/numbersPOST /v1/messaging/campaigns/:id/cnpPOST /v1/messaging/campaigns/:id/nudgePOST /v1/messaging/campaigns/link