Prepares and validates Sent US A2P 10DLC brand and campaign registration through Sender Profiles, including inheritance, all campaign use cases, opt-in evidence, sample-message policy, autoresponses, sandbox validation, TCR status, and rejection remediation.
Scanned 9/3/2026
Install to Claude Code
npx -y skills add aiskillstore/marketplace --skill sms-10dlc-registration --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Sms 10dlc Registration?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/aiskillstore-sms-10dlc-registration)More formats (shields.io, HTML) on the badges page.
---
name: sms-10dlc-registration
description: Prepares and validates Sent US A2P 10DLC brand and campaign registration through Sender Profiles, including inheritance, all campaign use cases, opt-in evidence, sample-message policy, autoresponses, sandbox validation, TCR status, and rejection remediation.
---
# 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.
## Current Sent resource model
There is no standalone brand CRUD path in the current v3 API.
- Create a dedicated brand inside `POST /v3/profiles` using `brand` and `inherit_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
| Brand | Campaign | Settings |
| --- | --- | --- |
| Inherit both | Organization brand and campaign | `inherit_tcr_brand: true`, `inherit_tcr_campaign: true` |
| Inherit brand, own campaign | Shared legal brand with tenant-specific traffic | brand true, campaign false |
| Own both | Dedicated tenant/business | both false and supply `brand` during profile creation |
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.
```bash
python scripts/validate_10dlc_packet.py evidence.json
```
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](references/10dlc-evidence-checklist.md).
### Sent campaign request
The API request uses exact camelCase and a `campaign` wrapper:
<!-- sent-campaign-request -->
```json
{
"campaign": {
"name": "Acme account notifications",
"description": "Account and delivery notifications for opted-in customers.",
"type": "App",
"useCases": [
{
"messagingUseCaseUs": "ACCOUNT_NOTIFICATION",
"sampleMessages": [
"Acme Example: Your account preference was updated. Reply STOP to opt out."
]
}
],
"volume": "2000",
"messageFlow": "Customers opt in in account settings before notifications begin.",
"privacyPolicyLink": "https://example.com/privacy",
"termsAndConditionsLink": "https://example.com/terms",
"optinMessage": "Acme Example: You are subscribed. Reply STOP to opt out.",
"optoutMessage": "Acme Example: You are unsubscribed and will receive no more messages.",
"helpMessage": "Acme Example: Visit https://example.com/support for help.",
"optinKeywords": "START,YES",
"optoutKeywords": "STOP,UNSUBSCRIBE",
"helpKeywords": "HELP,INFO"
},
"sandbox": true
}
```
Validate it with:
```bash
python scripts/validate_campaign_payload.py campaign.json
```
## 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
1. Confirm this is US A2P 10DLC traffic and the actual sending business is identified.
2. Select brand/campaign inheritance.
3. Validate the versioned evidence packet.
4. Create or confirm the profile brand.
5. Translate evidence into the exact camelCase campaign request.
6. Validate locally and use `sandbox: true`.
7. Show the payload and obtain confirmation before a real create/update/delete.
8. Store profile ID, campaign ID, `submittedToTCR`, raw status, and review evidence.
9. Complete the profile with required `webHookUrl` only after prerequisites are ready.
Never use real consumer data in fixtures or samples. Use [references/tcr-use-cases.md](references/tcr-use-cases.md) for classification and [references/10dlc-rejection-remediation.md](references/10dlc-rejection-remediation.md) for failures.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!