> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.getdial.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.getdial.ai/_mcp/server.

# Submit 10DLC registration

POST https://api.getdial.ai/api/v1/numbers/{id}/10dlc
Content-Type: application/json

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


Reference: https://docs.getdial.ai/api-reference/rest-api/phone-numbers/submit-ten-dlc-registration

## Authentication

- `Authorization` header (bearer token, required) — Your Dial API key, sent as `Authorization: Bearer sk_live_...`

## Request

### Path parameters

- `id` (string, required)

### Body (application/json)

- `kind` (enum, 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.
  - Allowed values: `sole_proprietor`, `business`
- `brand` (object, 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, 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` (enum, optional) — `business` only. The legal form. A sole proprietorship is not a business brand — register as `sole_proprietor` instead.
    - Allowed values: `Co-operative`, `Corporation`, `Limited Liability Corporation`, `Non-profit Corporation`, `Partnership`
  - `businessIndustry` (enum, optional) — `business` only.
    - Allowed values: `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`
  - `vertical` (enum, optional) — `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.
    - Allowed values: `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`
  - `registrationIdType` (enum, optional) — `business` only. Which registration number follows.
    - Allowed values: `EIN`, `DUNS`, `CBN`, `CN`, `ACN`, `CIN`, `VAT`, `VATRN`, `RN`, `Other`
  - `registrationNumber` (string, optional) — `business` only. In the US, the EIN.
  - `websiteUrl` (string, optional) — `business` only. Reviewers check it matches the brand.
  - `jobPosition` (enum, optional) — `business` only. The representative's role.
    - Allowed values: `Director`, `GM`, `VP`, `CEO`, `CFO`, `General Counsel`, `Other`
  - `businessTitle` (string, optional) — `business` only. The actual job title, free text.
  - `businessRegionsOfOperation` (enum, optional) — `business` only. Where the business operates.
    - Allowed values: `USA_AND_CANADA`, `AFRICA`, `ASIA`, `EUROPE`, `LATIN_AMERICA`
  - `companyType` (enum, optional) — `business` only.
    - Allowed values: `private`, `public`, `non-profit`, `government`
  - `stockExchange` (enum, optional) — `business` only, and required when `companyType` is `public`. Carriers check it against public sources.
    - Allowed values: `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`
  - `stockTicker` (string, optional) — `business` only, and required when `companyType` is `public`.
- `campaign` (object, 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` (enum, 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.
    - Allowed values: `MIXED`, `MARKETING`, `CUSTOMER_CARE`, `2FA`, `ACCOUNT_NOTIFICATION`, `DELIVERY_NOTIFICATION`, `FRAUD_ALERT`, `SECURITY_ALERT`, `HIGHER_EDUCATION`, `POLLING_VOTING`, `PUBLIC_SERVICE_ANNOUNCEMENT`, `SOLE_PROPRIETOR`
  - `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` (list of 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.
  - `containsUrls` (boolean, required) — Whether messages will contain links. Defaults to false.
  - `containsPhones` (boolean, required) — Whether messages will contain phone numbers. Defaults to false.
  - `privacyPolicyUrl` (string, optional) — 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, optional) — The terms registered with the campaign — your own, or the page Dial publishes for a sole proprietor who gave none.
  - `acceptPublishedNotice` (boolean, optional) — 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` (any, optional) — Accepted on submit, never returned. The screenshot itself travels as the `optInImage` file part of a `multipart/form-data` request; this JSON key exists only to **remove** a stored screenshot — send `null` on a resubmission. Leaving both out keeps whatever is stored.
  - `optInImageUrl` (string, optional, 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.

- `registration` (object, optional) — 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` (enum, 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.
    - Allowed values: `in_review`, `with_carrier`, `approved`, `rejected`
  - `kind` (enum, 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.
    - Allowed values: `sole_proprietor`, `business`
  - `brand` (object, 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, 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` (enum, optional) — `business` only. The legal form. A sole proprietorship is not a business brand — register as `sole_proprietor` instead.
      - Allowed values: `Co-operative`, `Corporation`, `Limited Liability Corporation`, `Non-profit Corporation`, `Partnership`
    - `businessIndustry` (enum, optional) — `business` only.
      - Allowed values: `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`
    - `vertical` (enum, optional) — `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.
      - Allowed values: `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`
    - `registrationIdType` (enum, optional) — `business` only. Which registration number follows.
      - Allowed values: `EIN`, `DUNS`, `CBN`, `CN`, `ACN`, `CIN`, `VAT`, `VATRN`, `RN`, `Other`
    - `registrationNumber` (string, optional) — `business` only. In the US, the EIN.
    - `websiteUrl` (string, optional) — `business` only. Reviewers check it matches the brand.
    - `jobPosition` (enum, optional) — `business` only. The representative's role.
      - Allowed values: `Director`, `GM`, `VP`, `CEO`, `CFO`, `General Counsel`, `Other`
    - `businessTitle` (string, optional) — `business` only. The actual job title, free text.
    - `businessRegionsOfOperation` (enum, optional) — `business` only. Where the business operates.
      - Allowed values: `USA_AND_CANADA`, `AFRICA`, `ASIA`, `EUROPE`, `LATIN_AMERICA`
    - `companyType` (enum, optional) — `business` only.
      - Allowed values: `private`, `public`, `non-profit`, `government`
    - `stockExchange` (enum, optional) — `business` only, and required when `companyType` is `public`. Carriers check it against public sources.
      - Allowed values: `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`
    - `stockTicker` (string, optional) — `business` only, and required when `companyType` is `public`.
  - `campaign` (object, 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` (enum, 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.
      - Allowed values: `MIXED`, `MARKETING`, `CUSTOMER_CARE`, `2FA`, `ACCOUNT_NOTIFICATION`, `DELIVERY_NOTIFICATION`, `FRAUD_ALERT`, `SECURITY_ALERT`, `HIGHER_EDUCATION`, `POLLING_VOTING`, `PUBLIC_SERVICE_ANNOUNCEMENT`, `SOLE_PROPRIETOR`
    - `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` (list of 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.
    - `containsUrls` (boolean, required) — Whether messages will contain links. Defaults to false.
    - `containsPhones` (boolean, required) — Whether messages will contain phone numbers. Defaults to false.
    - `privacyPolicyUrl` (string, optional) — 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, optional) — The terms registered with the campaign — your own, or the page Dial publishes for a sole proprietor who gave none.
    - `acceptPublishedNotice` (boolean, optional) — 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` (any, optional) — Accepted on submit, never returned. The screenshot itself travels as the `optInImage` file part of a `multipart/form-data` request; this JSON key exists only to **remove** a stored screenshot — send `null` on a resubmission. Leaving both out keeps whatever is stored.
    - `optInImageUrl` (string, optional, 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, required, nullable) — What needs to change. Non-null only when `status` is `rejected`.
  - `submittedAt` (datetime, required)
  - `reviewedAt` (datetime, required, nullable) — When the registration was approved or rejected; null until then.

## Examples

**Request**

```json
{
  "kind": "business",
  "brand": {
    "brandName": "Northwind Supply Co.",
    "firstName": "Maya",
    "lastName": "Chen",
    "email": "maya@northwind.io",
    "phone": "+14155550110",
    "street": "480 Bryant St",
    "city": "San Francisco",
    "state": "CA",
    "zip": "94107",
    "country": "US",
    "businessType": "Limited Liability Corporation",
    "businessIndustry": "RETAIL",
    "registrationIdType": "EIN",
    "registrationNumber": "84-3921776",
    "websiteUrl": "https://northwind.io",
    "jobPosition": "Other",
    "businessTitle": "Head of Operations"
  },
  "campaign": {
    "useCase": "CUSTOMER_CARE",
    "description": "We text customers who placed an order to confirm delivery windows and let them reschedule. Every recipient checked the SMS box at checkout.",
    "messageFlow": "Customers tick an unchecked SMS consent box at checkout under the heading Text me delivery updates, beside message frequency and STOP instructions.",
    "samples": [
      "Northwind Supply: your order #40218 is out for delivery today between 2-4pm. Reply STOP to opt out.",
      "Northwind Supply: thanks for your order! Track it at northwind.io/track. Reply STOP to unsubscribe."
    ],
    "containsUrls": true,
    "containsPhones": false,
    "privacyPolicyUrl": "https://northwind.io/privacy",
    "termsUrl": "https://northwind.io/terms"
  }
}
```

**Response**

```json
{
  "registration": {
    "phoneNumberId": "string",
    "status": "in_review",
    "kind": "business",
    "brand": {
      "brandName": "Northwind Supply Co.",
      "firstName": "Maya",
      "lastName": "Chen",
      "email": "maya@northwind.io",
      "phone": "+14155550110",
      "street": "480 Bryant St",
      "city": "San Francisco",
      "state": "CA",
      "zip": "94107",
      "country": "US",
      "businessType": "Limited Liability Corporation",
      "businessIndustry": "RETAIL",
      "vertical": "PROFESSIONAL",
      "registrationIdType": "EIN",
      "registrationNumber": "84-3921776",
      "websiteUrl": "https://northwind.io",
      "jobPosition": "Other",
      "businessTitle": "Head of Support",
      "businessRegionsOfOperation": "USA_AND_CANADA",
      "companyType": "private",
      "stockExchange": "NYSE",
      "stockTicker": "TWLO"
    },
    "campaign": {
      "useCase": "CUSTOMER_CARE",
      "description": "string",
      "messageFlow": "string",
      "samples": [
        "string"
      ],
      "containsUrls": true,
      "containsPhones": true,
      "privacyPolicyUrl": "https://northwind.io/privacy",
      "termsUrl": "https://northwind.io/terms",
      "optInImageUrl": "https://getdial.ai/public-media/1f2e3d4c5b6a79881f2e3d4c5b6a7988.png"
    },
    "feeCents": 2500,
    "reason": "string",
    "submittedAt": "2024-01-15T09:30:00Z",
    "reviewedAt": "2024-01-15T09:30:00Z"
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.getdial.ai/api/v1/numbers/id/10dlc"

payload = {
    "kind": "business",
    "brand": {
        "brandName": "Northwind Supply Co.",
        "firstName": "Maya",
        "lastName": "Chen",
        "email": "maya@northwind.io",
        "phone": "+14155550110",
        "street": "480 Bryant St",
        "city": "San Francisco",
        "state": "CA",
        "zip": "94107",
        "country": "US",
        "businessType": "Limited Liability Corporation",
        "businessIndustry": "RETAIL",
        "registrationIdType": "EIN",
        "registrationNumber": "84-3921776",
        "websiteUrl": "https://northwind.io",
        "jobPosition": "Other",
        "businessTitle": "Head of Operations"
    },
    "campaign": {
        "useCase": "CUSTOMER_CARE",
        "description": "We text customers who placed an order to confirm delivery windows and let them reschedule. Every recipient checked the SMS box at checkout.",
        "messageFlow": "Customers tick an unchecked SMS consent box at checkout under the heading Text me delivery updates, beside message frequency and STOP instructions.",
        "samples": ["Northwind Supply: your order #40218 is out for delivery today between 2-4pm. Reply STOP to opt out.", "Northwind Supply: thanks for your order! Track it at northwind.io/track. Reply STOP to unsubscribe."],
        "containsUrls": True,
        "containsPhones": False,
        "privacyPolicyUrl": "https://northwind.io/privacy",
        "termsUrl": "https://northwind.io/terms"
    }
}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.getdial.ai/api/v1/numbers/id/10dlc';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"kind":"business","brand":{"brandName":"Northwind Supply Co.","firstName":"Maya","lastName":"Chen","email":"maya@northwind.io","phone":"+14155550110","street":"480 Bryant St","city":"San Francisco","state":"CA","zip":"94107","country":"US","businessType":"Limited Liability Corporation","businessIndustry":"RETAIL","registrationIdType":"EIN","registrationNumber":"84-3921776","websiteUrl":"https://northwind.io","jobPosition":"Other","businessTitle":"Head of Operations"},"campaign":{"useCase":"CUSTOMER_CARE","description":"We text customers who placed an order to confirm delivery windows and let them reschedule. Every recipient checked the SMS box at checkout.","messageFlow":"Customers tick an unchecked SMS consent box at checkout under the heading Text me delivery updates, beside message frequency and STOP instructions.","samples":["Northwind Supply: your order #40218 is out for delivery today between 2-4pm. Reply STOP to opt out.","Northwind Supply: thanks for your order! Track it at northwind.io/track. Reply STOP to unsubscribe."],"containsUrls":true,"containsPhones":false,"privacyPolicyUrl":"https://northwind.io/privacy","termsUrl":"https://northwind.io/terms"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.getdial.ai/api/v1/numbers/id/10dlc"

	payload := strings.NewReader("{\n  \"kind\": \"business\",\n  \"brand\": {\n    \"brandName\": \"Northwind Supply Co.\",\n    \"firstName\": \"Maya\",\n    \"lastName\": \"Chen\",\n    \"email\": \"maya@northwind.io\",\n    \"phone\": \"+14155550110\",\n    \"street\": \"480 Bryant St\",\n    \"city\": \"San Francisco\",\n    \"state\": \"CA\",\n    \"zip\": \"94107\",\n    \"country\": \"US\",\n    \"businessType\": \"Limited Liability Corporation\",\n    \"businessIndustry\": \"RETAIL\",\n    \"registrationIdType\": \"EIN\",\n    \"registrationNumber\": \"84-3921776\",\n    \"websiteUrl\": \"https://northwind.io\",\n    \"jobPosition\": \"Other\",\n    \"businessTitle\": \"Head of Operations\"\n  },\n  \"campaign\": {\n    \"useCase\": \"CUSTOMER_CARE\",\n    \"description\": \"We text customers who placed an order to confirm delivery windows and let them reschedule. Every recipient checked the SMS box at checkout.\",\n    \"messageFlow\": \"Customers tick an unchecked SMS consent box at checkout under the heading Text me delivery updates, beside message frequency and STOP instructions.\",\n    \"samples\": [\n      \"Northwind Supply: your order #40218 is out for delivery today between 2-4pm. Reply STOP to opt out.\",\n      \"Northwind Supply: thanks for your order! Track it at northwind.io/track. Reply STOP to unsubscribe.\"\n    ],\n    \"containsUrls\": true,\n    \"containsPhones\": false,\n    \"privacyPolicyUrl\": \"https://northwind.io/privacy\",\n    \"termsUrl\": \"https://northwind.io/terms\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.getdial.ai/api/v1/numbers/id/10dlc")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"kind\": \"business\",\n  \"brand\": {\n    \"brandName\": \"Northwind Supply Co.\",\n    \"firstName\": \"Maya\",\n    \"lastName\": \"Chen\",\n    \"email\": \"maya@northwind.io\",\n    \"phone\": \"+14155550110\",\n    \"street\": \"480 Bryant St\",\n    \"city\": \"San Francisco\",\n    \"state\": \"CA\",\n    \"zip\": \"94107\",\n    \"country\": \"US\",\n    \"businessType\": \"Limited Liability Corporation\",\n    \"businessIndustry\": \"RETAIL\",\n    \"registrationIdType\": \"EIN\",\n    \"registrationNumber\": \"84-3921776\",\n    \"websiteUrl\": \"https://northwind.io\",\n    \"jobPosition\": \"Other\",\n    \"businessTitle\": \"Head of Operations\"\n  },\n  \"campaign\": {\n    \"useCase\": \"CUSTOMER_CARE\",\n    \"description\": \"We text customers who placed an order to confirm delivery windows and let them reschedule. Every recipient checked the SMS box at checkout.\",\n    \"messageFlow\": \"Customers tick an unchecked SMS consent box at checkout under the heading Text me delivery updates, beside message frequency and STOP instructions.\",\n    \"samples\": [\n      \"Northwind Supply: your order #40218 is out for delivery today between 2-4pm. Reply STOP to opt out.\",\n      \"Northwind Supply: thanks for your order! Track it at northwind.io/track. Reply STOP to unsubscribe.\"\n    ],\n    \"containsUrls\": true,\n    \"containsPhones\": false,\n    \"privacyPolicyUrl\": \"https://northwind.io/privacy\",\n    \"termsUrl\": \"https://northwind.io/terms\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.getdial.ai/api/v1/numbers/id/10dlc")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"kind\": \"business\",\n  \"brand\": {\n    \"brandName\": \"Northwind Supply Co.\",\n    \"firstName\": \"Maya\",\n    \"lastName\": \"Chen\",\n    \"email\": \"maya@northwind.io\",\n    \"phone\": \"+14155550110\",\n    \"street\": \"480 Bryant St\",\n    \"city\": \"San Francisco\",\n    \"state\": \"CA\",\n    \"zip\": \"94107\",\n    \"country\": \"US\",\n    \"businessType\": \"Limited Liability Corporation\",\n    \"businessIndustry\": \"RETAIL\",\n    \"registrationIdType\": \"EIN\",\n    \"registrationNumber\": \"84-3921776\",\n    \"websiteUrl\": \"https://northwind.io\",\n    \"jobPosition\": \"Other\",\n    \"businessTitle\": \"Head of Operations\"\n  },\n  \"campaign\": {\n    \"useCase\": \"CUSTOMER_CARE\",\n    \"description\": \"We text customers who placed an order to confirm delivery windows and let them reschedule. Every recipient checked the SMS box at checkout.\",\n    \"messageFlow\": \"Customers tick an unchecked SMS consent box at checkout under the heading Text me delivery updates, beside message frequency and STOP instructions.\",\n    \"samples\": [\n      \"Northwind Supply: your order #40218 is out for delivery today between 2-4pm. Reply STOP to opt out.\",\n      \"Northwind Supply: thanks for your order! Track it at northwind.io/track. Reply STOP to unsubscribe.\"\n    ],\n    \"containsUrls\": true,\n    \"containsPhones\": false,\n    \"privacyPolicyUrl\": \"https://northwind.io/privacy\",\n    \"termsUrl\": \"https://northwind.io/terms\"\n  }\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.getdial.ai/api/v1/numbers/id/10dlc', [
  'body' => '{
  "kind": "business",
  "brand": {
    "brandName": "Northwind Supply Co.",
    "firstName": "Maya",
    "lastName": "Chen",
    "email": "maya@northwind.io",
    "phone": "+14155550110",
    "street": "480 Bryant St",
    "city": "San Francisco",
    "state": "CA",
    "zip": "94107",
    "country": "US",
    "businessType": "Limited Liability Corporation",
    "businessIndustry": "RETAIL",
    "registrationIdType": "EIN",
    "registrationNumber": "84-3921776",
    "websiteUrl": "https://northwind.io",
    "jobPosition": "Other",
    "businessTitle": "Head of Operations"
  },
  "campaign": {
    "useCase": "CUSTOMER_CARE",
    "description": "We text customers who placed an order to confirm delivery windows and let them reschedule. Every recipient checked the SMS box at checkout.",
    "messageFlow": "Customers tick an unchecked SMS consent box at checkout under the heading Text me delivery updates, beside message frequency and STOP instructions.",
    "samples": [
      "Northwind Supply: your order #40218 is out for delivery today between 2-4pm. Reply STOP to opt out.",
      "Northwind Supply: thanks for your order! Track it at northwind.io/track. Reply STOP to unsubscribe."
    ],
    "containsUrls": true,
    "containsPhones": false,
    "privacyPolicyUrl": "https://northwind.io/privacy",
    "termsUrl": "https://northwind.io/terms"
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.getdial.ai/api/v1/numbers/id/10dlc");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"kind\": \"business\",\n  \"brand\": {\n    \"brandName\": \"Northwind Supply Co.\",\n    \"firstName\": \"Maya\",\n    \"lastName\": \"Chen\",\n    \"email\": \"maya@northwind.io\",\n    \"phone\": \"+14155550110\",\n    \"street\": \"480 Bryant St\",\n    \"city\": \"San Francisco\",\n    \"state\": \"CA\",\n    \"zip\": \"94107\",\n    \"country\": \"US\",\n    \"businessType\": \"Limited Liability Corporation\",\n    \"businessIndustry\": \"RETAIL\",\n    \"registrationIdType\": \"EIN\",\n    \"registrationNumber\": \"84-3921776\",\n    \"websiteUrl\": \"https://northwind.io\",\n    \"jobPosition\": \"Other\",\n    \"businessTitle\": \"Head of Operations\"\n  },\n  \"campaign\": {\n    \"useCase\": \"CUSTOMER_CARE\",\n    \"description\": \"We text customers who placed an order to confirm delivery windows and let them reschedule. Every recipient checked the SMS box at checkout.\",\n    \"messageFlow\": \"Customers tick an unchecked SMS consent box at checkout under the heading Text me delivery updates, beside message frequency and STOP instructions.\",\n    \"samples\": [\n      \"Northwind Supply: your order #40218 is out for delivery today between 2-4pm. Reply STOP to opt out.\",\n      \"Northwind Supply: thanks for your order! Track it at northwind.io/track. Reply STOP to unsubscribe.\"\n    ],\n    \"containsUrls\": true,\n    \"containsPhones\": false,\n    \"privacyPolicyUrl\": \"https://northwind.io/privacy\",\n    \"termsUrl\": \"https://northwind.io/terms\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [
  "kind": "business",
  "brand": [
    "brandName": "Northwind Supply Co.",
    "firstName": "Maya",
    "lastName": "Chen",
    "email": "maya@northwind.io",
    "phone": "+14155550110",
    "street": "480 Bryant St",
    "city": "San Francisco",
    "state": "CA",
    "zip": "94107",
    "country": "US",
    "businessType": "Limited Liability Corporation",
    "businessIndustry": "RETAIL",
    "registrationIdType": "EIN",
    "registrationNumber": "84-3921776",
    "websiteUrl": "https://northwind.io",
    "jobPosition": "Other",
    "businessTitle": "Head of Operations"
  ],
  "campaign": [
    "useCase": "CUSTOMER_CARE",
    "description": "We text customers who placed an order to confirm delivery windows and let them reschedule. Every recipient checked the SMS box at checkout.",
    "messageFlow": "Customers tick an unchecked SMS consent box at checkout under the heading Text me delivery updates, beside message frequency and STOP instructions.",
    "samples": ["Northwind Supply: your order #40218 is out for delivery today between 2-4pm. Reply STOP to opt out.", "Northwind Supply: thanks for your order! Track it at northwind.io/track. Reply STOP to unsubscribe."],
    "containsUrls": true,
    "containsPhones": false,
    "privacyPolicyUrl": "https://northwind.io/privacy",
    "termsUrl": "https://northwind.io/terms"
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.getdial.ai/api/v1/numbers/id/10dlc")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```