---
title: "Submit 10DLC registration"
method: POST
path: "/api/v1/numbers/{id}/10dlc"
tags: ["phoneNumbers"]
---

# Submit 10DLC registration

`POST /api/v1/numbers/{id}/10dlc`

Register a US number for 10DLC — the carrier registration required before
a number can send SMS or MMS to US phone numbers.

US carriers **block** outbound SMS and MMS sent from an unregistered
10-digit number to a US phone number. Registering this number lifts that
block. Inbound texts, voice calls in either direction, and messaging to
numbers outside the US are unaffected.

**Eligibility.** The number must be US, have the `sms` capability, and
not have the `imessage` capability (iMessage numbers send over Apple
Messages for Business, not carrier SMS). 10DLC registration is currently
offered on pay-as-you-go accounts only. An ineligible number returns
`403` — read the `tenDlc` object on the number to know in advance.

**Fee.** A one-time **$25.00** per number, taken from the account's credit
balance when the submission is accepted. A balance below the fee returns
`402`. **Resubmitting after a rejection is free** — the number is charged
at most once, ever.

**What happens next.** The submission lands in `in_review` while Dial
checks the details, moves to `with_carrier` once filed with the carrier
registry, and finishes as `approved` or `rejected`. Carriers usually
decide within 3–5 business days. Dial emails the account owner on approval
and on rejection; a rejection carries a `reason` explaining exactly what
to change before resubmitting.

**Body.** Two parts mirroring what the carrier registry registers: a
**brand** (who is registering) and a **campaign** (what they send). A
number is registered by joining the campaign. Send them as
`application/json`, or — to attach an opt-in screenshot — as
`multipart/form-data` with a `data` text part holding that same JSON
object plus one `optInImage` file part.

### Brand — both kinds

Every field is required.

| Key | Description |
|---|---|
| `brandName` | The registered business or DBA name; for a sole proprietor, the name they trade under. Carriers reject an account id or an email address here. |
| `firstName`, `lastName` | The person responsible for the registration. |
| `email` | Contact email. |
| `phone` | Mobile number in E.164. For a sole proprietor this receives a verification SMS — reply `YES` within 24 hours. **It may not be a Dial number**: carriers won't verify a number issued by a messaging provider, so use a mobile the person answers directly. |
| `street`, `city`, `zip` | The address on the registration. Validated against public records, so a typo is a rejection. |
| `country` | ISO 3166-1 alpha-2. **Sole proprietor: `US` or `CA` only** — that programme is US/Canada-only. A business may be registered from any country the registry accepts; a non-US brand needs its own country's tax ID and may draw extra vetting. Defaults to `US`. |
| `state` | State or province of the registered address — required whatever the country. The two-letter code for the US and Canada (`CA`, `ON`); the region name elsewhere. |

### Brand — `business` only

| Key | Description |
|---|---|
| `businessType` | Legal form. One of `Co-operative`, `Corporation`, `Limited Liability Corporation`, `Non-profit Corporation`, `Partnership`. A sole proprietorship is not a business brand — register as `sole_proprietor` instead. |
| `businessIndustry` | Industry code, e.g. `PROFESSIONAL_SERVICES`. See the enum. |
| `registrationIdType` | The kind of registration number. One of `EIN`, `DUNS`, `CBN`, `CN`, `ACN`, `CIN`, `VAT`, `VATRN`, `RN`, `Other`. |
| `registrationNumber` | The number itself — in the US, the EIN. |
| `websiteUrl` | Full `https://` URL. Reviewers check that it matches the brand. |
| `jobPosition` | One of `Director`, `GM`, `VP`, `CEO`, `CFO`, `General Counsel`, `Other`. |
| `businessTitle` | The actual job title, free text, e.g. `Head of Support`. |
| `businessRegionsOfOperation` | Where the business operates. One of `USA_AND_CANADA`, `AFRICA`, `ASIA`, `EUROPE`, `LATIN_AMERICA`. Defaults to `USA_AND_CANADA`. |
| `companyType` | One of `private`, `public`, `non-profit`, `government`. Defaults to `private`. |
| `stockExchange`, `stockTicker` | **Required when `companyType` is `public`**, ignored otherwise. Carriers check both against public sources, so they must match. |

### Campaign — both kinds

| Key | Description |
|---|---|
| `description` | Who is messaged and why. 40–4096 characters. Reviewers weigh this heavily; a single word is rejected. |
| `messageFlow` | How people opt in, naming every method used. 40–1920 characters (room above that is reserved for compliance material Dial appends when filing). |
| `optInImage` | Optional screenshot of the opt-in step as customers see it — the consent checkbox, form, or settings screen the `messageFlow` describes. Reviewers approve much faster when they can see the consent screen. Sent as the `optInImage` file part of a `multipart/form-data` request (max 2 MB; JPEG, PNG, WebP, or GIF). On a resubmission, leaving it out keeps the stored screenshot; sending `"optInImage": null` inside `campaign` removes it. |
| `samples` | Two to five sample messages, each 20–1024 characters. Each must name the brand and carry an opt-out instruction. If only one message text will ever be sent, repeat it. |
| `containsUrls`, `containsPhones` | Booleans — whether messages will contain links or phone numbers. Optional; default false. |
| `privacyPolicyUrl`, `termsUrl` | Full `https://` URLs — carriers require both on every campaign. **Required for a `business`**, and reviewers check they sit on the `websiteUrl` you registered. Optional for a sole proprietor: omit them and Dial publishes a privacy notice and terms page for the brand, built from this submission, and registers those. Supplying your own always wins. |

### Campaign — `business` only

| Key | Description |
|---|---|
| `useCase` | What the campaign is for, e.g. `CUSTOMER_CARE`. Optional; defaults to `MIXED`. A sole proprietor campaign is always `SOLE_PROPRIETOR` and takes no value here. |

### Campaign — `sole_proprietor` only

| Key | Description |
|---|---|
| `acceptPublishedNotice` | Boolean. **Required when you send neither `privacyPolicyUrl` nor `termsUrl`** — it authorises Dial to publish a privacy notice and terms page for your brand, built from this submission and naming you as the operator, and to register those URLs with carriers. Send your own two URLs instead and this field is ignored. Sending neither the URLs nor `true` here is a `400` — `tendlc_validation_failed`, keyed on `acceptPublishedNotice` — because carriers require the two pages and one of you has to provide them. |

## Path parameters

- `id` string, required

## Headers

- `Authorization` string, required

## Request body

- object
  - `kind` 'sole_proprietor' | 'business', required — Who is registering. A sole proprietor operates under their own name and has no EIN — lower throughput, quicker to approve. A business is a registered company with an EIN.
  - `brand` TenDlcBrand, required — Who is registering — the business identity carriers vet. The `business`-only fields are absent on a sole proprietor registration.
    - `brandName` string, required — The registered business or DBA name; for a sole proprietor, the name they trade under. Carriers reject an account id or an email address.
    - `firstName` string, required
    - `lastName` string, required
    - `email` string, email, required
    - `phone` string, required — Mobile number in **E.164** — it must carry its country code, because a brand registered outside the US would otherwise be guessed at. For a sole proprietor this receives the carrier's verification SMS, answered by replying `YES` within 24 hours. It may not be a Dial number — carriers won't verify a number issued by a messaging provider.
    - `street` string, required
    - `city` string, required
    - `state` string, required — State or province of the registered address, required whatever the country. The two-letter code for the US and Canada; the region name elsewhere.
    - `zip` string, required
    - `country` string, required — ISO 3166-1 alpha-2 country code of the registered address, defaulting to `US`. The NUMBER being registered is always US — that is what 10DLC is — but the business need not be. A **business** may be registered from any country the registry accepts, with its own country's tax ID in `registrationNumber` (a non-US brand may draw additional vetting). A **sole proprietor** must be in the US or Canada, so only `US` and `CA` are accepted for that kind.
    - `businessType` 'Co-operative' | 'Corporation' | 'Limited Liability Corporation' | 'Non-profit Corporation' | 'Partnership' — `business` only. The legal form. A sole proprietorship is not a business brand — register as `sole_proprietor` instead.
    - `businessIndustry` 'AGRICULTURE' | 'AUTOMOTIVE' | 'BANKING' | 'CONSTRUCTION' | 'CONSUMER' | 'EDUCATION' | 'ELECTRONICS' | 'ENGINEERING' | 'ENERGY' | 'FAST_MOVING_CONSUMER_GOODS' | 'FINANCIAL' | 'FINTECH' | 'FOOD_AND_BEVERAGE' | 'GOVERNMENT' | 'HEALTHCARE' | 'HOSPITALITY' | 'INSURANCE' | 'JEWELRY' | 'LEGAL' | 'MANUFACTURING' | 'MEDIA' | 'NOT_FOR_PROFIT' | 'OIL_AND_GAS' | 'ONLINE' | 'PROFESSIONAL_SERVICES' | 'RAW_MATERIALS' | 'REAL_ESTATE' | 'RELIGION' | 'RETAIL' | 'TECHNOLOGY' | 'TELECOMMUNICATIONS' | 'TRANSPORTATION' | 'TRAVEL' — `business` only.
    - `vertical` 'AGRICULTURE' | 'COMMUNICATION' | 'CONSTRUCTION' | 'EDUCATION' | 'ENERGY' | 'ENTERTAINMENT' | 'FINANCIAL' | 'GAMBLING' | 'GOVERNMENT' | 'HEALTHCARE' | 'HOSPITALITY' | 'HUMAN_RESOURCES' | 'INSURANCE' | 'LEGAL' | 'MANUFACTURING' | 'NGO' | 'POLITICAL' | 'POSTAL' | 'PROFESSIONAL' | 'REAL_ESTATE' | 'RETAIL' | 'TECHNOLOGY' | 'TRANSPORTATION' — `sole_proprietor` only, and required. The trade the brand operates in. This is the sole proprietor's counterpart to `businessIndustry`, but **the two take different values** — the registry validates them against separate vocabularies. `PROFESSIONAL` here is `PROFESSIONAL_SERVICES` there, and several industries have no vertical at all (`TRAVEL`, `MEDIA`, `TELECOMMUNICATIONS`, `RELIGION`, `ONLINE`, `NOT_FOR_PROFIT`, `AUTOMOTIVE`, `BANKING`). Send a value from this list, not from `businessIndustry`'s.
    - `registrationIdType` 'EIN' | 'DUNS' | 'CBN' | 'CN' | 'ACN' | 'CIN' | 'VAT' | 'VATRN' | 'RN' | 'Other' — `business` only. Which registration number follows.
    - `registrationNumber` string — `business` only. In the US, the EIN.
    - `websiteUrl` string — `business` only. Reviewers check it matches the brand.
    - `jobPosition` 'Director' | 'GM' | 'VP' | 'CEO' | 'CFO' | 'General Counsel' | 'Other' — `business` only. The representative's role.
    - `businessTitle` string — `business` only. The actual job title, free text.
    - `businessRegionsOfOperation` 'USA_AND_CANADA' | 'AFRICA' | 'ASIA' | 'EUROPE' | 'LATIN_AMERICA' — `business` only. Where the business operates.
    - `companyType` 'private' | 'public' | 'non-profit' | 'government' — `business` only.
    - `stockExchange` 'NASDAQ' | 'NYSE' | 'AMEX' | 'AMX' | 'ASX' | 'B3' | 'BME' | 'BSE' | 'FRA' | 'ICEX' | 'JPX' | 'JSE' | 'KRX' | 'LON' | 'NSE' | 'OMX' | 'SEHK' | 'SGX' | 'SSE' | 'STO' | 'SWX' | 'SZSE' | 'TSX' | 'TWSE' | 'VSE' | 'OTHER' — `business` only, and required when `companyType` is `public`. Carriers check it against public sources.
    - `stockTicker` string — `business` only, and required when `companyType` is `public`.
  - `campaign` TenDlcCampaign, required — What the number sends — the use case carriers approve. A sole proprietor registration's use case is always `SOLE_PROPRIETOR`, and its policy URLs are the ones Dial publishes unless it supplied its own.
    - `useCase` 'MIXED' | 'MARKETING' | 'CUSTOMER_CARE' | '2FA' | 'ACCOUNT_NOTIFICATION' | 'DELIVERY_NOTIFICATION' | 'FRAUD_ALERT' | 'SECURITY_ALERT' | 'HIGHER_EDUCATION' | 'POLLING_VOTING' | 'PUBLIC_SERVICE_ANNOUNCEMENT' | 'SOLE_PROPRIETOR', required — What the campaign is for. Optional on submit for a `business`, defaulting to `MIXED`. Always `SOLE_PROPRIETOR` for a sole proprietor, which takes no value on submit.
    - `description` string, required — Who is messaged and why. Reviewers weigh this heavily — a single word like "Marketing" is rejected.
    - `messageFlow` string, required — How people opt in. If more than one method is used, all must be named. Room above 1920 characters is reserved for compliance material Dial appends when filing with the carrier registry.
    - `samples` string[], required — Sample messages. Each must name the brand and carry an opt-out instruction. If only one message text will ever be sent, repeat it — carriers require at least two.
    - `privacyPolicyUrl` string — The privacy policy registered with the campaign. Your own if you gave one; otherwise, for a sole proprietor, the notice Dial publishes for the brand.
    - `termsUrl` string — The terms registered with the campaign — your own, or the page Dial publishes for a sole proprietor who gave none.
    - `containsUrls` boolean, required — Whether messages will contain links. Defaults to false.
    - `containsPhones` boolean, required — Whether messages will contain phone numbers. Defaults to false.
    - `acceptPublishedNotice` boolean — Accepted on submit, never returned. Required on a sole proprietor campaign that sends neither `privacyPolicyUrl` nor `termsUrl`: it authorises Dial to publish those two pages for the brand and register them. Ignored when you send your own URLs.
    - `optInImage` unknown
    - `optInImageUrl` string, nullable — Where the submitted opt-in screenshot is hosted — the image carrier reviewers see. `null` when none was attached.

## Response `200`

Submitted, and the fee charged unless this was a free resubmission.

- PhoneNumbersSubmitTenDlcRegistrationResponse200
  - `registration` TenDlcRegistration — A number's 10DLC registration — the brand, the campaign, and where the registration stands. Returned by Get and Submit 10DLC registration.
    - `phoneNumberId` string, required
    - `status` 'in_review' | 'with_carrier' | 'approved' | 'rejected', required — Where the registration stands. Unlike the `tenDlc` summary on a phone number, this object only exists once something has been submitted, so `not_registered` never appears here.
    - `kind` 'sole_proprietor' | 'business', required — Who the number is registered as. A sole proprietor operates under their own name and has no EIN — lower throughput, quicker to approve. A business is a registered company with an EIN.
    - `brand` TenDlcBrand, required — Who is registering — the business identity carriers vet. The `business`-only fields are absent on a sole proprietor registration.
      - `brandName` string, required — The registered business or DBA name; for a sole proprietor, the name they trade under. Carriers reject an account id or an email address.
      - `firstName` string, required
      - `lastName` string, required
      - `email` string, email, required
      - `phone` string, required — Mobile number in **E.164** — it must carry its country code, because a brand registered outside the US would otherwise be guessed at. For a sole proprietor this receives the carrier's verification SMS, answered by replying `YES` within 24 hours. It may not be a Dial number — carriers won't verify a number issued by a messaging provider.
      - `street` string, required
      - `city` string, required
      - `state` string, required — State or province of the registered address, required whatever the country. The two-letter code for the US and Canada; the region name elsewhere.
      - `zip` string, required
      - `country` string, required — ISO 3166-1 alpha-2 country code of the registered address, defaulting to `US`. The NUMBER being registered is always US — that is what 10DLC is — but the business need not be. A **business** may be registered from any country the registry accepts, with its own country's tax ID in `registrationNumber` (a non-US brand may draw additional vetting). A **sole proprietor** must be in the US or Canada, so only `US` and `CA` are accepted for that kind.
      - `businessType` 'Co-operative' | 'Corporation' | 'Limited Liability Corporation' | 'Non-profit Corporation' | 'Partnership' — `business` only. The legal form. A sole proprietorship is not a business brand — register as `sole_proprietor` instead.
      - `businessIndustry` 'AGRICULTURE' | 'AUTOMOTIVE' | 'BANKING' | 'CONSTRUCTION' | 'CONSUMER' | 'EDUCATION' | 'ELECTRONICS' | 'ENGINEERING' | 'ENERGY' | 'FAST_MOVING_CONSUMER_GOODS' | 'FINANCIAL' | 'FINTECH' | 'FOOD_AND_BEVERAGE' | 'GOVERNMENT' | 'HEALTHCARE' | 'HOSPITALITY' | 'INSURANCE' | 'JEWELRY' | 'LEGAL' | 'MANUFACTURING' | 'MEDIA' | 'NOT_FOR_PROFIT' | 'OIL_AND_GAS' | 'ONLINE' | 'PROFESSIONAL_SERVICES' | 'RAW_MATERIALS' | 'REAL_ESTATE' | 'RELIGION' | 'RETAIL' | 'TECHNOLOGY' | 'TELECOMMUNICATIONS' | 'TRANSPORTATION' | 'TRAVEL' — `business` only.
      - `vertical` 'AGRICULTURE' | 'COMMUNICATION' | 'CONSTRUCTION' | 'EDUCATION' | 'ENERGY' | 'ENTERTAINMENT' | 'FINANCIAL' | 'GAMBLING' | 'GOVERNMENT' | 'HEALTHCARE' | 'HOSPITALITY' | 'HUMAN_RESOURCES' | 'INSURANCE' | 'LEGAL' | 'MANUFACTURING' | 'NGO' | 'POLITICAL' | 'POSTAL' | 'PROFESSIONAL' | 'REAL_ESTATE' | 'RETAIL' | 'TECHNOLOGY' | 'TRANSPORTATION' — `sole_proprietor` only, and required. The trade the brand operates in. This is the sole proprietor's counterpart to `businessIndustry`, but **the two take different values** — the registry validates them against separate vocabularies. `PROFESSIONAL` here is `PROFESSIONAL_SERVICES` there, and several industries have no vertical at all (`TRAVEL`, `MEDIA`, `TELECOMMUNICATIONS`, `RELIGION`, `ONLINE`, `NOT_FOR_PROFIT`, `AUTOMOTIVE`, `BANKING`). Send a value from this list, not from `businessIndustry`'s.
      - `registrationIdType` 'EIN' | 'DUNS' | 'CBN' | 'CN' | 'ACN' | 'CIN' | 'VAT' | 'VATRN' | 'RN' | 'Other' — `business` only. Which registration number follows.
      - `registrationNumber` string — `business` only. In the US, the EIN.
      - `websiteUrl` string — `business` only. Reviewers check it matches the brand.
      - `jobPosition` 'Director' | 'GM' | 'VP' | 'CEO' | 'CFO' | 'General Counsel' | 'Other' — `business` only. The representative's role.
      - `businessTitle` string — `business` only. The actual job title, free text.
      - `businessRegionsOfOperation` 'USA_AND_CANADA' | 'AFRICA' | 'ASIA' | 'EUROPE' | 'LATIN_AMERICA' — `business` only. Where the business operates.
      - `companyType` 'private' | 'public' | 'non-profit' | 'government' — `business` only.
      - `stockExchange` 'NASDAQ' | 'NYSE' | 'AMEX' | 'AMX' | 'ASX' | 'B3' | 'BME' | 'BSE' | 'FRA' | 'ICEX' | 'JPX' | 'JSE' | 'KRX' | 'LON' | 'NSE' | 'OMX' | 'SEHK' | 'SGX' | 'SSE' | 'STO' | 'SWX' | 'SZSE' | 'TSX' | 'TWSE' | 'VSE' | 'OTHER' — `business` only, and required when `companyType` is `public`. Carriers check it against public sources.
      - `stockTicker` string — `business` only, and required when `companyType` is `public`.
    - `campaign` TenDlcCampaign, required — What the number sends — the use case carriers approve. A sole proprietor registration's use case is always `SOLE_PROPRIETOR`, and its policy URLs are the ones Dial publishes unless it supplied its own.
      - `useCase` 'MIXED' | 'MARKETING' | 'CUSTOMER_CARE' | '2FA' | 'ACCOUNT_NOTIFICATION' | 'DELIVERY_NOTIFICATION' | 'FRAUD_ALERT' | 'SECURITY_ALERT' | 'HIGHER_EDUCATION' | 'POLLING_VOTING' | 'PUBLIC_SERVICE_ANNOUNCEMENT' | 'SOLE_PROPRIETOR', required — What the campaign is for. Optional on submit for a `business`, defaulting to `MIXED`. Always `SOLE_PROPRIETOR` for a sole proprietor, which takes no value on submit.
      - `description` string, required — Who is messaged and why. Reviewers weigh this heavily — a single word like "Marketing" is rejected.
      - `messageFlow` string, required — How people opt in. If more than one method is used, all must be named. Room above 1920 characters is reserved for compliance material Dial appends when filing with the carrier registry.
      - `samples` string[], required — Sample messages. Each must name the brand and carry an opt-out instruction. If only one message text will ever be sent, repeat it — carriers require at least two.
      - `privacyPolicyUrl` string — The privacy policy registered with the campaign. Your own if you gave one; otherwise, for a sole proprietor, the notice Dial publishes for the brand.
      - `termsUrl` string — The terms registered with the campaign — your own, or the page Dial publishes for a sole proprietor who gave none.
      - `containsUrls` boolean, required — Whether messages will contain links. Defaults to false.
      - `containsPhones` boolean, required — Whether messages will contain phone numbers. Defaults to false.
      - `acceptPublishedNotice` boolean — Accepted on submit, never returned. Required on a sole proprietor campaign that sends neither `privacyPolicyUrl` nor `termsUrl`: it authorises Dial to publish those two pages for the brand and register them. Ignored when you send your own URLs.
      - `optInImage` unknown
      - `optInImageUrl` string, nullable — Where the submitted opt-in screenshot is hosted — the image carrier reviewers see. `null` when none was attached.
    - `feeCents` integer, required — The one-time registration fee charged for this number, in USD cents.
    - `reason` string, nullable, required — What needs to change. Non-null only when `status` is `rejected`.
    - `submittedAt` string, date-time, required
    - `reviewedAt` string, date-time, nullable, required — When the registration was approved or rejected; null until then.

## Other responses

- `400` — The body failed validation. For field-level problems the error code is `tendlc_validation_failed` and `error` is an object mapping each offending field key to a human-readable message. Keys are the flat field names, not the `brand.` / `campaign.` paths, so a form can highlight them directly.
- `401` — Missing or invalid API key.
- `402` — The account's credit balance is below the $25.00 registration fee. Add credit and submit again. (error code `insufficient_credit`.)
- `403` — 10DLC registration isn't available here. Either it doesn't apply to this number — it isn't US, or it has the `imessage` capability (error code `tendlc_not_applicable`) — or the account isn't pay-as-you-go and has no existing registration for the number (error code `tendlc_not_available`). The `tenDlc` object on the phone number is null in both cases.
- `404` — The requested resource was not found on this account.
- `409` — This number already has a registration that is in review, filed with the carrier registry, or approved. Only a rejected registration can be resubmitted. (error code `tendlc_already_registered`.)

---

[API](https://skmtc.net/getdial/apis/rest-api.md) · [All operations](https://skmtc.net/getdial/apis/rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/getdial/rest-api/versions/cfa621230237/schema)
