> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.pinnacle.sh/v-2/api-reference/campaigns/10-dlc/get/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pinnacle.sh/_mcp/server. # Get 10DLC Campaign by ID GET https://api.pinnacle.sh/campaigns/dlc/{campaignId} Retrieve 10DLC campaign. Reference: https://docs.pinnacle.sh/api-reference/campaigns/10-dlc/get ## Authentication - `PINNACLE-API-KEY` header (required) — API Key authentication via header ## Request ### Path parameters - `campaignId` (string, required) — Unique identifier of the 10DLC campaign. This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`. ## Response ### 200 Successfully retrieved. - `autoRenew` (boolean, required) — Whether the campaign renews automatically. - `brand` (ExtendedBrand, required) — Brand associated with this campaign. - `campaignId` (string, required) — Unique identifier for the campaign. This identifier is a string that always begins with the prefix `dlc_`, for example: `dlc_1234567890`. - `keywords` (DlcWithExtendedBrandAndStatusKeywords, required) — Keyword response configuration. - `options` (DlcWithExtendedBrandAndStatusOptions, required) — Campaign configuration options. - `status` (enum, required) — 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. - Allowed values: `INCOMPLETE`, `IN REVIEW`, `VERIFIED`, `FAILED` - `description` (string, optional) — Description of the campaign. - `links` (DlcWithExtendedBrandAndStatusLinks, optional) — Legal documentation links. - `messageFlow` (string, optional) — Describe the flow of how users will opt in to this campaign. See the [Opt-In Methods and Workflow](/guides/campaigns/opt-in-compliance#opt-in-methods-and-workflow) section for requirements. - `name` (string, optional) — Display name of the campaign. - `sampleMessages` (list of string, optional) — Example messages for the campaign. See the [Sample Messages](/guides/campaigns/opt-in-compliance#sample-messages) section for requirements. - `useCase` (DlcWithExtendedBrandAndStatusUseCase, optional) — Use case for the campaign. - `mnoBrandTier` (enum, optional) — 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](/guides/messages/rate-limits) for details. - Allowed values: `TOP`, `HIGH_MID`, `LOW_MID`, `LOW` - `mnoTcrTier` (enum, optional) — 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](/guides/messages/rate-limits) for details. - Allowed values: `A`, `B`, `C`, `D`, `E`, `F`, `G`, `N`, `T`, `S` ## Errors ### 400 Bad Request Error Validation failed. The payload has missing required fields and/or invalid types. See [https://zod.dev/error-formatting](https://zod.dev/error-formatting) for more information. - `description` (string, required) — Human-readable summary of validation failures. - `errors` (ZodErrorErrors, required) — 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 ### 401 Unauthorized Error 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. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ### 403 Forbidden Error 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. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ### 404 Not Found Error 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. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ### 500 Internal Server Error An unexpected error occurred on Pinnacle's servers while processing your request. If this error persists, please contact support with the request details. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ## Types ### ExtendedBrand - `createdAt` (string, required) — ISO 8601 formatted timestamp of when this brand was added to our system. - `id` (string, required) — The brand's ID. This identifier is a string that always begins with the prefix `b_`, for example: `b_1234567890`. - `isArchived` (boolean, required) — Indicates if this brand is archived. - `status` (enum, required) — 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. - Allowed values: `PENDING`, `UNVERIFIED`, `VERIFIED`, `VETTED`, `FAILED`, `INCOMPLETE` - `updatedAt` (string, required) — ISO 8601 formatted timestamp of when this brand was last updated. - `address` (string, optional) — Primary brand address where this brand is located. - `contact` (optionalContactSchema, optional) — Contact information for the primary brand representative. - `dba` (string, optional, nullable) — "Doing Business As" name - the public name this brand operates under. - `description` (string, optional) — Brief description of what this brand does. - `ein` (string, optional) — Employer Identification Number (EIN) assigned by the IRS. - `email` (string, optional) — Main contact email address for this brand. - `name` (string, optional) — Legal name of the brand as registered. - `sector` (enum, optional) — Industry the Brand operates in. - Allowed values: `AGRICULTURE`, `COMMUNICATION`, `CONSTRUCTION`, `EDUCATION`, `ENERGY`, `ENTERTAINMENT`, `FINANCIAL`, `GAMBLING`, `GOVERNMENT`, `HEALTHCARE`, `HOSPITALITY`, `INSURANCE`, `MANUFACTURING`, `NGO`, `REAL_ESTATE`, `RETAIL`, `TECHNOLOGY` - `type` (enum, optional) — Legal structure of the brand. - Allowed values: `GOVERNMENT`, `NON_PROFIT`, `PRIVATE_PROFIT`, `PUBLIC_PROFIT`, `SOLE_PROPRIETOR` - `entityType` (enum, optional) — Legal entity type of the brand. - Allowed values: `LLC`, `SOLE_PROPRIETORSHIP`, `PARTNERSHIP`, `CORP`, `S_CORP` - `website` (string, optional) — Brand website URL. ### DlcWithExtendedBrandAndStatusKeywords Keyword response configuration. - `HELP` (DlcWithExtendedBrandAndStatusKeywordsHelp, required) — Help keyword settings. - `OPT_IN` (DlcWithExtendedBrandAndStatusKeywordsOptIn, required) — Opt-in keyword settings. - `OPT_OUT` (DlcWithExtendedBrandAndStatusKeywordsOptOut, required) — Opt-out keyword settings. ### DlcWithExtendedBrandAndStatusOptions Campaign configuration options. - `affiliateMarketing` (boolean, required, default: false) — Whether the campaign uses affiliate marketing. - `ageGated` (boolean, required, default: false) — Whether the campaign is age-gated. - `directLending` (boolean, required, default: false) — Whether the campaign involves direct lending. - `embeddedPhone` (boolean, required, default: false) — Whether messages include phone numbers. - `numberPooling` (boolean, required, default: false) — Whether the campaign uses number pooling. - `embeddedLink` (string, optional) — Link embedded in campaign message. ### DlcWithExtendedBrandAndStatusLinks Legal documentation links. - `privacyPolicy` (string, optional) — Privacy policy URL. - `termsOfService` (string, optional) — Terms of service URL. ### DlcWithExtendedBrandAndStatusUseCase Use case for the campaign. - `sub` (list of enum, optional) — Sub-use case categories. - Allowed values: `ACCOUNT_NOTIFICATION`, `CUSTOMER_CARE`, `DELIVERY_NOTIFICATION`, `FRAUD_ALERT`, `HIGHER_EDUCATION`, `MARKETING`, `POLLING_VOTING`, `PUBLIC_SERVICE_ANNOUNCEMENT`, `SECURITY_ALERT`, `TWO_FA` - `value` (enum, optional) — The primary use case classification for this campaign. - Allowed 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` ### ZodErrorErrors 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 ### optionalContactSchema Contact information for the primary brand representative. - `email` (string, optional) — Email address of the contact person. - `name` (string, optional) — Full name of the contact person. - `phone` (string, optional) — Phone number of the contact person in E.164 format. - `title` (string, optional) — Job title or position oft he contact person. ### DlcWithExtendedBrandAndStatusKeywordsHelp Help keyword settings. - `values` (list of string, required) — Keywords that trigger help response. - `message` (string, optional) — Response message for help keywords. See the [Keyword Response Messages](/guides/campaigns/opt-in-compliance#keyword-response-messages) section for requirements. ### DlcWithExtendedBrandAndStatusKeywordsOptIn Opt-in keyword settings. - `values` (list of string, required) — Keywords that trigger opt-in. - `message` (string, optional) — Response message for opt-in keywords. See the [Keyword Response Messages](/guides/campaigns/opt-in-compliance#keyword-response-messages) section for requirements. ### DlcWithExtendedBrandAndStatusKeywordsOptOut Opt-out keyword settings. - `values` (list of string, required) — Keywords that trigger opt-out. - `message` (string, optional) — Response message for opt-out keywords. See the [Keyword Response Messages](/guides/campaigns/opt-in-compliance#keyword-response-messages) section for requirements. ## Examples **Response** ```json { "autoRenew": false, "brand": { "createdAt": "2024-08-17T08:00:30.632", "id": "b_1234567890", "isArchived": false, "status": "VERIFIED", "updatedAt": "2024-12-09T10:03:54.934", "address": "500 Folsom Street, San Francisco, CA 94105", "contact": { "email": "janedoe1@pinnacle.example", "name": "Jane Doe", "phone": "+14155550123", "title": "Customer Support Specialist" }, "dba": "Pinnacle RCS", "ein": "12-3456789", "email": "founders@trypinnacle.app", "name": "Pinnacle", "sector": "TECHNOLOGY", "type": "PRIVATE_PROFIT", "website": "https://www.pinnacle.sh/" }, "campaignId": "dlc_1234567890", "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." } }, "options": { "affiliateMarketing": false, "ageGated": false, "directLending": false, "embeddedPhone": false, "numberPooling": false }, "status": "VERIFIED", "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", "name": "Pinnacle", "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." ], "useCase": { "sub": [ "ACCOUNT_NOTIFICATION", "CUSTOMER_CARE", "SECURITY_ALERT" ], "value": "MIXED" }, "mnoBrandTier": "LOW", "mnoTcrTier": "G" } ``` **SDK Code** ```python 10DLC Campaign import requests url = "https://api.pinnacle.sh/campaigns/dlc/dlc_1234567890" headers = {"PINNACLE-API-KEY": ""} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript 10DLC Campaign const url = 'https://api.pinnacle.sh/campaigns/dlc/dlc_1234567890'; const options = {method: 'GET', headers: {'PINNACLE-API-KEY': ''}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go 10DLC Campaign package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.pinnacle.sh/campaigns/dlc/dlc_1234567890" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("PINNACLE-API-KEY", "") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby 10DLC Campaign require 'uri' require 'net/http' url = URI("https://api.pinnacle.sh/campaigns/dlc/dlc_1234567890") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["PINNACLE-API-KEY"] = '' response = http.request(request) puts response.read_body ``` ```java 10DLC Campaign import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.pinnacle.sh/campaigns/dlc/dlc_1234567890") .header("PINNACLE-API-KEY", "") .asString(); ``` ```php 10DLC Campaign request('GET', 'https://api.pinnacle.sh/campaigns/dlc/dlc_1234567890', [ 'headers' => [ 'PINNACLE-API-KEY' => '', ], ]); echo $response->getBody(); ``` ```csharp 10DLC Campaign using RestSharp; var client = new RestClient("https://api.pinnacle.sh/campaigns/dlc/dlc_1234567890"); var request = new RestRequest(Method.GET); request.AddHeader("PINNACLE-API-KEY", ""); IRestResponse response = client.Execute(request); ``` ```swift 10DLC Campaign import Foundation let headers = ["PINNACLE-API-KEY": ""] let request = NSMutableURLRequest(url: NSURL(string: "https://api.pinnacle.sh/campaigns/dlc/dlc_1234567890")! 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() ``` > One API for RCS, iMessage, MMS, and SMS. Build, test, and scale every channel — send your first message in minutes, not weeks.