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

# List reusable 10DLC brands

GET https://api.getdial.ai/api/v1/10dlc/brands

Lists the account's 10DLC brands that a **new campaign** can be registered
under, for use as `brandId` when submitting a registration.

A brand is the business identity carriers vet; a campaign is one messaging
use case beneath it. One brand can carry several campaigns, so a second use
case — say event reminders alongside order confirmations — is a new campaign
on the brand you already have, not a second registration of the same
business. Reusing the brand keeps its approval and its vetting score, and
skips the wait for both.

Two conditions decide what appears here, and both come from the carrier
registry rather than from Dial:

- **The brand is approved.** The registry refuses a campaign filed against a
  brand it hasn't approved yet, so a brand still in review is not offered.
- **The brand is a business.** A sole proprietor brand covers exactly one use
  case and one number, so it can never carry a second campaign.

An account with nothing to reuse gets an empty list — that's a successful
answer, not a `404`.


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

## Authentication

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

## Response

### 200

The reusable brands, newest approval first.

- `brands` (list of object, optional)
  - `id` (string, optional) — Pass as `brandId` when submitting a registration.
  - `brandName` (string, optional) — The registered business or DBA name carriers vetted.
  - `kind` (enum, optional) — Always `business` — a sole proprietor brand carries one campaign only and is never reusable.
    - Allowed values: `business`
  - `websiteUrl` (string, optional, nullable) — The site registered with the brand.
  - `approvedAt` (datetime, optional, nullable) — When this brand's approval was recorded. Null for a brand approved before Dial began stamping the decision.
  - `campaignCount` (integer, optional) — How many campaigns already run under this brand.

## Errors

### 401 Unauthorized Error

Missing or invalid API key.

- `error` (string or map from string to any, optional) — An error message, or a validation-error object for 400 responses.

## Examples

**Response**

```json
{
  "brands": [
    {
      "id": "string",
      "brandName": "string",
      "kind": "business",
      "websiteUrl": "string",
      "approvedAt": "2024-01-15T09:30:00Z",
      "campaignCount": 1
    }
  ]
}
```

**SDK Code**

```python
import requests

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

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

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

print(response.json())
```

```javascript
const url = 'https://api.getdial.ai/api/v1/10dlc/brands';
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/10dlc/brands"

	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/10dlc/brands")

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/10dlc/brands")
  .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/10dlc/brands', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.getdial.ai/api/v1/10dlc/brands");
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/10dlc/brands")! 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()
```