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

# Get 10DLC registration

GET https://api.getdial.ai/api/v1/numbers/{id}/10dlc

Returns this number's 10DLC registration: the brand (who is registering) and the campaign (what they send), exactly as submitted.
A number's registration status is also available — without the submitted details — as the `tenDlc` object on the phone number itself.

Reference: https://docs.getdial.ai/api-reference/rest-api/phone-numbers/get-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)

## Response

### 200

The registration.

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

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

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.getdial.ai/api/v1/numbers/id/10dlc';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

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"
	"net/http"
	"io"
)

func main() {

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

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	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::Get.new(url)
request["Authorization"] = 'Bearer <token>'

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.get("https://api.getdial.ai/api/v1/numbers/id/10dlc")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.getdial.ai/api/v1/numbers/id/10dlc', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.getdial.ai/api/v1/numbers/id/10dlc");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

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

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()
```