> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 10DLC Registration

> Register for US 10-Digit Long Code (10DLC) messaging compliance

# 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).

***

## Registration Steps

### Step 1: Register Your Brand

Create a brand identity that represents your organization.

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/10dlc/brand \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "entity_type": "PRIVATE_PROFIT",
    "display_name": "Acme Corp",
    "company_name": "Acme Corporation Inc.",
    "ein": "12-3456789",
    "phone": "+14155551234",
    "street": "1 Market St",
    "city": "San Francisco",
    "state": "CA",
    "postal_code": "94105",
    "country": "US",
    "email": "compliance@acme.com",
    "website": "https://acme.com",
    "vertical": "TECHNOLOGY"
  }'
```

`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`):**

```json theme={null}
{
  "data": {
    "brandId": "BXXXXXX",
    "status": "PENDING"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2026-03-08T12:00:00Z"
  }
}
```

Brand vetting typically completes within 24–48 hours.

### Step 2: Create a Campaign

Register the specific use case for your messaging.

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/compliance/10dlc/campaign \
  -H "X-API-Key: dv_live_sk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "brand_id": "BXXXXXX",
    "usecase": "CUSTOMER_CARE",
    "description": "Sending order updates and support responses to customers who opted in on our website checkout form.",
    "sample_message": [
      "Your order #12345 has shipped! Track at https://acme.com/track/12345",
      "Hi! Your support ticket #567 has been resolved. Reply STOP to unsubscribe."
    ],
    "message_flow": "Customers opt in via a web form at checkout and confirm consent. They can reply STOP at any time to opt out.",
    "help_message": "Reply HELP for assistance or contact support@acme.com.",
    "optout_message": "You have been unsubscribed and will receive no further messages."
  }'
```

`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`):**

```json theme={null}
{
  "data": {
    "campaignId": "CXXXXXX",
    "status": "PENDING"
  },
  "meta": {
    "request_id": "req_def456",
    "timestamp": "2026-03-08T12:05:00Z"
  }
}
```

### Step 3: Wait for Approval

Campaign review takes 1–5 business days. You can check status:

```bash theme={null}
curl https://api.orbit.devotel.io/api/v1/compliance/10dlc/campaigns/CXXXXXX/status \
  -H "X-API-Key: dv_live_sk_your_key_here"
```

**Response:**

```json theme={null}
{
  "data": {
    "campaignId": "CXXXXXX",
    "status": "APPROVED",
    "brandId": "BXXXXXX",
    "mnoStatuses": {
      "10017": "APPROVED",
      "10035": "APPROVED",
      "10095": "REVIEW"
    },
    "provider": "telnyx"
  },
  "meta": {
    "request_id": "req_ghi789",
    "timestamp": "2026-03-09T09:00:00Z"
  }
}
```

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:**

| Status     | Description                                  |
| ---------- | -------------------------------------------- |
| `PENDING`  | Submitted, awaiting carrier review           |
| `APPROVED` | Approved — you can start sending             |
| `FAILED`   | Rejected — see `rejectionReason` for details |

### Step 4: Start Sending

Once approved, messages sent from registered numbers receive full 10DLC throughput and deliverability.

***

## 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.

| Use Case                      | Description                                                                 | Throughput               |
| ----------------------------- | --------------------------------------------------------------------------- | ------------------------ |
| `CUSTOMER_CARE`               | Account support, service replies, and alerts                                | Set by vetting score     |
| `MARKETING`                   | Promotions, offers, and sales outreach                                      | Set by vetting score     |
| `ACCOUNT_NOTIFICATION`        | Account changes, billing, and security notices                              | Set by vetting score     |
| `DELIVERY_NOTIFICATION`       | Order, shipping, and delivery updates                                       | Set by vetting score     |
| `TWO_FACTOR_AUTH`             | One-time passcodes and 2FA challenges                                       | Set by vetting score     |
| `POLLING_AND_VOTING`          | Surveys and polling (political campaigns also need a Campaign Verify token) | Set by vetting score     |
| `PUBLIC_SERVICE_ANNOUNCEMENT` | Public-interest announcements                                               | Set by vetting score     |
| `CHARITY`                     | Registered 501(c)(3) nonprofit messaging                                    | Reduced (501(c)(3) lane) |
| `EMERGENCY`                   | Safety and public-alert messaging                                           | Carrier priority         |
| `MIXED`                       | Multiple use cases in a single campaign (the default)                       | Reduced daily cap        |

***

## 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.

| Tier                | Eligibility                              | Daily cap per number |
| ------------------- | ---------------------------------------- | -------------------- |
| Sole Proprietor     | Entity type `SOLE_PROPRIETOR`            | \~1,000 msg/day      |
| Low Volume Standard | Baseline (any brand, including unscored) | \~30,000 msg/day     |
| Standard            | Vetting score 50 or higher               | \~200,000 msg/day    |
| Top Tier            | Vetting score 75 or higher               | \~2,000,000 msg/day  |

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.

<Tip>
  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.
</Tip>

***

## 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

<Note>
  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.
</Note>

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.

| Variable                 | Required     | Description                                                                                                                                                                                              |
| ------------------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DEVOTEL_TCR_API_KEY`    | for the feed | iconectiv TCR partner API key. The connector skips when unset.                                                                                                                                           |
| `DEVOTEL_TCR_PARTNER_ID` | for the feed | iconectiv TCR partner id (path segment on the partner API). The connector skips when unset.                                                                                                              |
| `DEVOTEL_TCR_FEED_URL`   | optional     | Override base URL for the partner API. Defaults to `https://csp-api.campaignregistry.com`.                                                                                                               |
| `DEVOTEL_TCR_OPTOUT_URL` | optional     | Override the full URL of the TCR Universal Opt-Out registry endpoint that drives the DNC opt-out pull. Defaults to `<feed_url>/v1/partner/<partner_id>/universalOptOuts`. Read-only — never a send path. |

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](https://iconectiv.com/) to obtain these credentials.

***

## Troubleshooting

| Issue                   | Solution                                                                        |
| ----------------------- | ------------------------------------------------------------------------------- |
| Brand rejected          | Verify your EIN matches IRS records exactly                                     |
| Campaign rejected       | Ensure sample messages match the selected use case and include opt-out language |
| Low vetting score       | Provide complete brand info (website, stock symbol, full legal name)            |
| Messages still filtered | Confirm the campaign status is `approved` and numbers are assigned              |

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