# Get 10DLC Campaign by ID

`GET /campaigns/dlc/{campaignId}`

Retrieve 10DLC campaign.

## Authentication

Send your API key in the `PINNACLE-API-KEY` header.

## Parameters

- `campaignId` — path, string. Unique identifier of the 10DLC campaign. This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`.

## Responses

### 200

Successfully retrieved.

Content type: `application/json`. Schema: `DlcCampaignWithExtendedBrandAndStatus`.

- `autoRenew` — `boolean`. Whether the campaign renews automatically.
- `brand` — `object`. Brand associated with this campaign.
- `brand.createdAt` — `string`. ISO 8601 formatted timestamp of when this brand was added to our system.
- `brand.id` — `string`. The brand's ID. This identifier is a string that always begins with the prefix `b_`, for example: `b_1234567890`.
- `brand.isArchived` — `boolean`. Indicates if this brand is archived.
- `brand.status` — `BrandStatusEnum`, values: `PENDING`, `UNVERIFIED`, `VERIFIED`, `VETTED`, `FAILED`, `INCOMPLETE`. Current review status of the brand.

`INCOMPLETE`: Not submitted.

`IN REVIEW`: Being reviewed by carriers.

`VERIFIED`: Approved and ready to send messages.

`FAILED`: Issues and errors related to the campaign's details.

`VETTED`: Has undergone additional vetting by a third party service post the brand being verified. Your brand will be assigned a trust score, with higher trust scores having higher message volumes.

`UNVERIFIED`: Brand details have been updated, and the brand will need to undergo re-verification.
- `brand.updatedAt` — `string`. ISO 8601 formatted timestamp of when this brand was last updated.
- `brand.address` — `string`, optional. Primary brand address where this brand is located.
- `brand.contact` — `OptionalContacts`, optional. Contact information for the primary brand representative.
- `brand.contact.email` — `string`, optional. Email address of the contact person.
- `brand.contact.name` — `string`, optional. Full name of the contact person.
- `brand.contact.phone` — `string`, optional. Phone number of the contact person in E.164 format.
- `brand.contact.title` — `string`, optional. Job title or position oft he contact person.
- `brand.dba` — `string`, optional. "Doing Business As" name - the public name this brand operates under.
- `brand.description` — `string`, optional. Brief description of what this brand does.
- `brand.ein` — `string`, optional. Employer Identification Number (EIN) assigned by the IRS.
- `brand.email` — `string`, optional. Main contact email address for this brand.
- `brand.name` — `string`, optional. Legal name of the brand as registered.
- `brand.sector` — `CompanySectorEnum`, optional, values: `AGRICULTURE`, `COMMUNICATION`, `CONSTRUCTION`, `EDUCATION`, `ENERGY`, `ENTERTAINMENT`, `FINANCIAL`, `GAMBLING`, `GOVERNMENT`, `HEALTHCARE`, `HOSPITALITY`, `INSURANCE`, `MANUFACTURING`, `NGO`, `REAL_ESTATE`, `RETAIL`, `TECHNOLOGY`. Industry the Brand operates in.
- `brand.type` — `CompanyTypeEnum`, optional, values: `GOVERNMENT`, `NON_PROFIT`, `PRIVATE_PROFIT`, `PUBLIC_PROFIT`, `SOLE_PROPRIETOR`. Legal structure of the brand.
- `brand.entityType` — `CompanyEntityTypeEnum`, optional, values: `LLC`, `SOLE_PROPRIETORSHIP`, `PARTNERSHIP`, `CORP`, `S_CORP`. Legal entity type of the brand.
- `brand.website` — `string`, optional. Brand website URL.
- `campaignId` — `string`. Unique identifier for the campaign. This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`.
- `description` — `string`, optional. Description of the campaign.
- `keywords` — `object`. Keyword response configuration.
- `keywords.HELP` — `object`. Help keyword settings.
- `keywords.HELP.message` — `string`, optional. Response message for help keywords. See the Keyword Response Messages section for requirements.
- `keywords.HELP.values` — `string[]`. Keywords that trigger help response.
- `keywords.OPT_IN` — `object`. Opt-in keyword settings.
- `keywords.OPT_IN.message` — `string`, optional. Response message for opt-in keywords. See the Keyword Response Messages section for requirements.
- `keywords.OPT_IN.values` — `string[]`. Keywords that trigger opt-in.
- `keywords.OPT_OUT` — `object`. Opt-out keyword settings.
- `keywords.OPT_OUT.message` — `string`, optional. Response message for opt-out keywords. See the Keyword Response Messages section for requirements.
- `keywords.OPT_OUT.values` — `string[]`. Keywords that trigger opt-out.
- `links` — `object`, optional. Legal documentation links.
- `links.privacyPolicy` — `string`, optional, format: url. Privacy policy URL.
- `links.termsOfService` — `string`, optional, format: url. Terms of service URL.
- `messageFlow` — `string`, optional. Describe the flow of how users will opt in to this campaign. See the Opt-In Methods and Workflow section for requirements.
- `name` — `string`, optional. Display name of the campaign.
- `options` — `object`. Campaign configuration options.
- `options.affiliateMarketing` — `boolean`, default: false. Whether the campaign uses affiliate marketing.
- `options.ageGated` — `boolean`, default: false. Whether the campaign is age-gated.
- `options.directLending` — `boolean`, default: false. Whether the campaign involves direct lending.
- `options.embeddedLink` — `string`, optional, format: url. Link embedded in campaign message.
- `options.embeddedPhone` — `boolean`, default: false. Whether messages include phone numbers.
- `options.numberPooling` — `boolean`, default: false. Whether the campaign uses number pooling.
- `sampleMessages` — `string[]`, optional. Example messages for the campaign. See the Sample Messages section for requirements.
- `status` — `ProfileStatusEnum`, values: `INCOMPLETE`, `IN REVIEW`, `VERIFIED`, `FAILED`. Current review status of the campaign.

`INCOMPLETE`: Not submitted.

`IN REVIEW`: Being reviewed by carriers.

`VERIFIED`: Approved and ready to send messages.

`FAILED`: Issues and errors related to the campaign's details.
- `useCase` — `object`, optional. Use case for the campaign.
- `useCase.sub` — `SubUseCaseEnum[]`, optional. Sub-use case categories.
- `useCase.value` — `DlcCampaignUseCaseEnum`, optional, values: `ACCOUNT_NOTIFICATION`, `AGENTS_FRANCHISES`, `CARRIER_EXEMPT`, `CHARITY`, `CUSTOMER_CARE`, `DELIVERY_NOTIFICATION`, `EMERGENCY`, `FRAUD_ALERT`, `HIGHER_EDUCATION`, `K12_EDUCATION`, `LOW_VOLUME`, `M2M`, `MARKETING`, `MIXED`, `POLITICAL`, `POLLING_VOTING`, `PROXY`, `PUBLIC_SERVICE_ANNOUNCEMENT`, `SECURITY_ALERT`, `SOCIAL`, `SOLE_PROPRIETOR`, `SWEEPSTAKE`, `TRIAL`, `TWO_FA`, `UCAAS_HIGH`, `UCAAS_LOW`. The primary use case classification for this campaign.
- `mnoBrandTier` — `string`, optional, values: `TOP`, `HIGH_MID`, `LOW_MID`, `LOW`. The MNO brand tier for T-Mobile rate limits. Tiers range from `TOP` (highest) to `LOW` (lowest), based on your brand's vetting score.

See SMS Rate Limits for details.
- `mnoTcrTier` — `string`, optional, values: `A`, `B`, `C`, `D`, `E`, `F`, `G`, `N`, `T`, `S`. The MNO TCR message class for AT&T, Verizon, and other carriers. Classes `A`-`G` are standard (based on vetting score), while `T`, `N`, and `S` are for special use cases.

See SMS Rate Limits for details.

Example:

```json
{
  "brand": {
    "id": "b_1234567890",
    "createdAt": "2024-08-17T08:00:30.632",
    "updatedAt": "2024-12-09T10:03:54.934",
    "isArchived": false,
    "status": "VERIFIED",
    "name": "Pinnacle",
    "dba": "Pinnacle RCS",
    "address": "500 Folsom Street, San Francisco, CA 94105",
    "email": "founders@trypinnacle.app",
    "website": "https://www.pinnacle.sh/",
    "type": "PRIVATE_PROFIT",
    "sector": "TECHNOLOGY",
    "ein": "12-3456789",
    "contact": {
      "name": "Jane Doe",
      "title": "Customer Support Specialist",
      "email": "janedoe1@pinnacle.example",
      "phone": "+14155550123"
    }
  },
  "campaignId": "dlc_1234567890",
  "status": "VERIFIED",
  "name": "Pinnacle",
  "useCase": {
    "value": "MIXED",
    "sub": [
      "ACCOUNT_NOTIFICATION",
      "CUSTOMER_CARE",
      "SECURITY_ALERT"
    ]
  },
  "sampleMessages": [
    "Pinnacle Software Development Inc.: We're here to help. Visit https://pinnacle.sh or call 877-389-0460. Msg&data rates may apply. Reply STOP to cancel.",
    "Pinnacle Software Development Inc.: You're enrolled in account & security alerts. Msg&data rates may apply. Message frequency varies. Reply HELP for help, STOP to cancel. Terms: https://pinnacle.sh/terms/ Privacy: https://pinnacle.sh/privacy/",
    "Pinnacle Software Development Inc.: An update has been made to your account. Read it in the portal.",
    "Pinnacle Software Development Inc.: We received your message. A team member will reply shortly. For immediate help call 877-389-0460. Msg&data rates may apply. Reply STOP to cancel."
  ],
  "keywords": {
    "HELP": {
      "values": [
        "HELP",
        "SUPPORT",
        "INFO"
      ],
      "message": "Pinnacle Software Development Inc.: For assistance, visit https://pinnacle.sh/support or email founders@trypinnacle.app. Msg&data rates may apply. Reply STOP to cancel."
    },
    "OPT_IN": {
      "values": [
        "START",
        "YES",
        "SUBSCRIBE"
      ],
      "message": "Pinnacle Software Development Inc.: You're enrolled in account & security alerts. Msg&data rates may apply. Message frequency varies. Reply HELP for help, STOP to cancel. Terms: https://pinnacle.sh/terms Privacy: https://pinnacle.sh/privacy"
    },
    "OPT_OUT": {
      "values": [
        "STOP",
        "CANCEL",
        "UNSUBSCRIBE"
      ],
      "message": "Pinnacle Software Development Inc.: You're unsubscribed and will receive no further texts. For assistance, visit https://pinnacle.sh or call 877-389-0460. Reply START to resubscribe."
    }
  },
  "autoRenew": false,
  "links": {
    "privacyPolicy": "https://www.pinnacle.sh/privacy",
    "termsOfService": "https://www.pinnacle.sh/terms"
  },
  "messageFlow": "The user fills out a paper form during onboarding at [Address] which they learn about at our website (https://pinnacle.sh) in which they provide their phone number and sign their consent. The form includes a disclaimer: \"By signing this form and providing your phone number, you agree to receive SMS Mixed - Account Notification, Customer Care, Security Alert, Delivery Notification from Pinnacle Software Development Inc. Message frequency may vary. Standard Message and Data Rates may apply. Reply STOP to opt out. Reply HELP for help. Consent is not a condition of purchase. Your mobile information will not be sold or shared with third parties for promotional or marketing purposes.\" Once the information is entered into the system, the user receives a confirmation SMS: \"Thank you for signing up for SMS updates from Pinnacle Software Development Inc. Msg freq may vary. Std msg & data rates apply. Reply STOP to opt out, HELP for help.\" Link to paper form: https://www.pinnacle.sh/opt-in",
  "options": {
    "ageGated": false,
    "embeddedPhone": false,
    "affiliateMarketing": false,
    "numberPooling": false,
    "directLending": false
  },
  "mnoBrandTier": "LOW",
  "mnoTcrTier": "G"
}
```

### 400

Validation failed. The payload has missing required fields and/or invalid types.

See https://zod.dev/error-formatting for more information.

Content type: `application/json`. Schema: `object`.

- `description` — `string`. Human-readable summary of validation failures.
- `errors` — `object`. Structured dictionary of issues containing two main sections:
- `errors`: Array of global validation errors not tied to specific fields
- `properties`: Object mapping field names to their specific validation errors, where each field contains an `errors` array

Example:

```json
{
  "description": "✖ Invalid input: expected string, received number\n  → at example_field",
  "errors": {
    "errors": [
      "Unrecognized key: 'extraKey'"
    ],
    "properties": {
      "example_field": {
        "errors": [
          "Invalid input: expected string, received NaN"
        ]
      }
    }
  }
}
```

### 401

The request lacks valid authentication credentials or the provided credentials are invalid.

Ensure you're including a valid API key in the request headers and that your account has the necessary permissions to access this endpoint.

Content type: `application/json`. Schema: `object`.

- `error` — `string`. Human-readable description of the error that occurred, corresponding to the HTTP status code.

Example:

```json
{
  "error": "Invalid API key."
}
```

### 403

Your subscription does not include access to this feature.

This occurs when attempting to use functionality that requires a higher subscription tier.
Please upgrade your subscription to access this feature.

Content type: `application/json`. Schema: `object`.

- `error` — `string`. Human-readable description of the error that occurred, corresponding to the HTTP status code.

Example:

```json
{
  "error": "Your subscription does not include access to this feature."
}
```

### 404

The requested resource could not be found.

This may occur if the identifier is incorrect, the resource has been deleted, or you don't have permission to access it.

Content type: `application/json`. Schema: `object`.

- `error` — `string`. Human-readable description of the error that occurred, corresponding to the HTTP status code.

Example:

```json
{
  "error": "The requested resource could not be found."
}
```

### 500

An unexpected error occurred on Pinnacle's servers while processing your request.

If this error persists, please contact support with the request details.

Content type: `application/json`. Schema: `object`.

- `error` — `string`. Human-readable description of the error that occurred, corresponding to the HTTP status code.

Example:

```json
{
  "error": "An unexpected error occurred while processing your request."
}
```

## SDK examples

### TypeScript

```typescript
import { PinnacleClient } from "rcs-js";

const client = new PinnacleClient({
  apiKey: process.env.PINNACLE_API_KEY!,
});

await client.campaigns.dlc.get("dlc_1234567890");
```

### Python

```python
import os
from rcs import Pinnacle

client = Pinnacle(
    api_key=os.environ["PINNACLE_API_KEY"],
)

client.campaigns.dlc.get(
    campaign_id="dlc_1234567890",
)
```

### Ruby

```ruby
require "rcs"

client = Pinnacle::Client.new(
  api_key: ENV.fetch("PINNACLE_API_KEY")
)

client.campaigns.dlc.get(campaign_id: "dlc_1234567890")
```

## Machine-readable schema

[OpenAPI 3.1 JSON](https://docs.pinnacle.sh/openapi.json)
