> 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/upsert/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pinnacle.sh/_mcp/server. # Create or Update 10DLC Campaign POST https://api.pinnacle.sh/campaigns/dlc Content-Type: application/json Create a new 10DLC campaign or update an existing one. **To create a new campaign:** Omit `campaignId` — one will be generated automatically. **Before you start:** Create a [brand](/api-reference/brands/upsert) first — you'll need its `id` for the [`brand`](#request.body.brand) field. All fields are **required** unless specified otherwise, and will be validated when [submitted](/api-reference/campaigns/10-dlc/submit). **See the response for example values for each field.** Reference: https://docs.pinnacle.sh/api-reference/campaigns/10-dlc/upsert ## Authentication - `PINNACLE-API-KEY` header (required) — API Key authentication via header ## Request ### Body (application/json) This endpoint expects an UpsertDLCSchema. - `autoRenew` (boolean, optional, default: true) — Whether the campaign renews automatically. - `brand` (string, optional) — Brand id. This identifier is a string that always begins with the prefix `b_`, for example: `b_1234567890`. - `campaignId` (string, optional) — 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. Explain the purpose, use case, and types of messages your campaign will send. **Example:** `This campaign allows users who have specifically opted in to interact with our chatbot for a range of automated services, including order status notifications, shipping updates, security alerts, and help desk support. Users can manage their account, receive transactional SMS prompts, and access interactive support. They may also share images, such as receipts, and receive immediate responses for support or account updates. All messages are strictly transactional or support-related, never unsolicited, and initiated only after clear user consent.` - `keywords` (DlcCampaignKeywords, optional) — Keyword response configuration. - `links` (DlcCampaignLinks, optional) — Legal documentation links. - `messageFlow` (string, optional) — Describe your opt-in workflow. See the [Opt-In Methods and Workflow](/guides/campaigns/opt-in-compliance#opt-in-methods-and-workflow) section for requirements and examples. - `name` (string, optional) — Display name of the campaign. - `options` (DlcCampaignOptions, optional) — Campaign configuration options. - `sampleMessages` (list of string, optional) — Example messages for the campaign. Include 1-5 messages that represent the types of messages you will send. See the [Sample Messages](/guides/campaigns/opt-in-compliance#sample-messages) section for requirements and examples. - `useCase` (DlcCampaignUseCase, optional) — Use case for the campaign. ## Response ### 200 Successfully created or updated DLC campaign. - `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 The request was unacceptable, often due to providing an invalid update. Errors may originate from invalid payload or from Pinnacle's additional validation checks. For example, providing an URL that cannot be accessed, updating a campaign that is currently being reviewed, updating data that you cannot access, sending a malformed message, and so on. For `Pinnacle Validation Error` inspect the `error` payload to determine the source of the failure. These errors are likely due to additional validation and business logic checks. For `Request Validation Error` inspect the `description` and `errors` payload to determine the source of failure. These errors are likely due to invalid payload inside the request. - `CreateOrUpdate10DlcCampaignRequestBadRequestError` ### 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 ### DlcCampaignKeywords Keyword response configuration. - `HELP` (DlcCampaignHelpKeywords, optional) — Help keyword settings. - `OPT_IN` (DlcCampaignOptInKeywords, optional) — Opt-in keyword settings. - `OPT_OUT` (DlcCampaignOptOutKeywords, optional) — Opt-out keyword settings. ### DlcCampaignLinks Legal documentation links. - `privacyPolicy` (string, optional) — Privacy policy URL. - `termsOfService` (string, optional) — Terms of service URL. ### DlcCampaignOptions Campaign configuration options. - `affiliateMarketing` (boolean, optional) — Whether the campaign uses affiliate marketing. - `ageGated` (boolean, optional) — Whether the campaign is age-gated. - `directLending` (boolean, optional) — Whether the campaign involves direct lending. - `embeddedLink` (string, optional) — Link embedded in campaign message. - `embeddedPhone` (boolean, optional) — Whether messages include phone numbers. - `numberPooling` (boolean, optional) — Whether the campaign uses number pooling. ### DlcCampaignUseCase 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` ### 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` ### ZodError - `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 ### Error Standard error response returned when a request cannot be processed successfully. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ### DlcCampaignHelpKeywords Help keyword settings. - `message` (string, optional) — Response message for help keywords. Must include support contact information and standard disclosures. See the [Help keyword requirements](/guides/campaigns/opt-in-compliance#keyword-response-messages). - `values` (list of string, optional) — Keywords that trigger help response (e.g., HELP, SUPPORT, INFO). ### DlcCampaignOptInKeywords Opt-in keyword settings. - `message` (string, optional) — Response message for opt-in keywords. Must include company name, subscription confirmation, message frequency, HELP/STOP instructions, and links to terms and privacy policy. See the [Opt-In keyword requirements](/guides/campaigns/opt-in-compliance#keyword-response-messages). - `values` (list of string, optional) — Keywords that trigger opt-in (e.g., START, YES, SUBSCRIBE). ### DlcCampaignOptOutKeywords Opt-out keyword settings. - `message` (string, optional) — Response message for opt-out keywords. Must confirm unsubscription, provide alternative contact methods, and include opt-in instructions. See the [Opt-Out keyword requirements](/guides/campaigns/opt-in-compliance#keyword-response-messages). - `values` (list of string, optional) — Keywords that trigger opt-out (e.g., STOP, CANCEL, UNSUBSCRIBE). ### 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. ### 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 ## Examples ### Upserted 10DLC Campaign **Response** ```json { "autoRenew": true, "brand": { "createdAt": "2024-08-17T08:00:30.632", "id": "b_1234567890", "isArchived": false, "status": "VERIFIED", "updatedAt": "2024-12-10T07:58:01.291", "address": "500 Folsom Street, San Francisco, CA 94105", "contact": { "email": "john.smith@pinnacle.example", "name": "John Smith", "phone": "+14151891244", "title": "Communications Manager" }, "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, "embeddedLink": "https://www.pinnacle.sh/example" }, "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": "Account Notifications", "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 Upserted 10DLC Campaign import requests url = "https://api.pinnacle.sh/campaigns/dlc" headers = {"PINNACLE-API-KEY": ""} response = requests.post(url, headers=headers) print(response.json()) ``` ```javascript Upserted 10DLC Campaign const url = 'https://api.pinnacle.sh/campaigns/dlc'; const options = {method: 'POST', 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 Upserted 10DLC Campaign package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.pinnacle.sh/campaigns/dlc" req, _ := http.NewRequest("POST", 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 Upserted 10DLC Campaign require 'uri' require 'net/http' url = URI("https://api.pinnacle.sh/campaigns/dlc") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["PINNACLE-API-KEY"] = '' response = http.request(request) puts response.read_body ``` ```java Upserted 10DLC Campaign import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://api.pinnacle.sh/campaigns/dlc") .header("PINNACLE-API-KEY", "") .asString(); ``` ```php Upserted 10DLC Campaign request('POST', 'https://api.pinnacle.sh/campaigns/dlc', [ 'headers' => [ 'PINNACLE-API-KEY' => '', ], ]); echo $response->getBody(); ``` ```csharp Upserted 10DLC Campaign using RestSharp; var client = new RestClient("https://api.pinnacle.sh/campaigns/dlc"); var request = new RestRequest(Method.POST); request.AddHeader("PINNACLE-API-KEY", ""); IRestResponse response = client.Execute(request); ``` ```swift Upserted 10DLC Campaign import Foundation let headers = ["PINNACLE-API-KEY": ""] let request = NSMutableURLRequest(url: NSURL(string: "https://api.pinnacle.sh/campaigns/dlc")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" 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() ``` ### campaigns_dlc_upsert_example **Request** ```json { "autoRenew": true, "brand": "b_1234567890", "description": "This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.", "keywords": { "HELP": { "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.", "values": [ "HELP", "SUPPORT", "INFO" ] }, "OPT_IN": { "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", "values": [ "START", "YES", "SUBSCRIBE" ] }, "OPT_OUT": { "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.", "values": [ "STOP", "CANCEL", "UNSUBSCRIBE" ] } }, "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's Account Notifications", "options": { "affiliateMarketing": false, "ageGated": false, "directLending": false, "embeddedLink": "https://www.pinnacle.sh/example", "embeddedPhone": false, "numberPooling": false }, "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" } } ``` **Response** ```json { "autoRenew": true, "brand": { "createdAt": "2024-08-17T08:00:30.632", "id": "b_1234567890", "isArchived": false, "status": "VERIFIED", "updatedAt": "2024-12-10T07:58:01.291", "address": "500 Folsom Street, San Francisco, CA 94105", "contact": { "email": "john.smith@pinnacle.example", "name": "John Smith", "phone": "+14151891244", "title": "Communications Manager" }, "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, "embeddedLink": "https://www.pinnacle.sh/example" }, "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": "Account Notifications", "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 campaigns_dlc_upsert_example import requests url = "https://api.pinnacle.sh/campaigns/dlc" payload = { "autoRenew": True, "brand": "b_1234567890", "description": "This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.", "keywords": { "HELP": { "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.", "values": ["HELP", "SUPPORT", "INFO"] }, "OPT_IN": { "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", "values": ["START", "YES", "SUBSCRIBE"] }, "OPT_OUT": { "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.", "values": ["STOP", "CANCEL", "UNSUBSCRIBE"] } }, "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's Account Notifications", "options": { "affiliateMarketing": False, "ageGated": False, "directLending": False, "embeddedLink": "https://www.pinnacle.sh/example", "embeddedPhone": False, "numberPooling": False }, "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" } } headers = { "PINNACLE-API-KEY": "", "Content-Type": "application/json" } response = requests.post(url, json=payload, headers=headers) print(response.json()) ``` ```javascript campaigns_dlc_upsert_example const url = 'https://api.pinnacle.sh/campaigns/dlc'; const options = { method: 'POST', headers: {'PINNACLE-API-KEY': '', 'Content-Type': 'application/json'}, body: '{"autoRenew":true,"brand":"b_1234567890","description":"This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.","keywords":{"HELP":{"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.","values":["HELP","SUPPORT","INFO"]},"OPT_IN":{"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","values":["START","YES","SUBSCRIBE"]},"OPT_OUT":{"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.","values":["STOP","CANCEL","UNSUBSCRIBE"]}},"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\'s Account Notifications","options":{"affiliateMarketing":false,"ageGated":false,"directLending":false,"embeddedLink":"https://www.pinnacle.sh/example","embeddedPhone":false,"numberPooling":false},"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"}}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go campaigns_dlc_upsert_example package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://api.pinnacle.sh/campaigns/dlc" payload := strings.NewReader("{\n \"autoRenew\": true,\n \"brand\": \"b_1234567890\",\n \"description\": \"This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.\",\n \"keywords\": {\n \"HELP\": {\n \"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.\",\n \"values\": [\n \"HELP\",\n \"SUPPORT\",\n \"INFO\"\n ]\n },\n \"OPT_IN\": {\n \"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\",\n \"values\": [\n \"START\",\n \"YES\",\n \"SUBSCRIBE\"\n ]\n },\n \"OPT_OUT\": {\n \"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.\",\n \"values\": [\n \"STOP\",\n \"CANCEL\",\n \"UNSUBSCRIBE\"\n ]\n }\n },\n \"links\": {\n \"privacyPolicy\": \"https://www.pinnacle.sh/privacy\",\n \"termsOfService\": \"https://www.pinnacle.sh/terms\"\n },\n \"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\",\n \"name\": \"Pinnacle's Account Notifications\",\n \"options\": {\n \"affiliateMarketing\": false,\n \"ageGated\": false,\n \"directLending\": false,\n \"embeddedLink\": \"https://www.pinnacle.sh/example\",\n \"embeddedPhone\": false,\n \"numberPooling\": false\n },\n \"sampleMessages\": [\n \"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.\",\n \"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/\",\n \"Pinnacle Software Development Inc.: An update has been made to your account. Read it in the portal.\",\n \"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.\"\n ],\n \"useCase\": {\n \"sub\": [\n \"ACCOUNT_NOTIFICATION\",\n \"CUSTOMER_CARE\",\n \"SECURITY_ALERT\"\n ],\n \"value\": \"MIXED\"\n }\n}") req, _ := http.NewRequest("POST", url, payload) req.Header.Add("PINNACLE-API-KEY", "") 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 campaigns_dlc_upsert_example require 'uri' require 'net/http' url = URI("https://api.pinnacle.sh/campaigns/dlc") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.new(url) request["PINNACLE-API-KEY"] = '' request["Content-Type"] = 'application/json' request.body = "{\n \"autoRenew\": true,\n \"brand\": \"b_1234567890\",\n \"description\": \"This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.\",\n \"keywords\": {\n \"HELP\": {\n \"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.\",\n \"values\": [\n \"HELP\",\n \"SUPPORT\",\n \"INFO\"\n ]\n },\n \"OPT_IN\": {\n \"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\",\n \"values\": [\n \"START\",\n \"YES\",\n \"SUBSCRIBE\"\n ]\n },\n \"OPT_OUT\": {\n \"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.\",\n \"values\": [\n \"STOP\",\n \"CANCEL\",\n \"UNSUBSCRIBE\"\n ]\n }\n },\n \"links\": {\n \"privacyPolicy\": \"https://www.pinnacle.sh/privacy\",\n \"termsOfService\": \"https://www.pinnacle.sh/terms\"\n },\n \"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\",\n \"name\": \"Pinnacle's Account Notifications\",\n \"options\": {\n \"affiliateMarketing\": false,\n \"ageGated\": false,\n \"directLending\": false,\n \"embeddedLink\": \"https://www.pinnacle.sh/example\",\n \"embeddedPhone\": false,\n \"numberPooling\": false\n },\n \"sampleMessages\": [\n \"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.\",\n \"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/\",\n \"Pinnacle Software Development Inc.: An update has been made to your account. Read it in the portal.\",\n \"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.\"\n ],\n \"useCase\": {\n \"sub\": [\n \"ACCOUNT_NOTIFICATION\",\n \"CUSTOMER_CARE\",\n \"SECURITY_ALERT\"\n ],\n \"value\": \"MIXED\"\n }\n}" response = http.request(request) puts response.read_body ``` ```java campaigns_dlc_upsert_example import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.post("https://api.pinnacle.sh/campaigns/dlc") .header("PINNACLE-API-KEY", "") .header("Content-Type", "application/json") .body("{\n \"autoRenew\": true,\n \"brand\": \"b_1234567890\",\n \"description\": \"This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.\",\n \"keywords\": {\n \"HELP\": {\n \"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.\",\n \"values\": [\n \"HELP\",\n \"SUPPORT\",\n \"INFO\"\n ]\n },\n \"OPT_IN\": {\n \"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\",\n \"values\": [\n \"START\",\n \"YES\",\n \"SUBSCRIBE\"\n ]\n },\n \"OPT_OUT\": {\n \"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.\",\n \"values\": [\n \"STOP\",\n \"CANCEL\",\n \"UNSUBSCRIBE\"\n ]\n }\n },\n \"links\": {\n \"privacyPolicy\": \"https://www.pinnacle.sh/privacy\",\n \"termsOfService\": \"https://www.pinnacle.sh/terms\"\n },\n \"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\",\n \"name\": \"Pinnacle's Account Notifications\",\n \"options\": {\n \"affiliateMarketing\": false,\n \"ageGated\": false,\n \"directLending\": false,\n \"embeddedLink\": \"https://www.pinnacle.sh/example\",\n \"embeddedPhone\": false,\n \"numberPooling\": false\n },\n \"sampleMessages\": [\n \"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.\",\n \"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/\",\n \"Pinnacle Software Development Inc.: An update has been made to your account. Read it in the portal.\",\n \"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.\"\n ],\n \"useCase\": {\n \"sub\": [\n \"ACCOUNT_NOTIFICATION\",\n \"CUSTOMER_CARE\",\n \"SECURITY_ALERT\"\n ],\n \"value\": \"MIXED\"\n }\n}") .asString(); ``` ```php campaigns_dlc_upsert_example request('POST', 'https://api.pinnacle.sh/campaigns/dlc', [ 'body' => '{ "autoRenew": true, "brand": "b_1234567890", "description": "This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.", "keywords": { "HELP": { "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.", "values": [ "HELP", "SUPPORT", "INFO" ] }, "OPT_IN": { "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", "values": [ "START", "YES", "SUBSCRIBE" ] }, "OPT_OUT": { "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.", "values": [ "STOP", "CANCEL", "UNSUBSCRIBE" ] } }, "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\'s Account Notifications", "options": { "affiliateMarketing": false, "ageGated": false, "directLending": false, "embeddedLink": "https://www.pinnacle.sh/example", "embeddedPhone": false, "numberPooling": false }, "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" } }', 'headers' => [ 'Content-Type' => 'application/json', 'PINNACLE-API-KEY' => '', ], ]); echo $response->getBody(); ``` ```csharp campaigns_dlc_upsert_example using RestSharp; var client = new RestClient("https://api.pinnacle.sh/campaigns/dlc"); var request = new RestRequest(Method.POST); request.AddHeader("PINNACLE-API-KEY", ""); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"autoRenew\": true,\n \"brand\": \"b_1234567890\",\n \"description\": \"This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.\",\n \"keywords\": {\n \"HELP\": {\n \"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.\",\n \"values\": [\n \"HELP\",\n \"SUPPORT\",\n \"INFO\"\n ]\n },\n \"OPT_IN\": {\n \"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\",\n \"values\": [\n \"START\",\n \"YES\",\n \"SUBSCRIBE\"\n ]\n },\n \"OPT_OUT\": {\n \"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.\",\n \"values\": [\n \"STOP\",\n \"CANCEL\",\n \"UNSUBSCRIBE\"\n ]\n }\n },\n \"links\": {\n \"privacyPolicy\": \"https://www.pinnacle.sh/privacy\",\n \"termsOfService\": \"https://www.pinnacle.sh/terms\"\n },\n \"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\",\n \"name\": \"Pinnacle's Account Notifications\",\n \"options\": {\n \"affiliateMarketing\": false,\n \"ageGated\": false,\n \"directLending\": false,\n \"embeddedLink\": \"https://www.pinnacle.sh/example\",\n \"embeddedPhone\": false,\n \"numberPooling\": false\n },\n \"sampleMessages\": [\n \"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.\",\n \"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/\",\n \"Pinnacle Software Development Inc.: An update has been made to your account. Read it in the portal.\",\n \"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.\"\n ],\n \"useCase\": {\n \"sub\": [\n \"ACCOUNT_NOTIFICATION\",\n \"CUSTOMER_CARE\",\n \"SECURITY_ALERT\"\n ],\n \"value\": \"MIXED\"\n }\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift campaigns_dlc_upsert_example import Foundation let headers = [ "PINNACLE-API-KEY": "", "Content-Type": "application/json" ] let parameters = [ "autoRenew": true, "brand": "b_1234567890", "description": "This campaign sends transactional SMS messages to customers who have opted in, including account notifications, security alerts, and customer care responses. Messages are sent when triggered by account activity such as login attempts, password changes, order updates, or support inquiries. All messages include required STOP/HELP disclosures and comply with TCPA guidelines.", "keywords": [ "HELP": [ "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.", "values": ["HELP", "SUPPORT", "INFO"] ], "OPT_IN": [ "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", "values": ["START", "YES", "SUBSCRIBE"] ], "OPT_OUT": [ "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.", "values": ["STOP", "CANCEL", "UNSUBSCRIBE"] ] ], "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's Account Notifications", "options": [ "affiliateMarketing": false, "ageGated": false, "directLending": false, "embeddedLink": "https://www.pinnacle.sh/example", "embeddedPhone": false, "numberPooling": false ], "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" ] ] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://api.pinnacle.sh/campaigns/dlc")! 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() ``` > One API for RCS, iMessage, MMS, and SMS. Build, test, and scale every channel — send your first message in minutes, not weeks.