SMS 10DLC Registration
Use this skill for US A2P SMS over 10-digit long codes. Separate the compliance evidence packet from the exact Sent API request; they have different schemas and validators.
For current field and document requirements or an exact SMS setup call, use sent-compliance before preparing the registration evidence here. Its plan creates a new Sender Profile and does not manage campaigns on an existing profile.
Current Sent resource model
There is no standalone brand CRUD path in the current v3 API.
- Create a dedicated brand inside
POST /v3/profilesusingbrandandinherit_tcr_brand: false. - List/create campaigns with
GET|POST /v3/profiles/{profileId}/campaigns. - Update/delete with
PUT|DELETE /v3/profiles/{profileId}/campaigns/{campaignId}.
Reject guidance that reintroduces a free-standing brand path.
Choose inheritance deliberately
Inherited campaigns are read-only. A profile cannot supply brand while brand inheritance is true.
Two validation layers
Evidence readiness packet
The private packet uses the explicit internal version sent-10dlc-evidence/v1 and snake_case evidence fields. It is not an API payload.
Collect legal identity, public website/policy links, consent proof, message flow, opt-in/opt-out/help responses and keywords, use cases, and realistic samples. See references/10dlc-evidence-checklist.md [blocked].
Sent campaign request
The API request uses exact camelCase and a campaign wrapper:
Validate it with:
API use cases
Support all 13 current values:
MARKETING, ACCOUNT_NOTIFICATION, CUSTOMER_CARE, FRAUD_ALERT, TWO_FA, DELIVERY_NOTIFICATION, SECURITY_ALERT, M2M, MIXED, HIGHER_EDUCATION, POLLING_VOTING, PUBLIC_SERVICE_ANNOUNCEMENT, and LOW_VOLUME.
Each use case structurally accepts 1–5 samples, each no longer than 1,024 characters. The compliance layer requires at least two samples for marketing and mixed traffic, including low-volume mixed. Keep that policy distinction visible instead of pretending OpenAPI requires two for all traffic.
Volume and status
volume is optional and, when supplied, is a numeric string. Values below "2000" use the documented low-volume tier; "2000" is the boundary to the next tier.
Campaign responses currently expose statuses SENT_CREATED, ACTIVE, and EXPIRED, plus submittedToTCR. Preserve unknown future status strings. Do not confuse a successful Sent record creation with TCR submission or carrier activation.
Safe workflow
- Confirm this is US A2P 10DLC traffic and the actual sending business is identified.
- Select brand/campaign inheritance.
- Validate the versioned evidence packet.
- Create or confirm the profile brand.
- Translate evidence into the exact camelCase campaign request.
- Validate locally and use
sandbox: true. - Show the payload and obtain confirmation before a real create/update/delete.
- Store profile ID, campaign ID,
submittedToTCR, raw status, and review evidence. - Complete the profile with required
webHookUrlonly after prerequisites are ready.
Never use real consumer data in fixtures or samples. Use references/tcr-use-cases.md [blocked] for classification and references/10dlc-rejection-remediation.md [blocked] for failures.

