sinch-10dlc
Registers US 10DLC brands and campaigns with Sinch for A2P SMS messaging. Use when the user needs to register a brand, create a 10DLC campaign, check registration status, troubleshoot a 10DLC rejection, fix an EIN mismatch, upgrade from simplified to full registration, or qualify a campaign for US SMS sending on 10-digit long codes. Do NOT use for non-US messaging or toll-free/short code registration.
What this skill does
# Sinch 10DLC Registration
## Overview
10DLC (10-Digit Long Code) is the required US registration system for Application-to-Person (A2P) SMS on standard 10-digit phone numbers. You must register a **brand** (the sending company) and a **campaign** (the messaging use case) with The Campaign Registry (TCR) via Sinch before sending any US A2P SMS.
## Agent Instructions
Before generating code, gather from the user (skip any item already specified in the prompt or context):
1. **Goal** — register a brand, register a campaign, check status, or troubleshoot a rejection?
2. **Brand ID?** — if the user already has one, skip to Step 3 (qualify) or Step 4 (campaign).
3. **Registration type** — `SIMPLIFIED` (faster, lower throughput, $10) or `FULL` (recommended for production, $50)?
4. **Language** — any language, or curl. This API is REST-only; there is no SDK wrapper. Use curl, `fetch`, `axios`, `requests`, or equivalent HTTP clients.
This skill covers **10DLC only**. The same Registration API also includes TFN (Toll-Free Number) verification endpoints — for toll-free registration, see the API spec directly.
Refer to the API reference linked in Links for request/response schemas.
**Security**: See the Security section below for url fetching policy and credential handling.
## Getting Started
### Agent Credentials handling
Store credentials in environment variables — never hardcode tokens or keys in commands or source code:
```bash
export SINCH_PROJECT_ID="your-project-id"
export SINCH_KEY_ID="your-key-id"
export SINCH_KEY_SECRET="your-key-secret"
export SINCH_ACCESS_TOKEN="your-oauth-token"
```
### Authentication
Ensure that authentication headers are properly set when making API calls. The 10DLC API uses Bearer token authentication:
```bash
-H "Authorization: Bearer $SINCH_ACCESS_TOKEN"
```
See [sinch-authentication](../sinch-authentication/SKILL.md) for full setup, most importantly how to obtain `{SINCH_ACCESS_TOKEN}` (OAuth2 client-credentials — do not mint your own JWT).
### Base URL
```
https://us10dlc.numbers.api.sinch.com
```
US-only — there are no regional variants for 10DLC.
### First API Call
Register a brand:
```bash
curl -X POST \
"https://us10dlc.numbers.api.sinch.com/v1/projects/$SINCH_PROJECT_ID/brandRegistrations:submit" \
-H "Authorization: Bearer $SINCH_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"brandRegistrationType": "FULL",
"displayName": "Sinch Mock",
"companyDetails": {
"companyName": "Sinch",
"brandName": "Sinch Mock x",
"companyEmail": "[email protected]",
"country": "US",
"state": "GA",
"city": "Atlanta",
"streetAddress": " 3500 Lenox Rd NE, Ste. 1875",
"postalCode": "94105",
"webAddress": "https://sinch.com"
},
"financialDetails": {
"brandEntityType": "PRIVATE",
"brandVerticalType": "TECHNOLOGY",
"taxIdCountry": "US",
"taxIdCorporate": "770505044",
"stockSymbol": "SINCH",
"exchange": "STO"
},
"contactDetails": {
"firstName": "Jane",
"lastName": "Doe",
"phoneNumber": "+14155550100",
"email": "[email protected]"
},
"mock": true
}'
```
## Key Concepts
- **Brand** — The company sending messages. Must be registered first. ID starts with `B` (e.g., `BESINCH`).
- **Campaign** — A messaging use case tied to a brand. Defines what, to whom, and why.
- **TCR** — The Campaign Registry. Sinch submits to TCR on your behalf as your CSP.
- **Registration type** (`brandRegistrationType`) — `SIMPLIFIED` (basic, lower throughput, $10) or `FULL` (complete vetting, higher throughput, $50). Default is `SIMPLIFIED`. Prefer `FULL` for production.
- **Trust score** — Assigned by TCR after vetting. Higher score = more messages per second. This is a TCR concept; the Sinch API does not return it in the brand response.
- **Use case** — The campaign's messaging purpose. Use cases are categorized as Standard or Special, with different vetting requirements and fees.
- Standard Use Cases: 2FA, ACCOUNT_NOTIFICATION, CUSTOMER_CARE, DELIVERY_NOTIFICATION, FRAUD_ALERT, HIGHER_EDUCATION, MARKETING, POLLING_VOTING, PUBLIC_SERVICE_ANNOUNCEMENT, SECURITY_ALERT.
- Special Use Cases: AGENTS_FRANCHISES, CARRIER_EXEMPT, CHARITY, EMERGENCY, K12_EDUCATION, POLITICAL, PROXY, SOCIAL, SWEEPSTAKE.
- Mixed/Low Volume: LOW_VOLUME or MIXED can be used for campaigns that combine multiple standard use cases but have low traffic requirements.
- **CSP** — Campaign Service Provider. Sinch typically acts as your CSP, managing the registration process. It's also possible for you to register as your own CSP directly with TCR and use Sinch for number provisioning and connectivity, though this is a more advanced setup.
## Workflow: Complete 10DLC Setup
Follow these steps in order. Each step depends on the previous one succeeding. For detailed curl examples, response schemas, enum values, and polling strategies, see [references/workflow.md](references/workflow.md).
**Once approved**, you can send A2P SMS on US 10-digit long codes through Sinch. To send messages, see the [sinch-conversation-api](../sinch-conversation-api/SKILL.md) skill.
## Common Patterns
- **List all brands/campaigns** — See [List All Brands](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-brand-registration/brandregistrationservice_listbrandregistrationrequest.md) and [List All Campaigns](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-campaign-registration/campaignregistrationservice_listcampaignregistrationrequest.md)
- **Upgrade brand from Simplified to Full** — See [Upgrade Brand](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-brand-registration/brandregistrationservice_upgrade10dlcbrandtofullregistration.md)
- **Update brand details** — See [Update Brand Registration](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-brand-registration/brandregistrationservice_update10dlcbrand.md)
- **Look up brand by TCR ID** — See [Get Brand by TCR Brand ID](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-brand-registration/brandregistrationservice_fetchbrandregistrationrequest.md)
- **Look up campaign by TCR ID** — See [Get Campaign by TCR Campaign ID](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-campaign-registration/campaignregistrationexternalservice_getcampaignbytcrcampaignid.md)
- **Delete a campaign** — See [Delete Campaign](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-campaign-registration/campaignregistrationexternalservice_deletecampaign.md) (irreversible, status becomes `EXPIRED`). **Note:** the delete path uses singular `campaignRegistration` (not plural) — `DELETE /v1/projects/{projectId}/campaignRegistration/{campaignRegistrationId}`
- **Resubmit a campaign** — See [Resubmit Campaign](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-campaign-registration/campaignregistrationservice_resubmitcampaignregistration.md). After resubmitting, poll `lastActionStatus`: `RESUBMIT_IN_PROGRESS` → `RESUBMIT_SUCCESSFUL` (get updated MNO metadata) or `RESUBMIT_FAILED` (check campaign feedback for reason)
- **Get brand vetting info** — See [Brand Vetting Information](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-brand-registration/brandregistrationservice_getbrandregistrationvettinginfo.md)
- **Resend 2FA email** — See [Resend 2FA Email](https://developers.sinch.com/docs/10dlc-registration/api-reference/10dlc-registration/10dlc-brand-registration/brandregistrationservice_resend2faemail.md)
## Gotchas and Best Practices
### Brand rejected
1. Fetch brand feedback (see Step 2 above)
2. Common fixes: correct EIN format (`XX-XXXXXXX`), match company name to IRS records exactly, fix stock symbol ifRelated in Ads & Marketing
ads
IncludedMulti-platform paid advertising audit and optimization skill. Analyzes Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, and Apple Ads. 250+ checks with scoring, parallel agents, industry templates, and AI creative generation.
banana
IncludedAI image generation Creative Director powered by Google Gemini Nano Banana models. Use this skill for ANY request involving image creation, editing, visual asset production, or creative direction. Triggers on: generate an image, create a photo, edit this picture, design a logo, make a banner, visual for my anything, and all /banana commands. Handles text-to-image, image editing, multi-turn creative sessions, batch workflows, and brand presets.
rpg-migration-analyzer
IncludedAnalyzes legacy RPG (Report Program Generator) programs from AS/400 and IBM i systems for migration to modern Java applications. Extracts business logic from RPG III/IV/ILE source code, identifies data structures (D-specs), file operations (F-specs), program dependencies (CALLB/CALLP), and converts RPG constructs to Java equivalents. Generates migration reports, complexity estimates, and Java implementation strategies with POJO classes, JPA entities, and service methods. Use when modernizing AS/400 or IBM i legacy systems, analyzing RPG source files (.rpg, .rpgle, .RPGLE), converting RPG to Java, mapping data specifications to Java classes, planning legacy system migration, or when user mentions RPG analysis, Report Program Generator, RPG III/IV/ILE, AS/400 modernization, IBM i migration, packed decimal conversion, or mainframe application rewrite.
brand-library-architect
IncludedBuild a complete brand library for a product — visual asset render pipeline, brand documentation set (BRAND, COPY, MANIFESTO, BIOS, FAQ, GLOSSARY, TONE, PRICING), open-source convention files (README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT), and a self-contained press kit. This skill should be used when the user asks to "build a brand library / brand kit / press kit / brand assets" for a product, "set up a brand library workflow," "create a positioning manifesto plus visual identity," or any combination of brand documentation + visual asset pipeline. Apply phase-by-phase or run end-to-end. Templates are product-agnostic and use {{TOKEN}} placeholders the skill prompts the user to fill.
writing-tech-post
IncludedAuthors engineering blog posts end-to-end: launch deep-dives, incident postmortems, architecture migrations, performance case studies, tutorials, AI/agent system writeups, security disclosures, and research-to-product translations. Picks the correct archetype, plans the abstraction ladder, enforces an evidence cadence (diagrams, benchmarks, profiles, traces, code, ablations), tunes voice against publisher house styles (Datadog, Vercel, GitHub, AWS, Meta, Cloudflare, Jane Street), and runs a pre-publish gate for narrative momentum and disclosure ethics. Use when drafting a new engineering post, restructuring a draft that feels flat, deciding which evidence form belongs where, validating that depth and product context are balanced, or preparing a postmortem, migration, or performance narrative for external publication. Do not use for API reference documentation, README authoring, marketing copy, release notes, generic SEO content, ghost-written executive thought leadership, or non-engineering long-form essays.
blog-google
IncludedGoogle API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity analysis for E-E-A-T, YouTube video search for embedding, and Google Ads Keyword Planner. Progressive feature availability based on credential tier (API key, OAuth/service account, GA4, Ads). Shares config with claude-seo at ~/.config/claude-seo/google-api.json. Use when user says "google data", "page speed", "core web vitals", "search console", "indexation", "GA4", "keyword research", "nlp entities", "blog performance", "youtube search", "google api setup".