Skip to main content

10DLC Registration

10DLC (10-Digit Long Code) is the US carrier-mandated system for sending Application-to-Person (A2P) SMS messages using standard 10-digit phone numbers. All businesses sending SMS to US numbers must register through 10DLC to ensure deliverability and compliance.

Overview

US carriers (T-Mobile, AT&T, Verizon) require 10DLC registration for A2P messaging. Unregistered traffic faces:
  • Aggressive filtering — messages silently blocked
  • Higher fees — per-message surcharges for unregistered senders
  • Low throughput — limited to ~1 message/second vs. 75+ when registered
Orbit handles the registration process through The Campaign Registry (TCR).
Recommended flow: use the 10DLC registration wizard — it saves a resumable draft, lets you fill brand and campaign sections in any order, verifies a sole-proprietor’s phone by OTP, and submits both atomically. The linear endpoints below remain available for scripted pipelines.

Registration Steps

Step 1: Register Your Brand

Create a brand identity that represents your organization.
entity_type must be one of PRIVATE_PROFIT, PUBLIC_PROFIT, NON_PROFIT, GOVERNMENT, or SOLE_PROPRIETOR. display_name, company_name, phone, street, city, state, postal_code, and email are required; ein and website are optional. Response (201 Created):
Brand vetting typically completes within 24–48 hours.

Step 2: Create a Campaign

Register the specific use case for your messaging.
Before you submit — run the preflight linter against your brand + campaign payload. It catches the deterministic TCR rejections (missing opt-out wording, shortener links, use-case echo) while fixing them is still free. Each rejected submission costs a new vetting fee and restarts the 1–5 business-day review clock.
description must be at least 40 characters, message_flow at least 40, and both help_message and optout_message at least 20. sample_message is an array of 1–10 representative messages. Political-vertical campaigns (usecase of POLITICAL_ADVOCACY or POLLING_AND_VOTING, or is_political: true) additionally require a Campaign Verify cv_token. Response (201 Created):

Step 3: Wait for Approval

Campaign review takes 1–5 business days. You can check status:
Response:
The top-level status is the CSP-level decision. mnoStatuses is the per-carrier approval map (keys are MNO carrier ids — e.g. 10017 T-Mobile, 10035 AT&T, 10095 Verizon); a campaign can be APPROVED at the CSP level while still in REVIEW at an individual carrier. Statuses:

Step 4: Start Sending

Once approved, messages sent from registered numbers receive full 10DLC throughput and deliverability.
If a filing comes back FAILED, a vetting score caps your tier, or you need the headroom an approved campaign actually has — the 10DLC rejections and re-vet guide covers the decoder, re-vet, and throughput endpoints.

Preflight Your Submission

Most TCR rejections are deterministic — the same handful of content and completeness patterns trip first-time submissions over and over. Each rejection burns a new vetting fee (44–15 per resubmission) and restarts the 1–5 business-day review clock. Orbit ships a preflight linter that scores your brand + campaign payload against the known rejection-pattern catalog before you submit, and returns per-field findings — each with a severity, the exact offending text fragment, and a concrete rewrite suggestion. POST /api/v1/compliance/10dlc/preflight The linter is a pure rule engine: nothing is sent to TCR, nothing is stored, and no application is created. Any role on the organization can call it — no numbers:write scope required. Send the brand and campaign objects exactly as you plan to submit them, plus an optional brand_vetting_score (0–100) when you already hold one:
Response (200 OK):
Response shape. score is 0100 (100 = no known patterns matched; each finding deducts by severity). verdict is the aggregate — block when any error finding is present, warn below a score of 75, otherwise pass. Every findings[] entry carries a stable ruleId, a severity (error | warn | info), the dot-path field it applies to, a human summary, an optional match with the exact offending text (for highlighting in your UI), and a suggestion — a rewrite that resolves the finding. engine is the rule-engine version (tcr-preflight/v1), so you can correlate scores over time.
A pass verdict means “no known rejection patterns matched” — not “TCR will approve”. The linter catches the deterministic majority of rejections; your submission still goes through the normal carrier review. It is an advisor, never a gate: you decide when to submit.

What the 10DLC linter checks

The catalog encodes the patterns TCR and carriers reject on. Key rules: Fix each finding in order of severity, re-run the linter until the response is clean (verdict: "pass"), then submit the same payload through Step 2.

Use Case Types

Pass one of these values in the usecase field when creating a campaign (Step 2). TCR codes are uppercase — send them exactly as shown; a lowercase value is rejected at registration.

Throughput Tiers

10DLC throughput is granted as a per-day, per-number message-segment cap, not a per-second rate. Your tier is set by your brand vetting score (0–100) and your registered entity type. Each tier’s daily cap applies to every number assigned to the campaign, so total campaign throughput scales with the count of assigned numbers. Caps reflect T-Mobile defaults; AT&T and Verizon are within roughly 10%. You are granted the highest tier your vetting score qualifies for. A brand with no score yet defaults to the Low Volume Standard baseline.
Improve your vetting score by providing complete, accurate brand information including EIN, website, and stock symbol (if public). A score of 75 or higher unlocks the Top Tier daily cap.

Compliance Requirements

  1. Opt-in consent. You must have explicit consent from every recipient before sending.
  2. Opt-out handling. Honor STOP requests immediately. Orbit automatically processes STOP, CANCEL, and UNSUBSCRIBE.
  3. Message content. Sample messages must be representative of actual traffic.
  4. Consistent use. Only send messages that match your registered campaign use case.

Dashboard Registration

You can also complete the entire 10DLC registration through the Orbit dashboard:
  1. Navigate to Settings > Compliance > 10DLC
  2. Click Register Brand and fill in your company details
  3. Once the brand is approved, click Create Campaign
  4. Select your use case, add sample messages, and assign numbers
  5. Submit for carrier review

Country-Rule Feed Configuration

This section is for platform operators / self-hosted deployments. SaaS customers on api.orbit.devotel.io do not need to set these — Orbit keeps the 10DLC country rules current for you.
Orbit keeps its canonical US-10DLC country ruleset (sender types, throughput posture, registration requirement) fresh by pulling from the iconectiv TCR partner feed. The connector lives in @devotel/compliance/country-rule-feeds and runs in two places:
  • On-demand — the admin “Refresh from upstream” action (POST /api/v1/compliance/country-rules/sync?provider=iconectiv).
  • Weekly — the auto-refresh tick in the webhook-worker’s compliance-sync scheduler.
The connector is optional and fail-open: when its credentials are unset it logs an error and skips, leaving any existing country rules in place. It is a read-only metadata feed — never a message-transport path, so outbound SMS still exits via the Devotel softswitch. Both DEVOTEL_TCR_API_KEY and DEVOTEL_TCR_PARTNER_ID must be set for the feed to run; if either is missing the connector no-ops. Register Devotel as a TCR partner at iconectiv.com to obtain these credentials.

Troubleshooting

Sending high-volume SMS without 10DLC registration may result in carrier filtering, message blocking, and potential number suspension.