> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.pinnacle.sh/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pinnacle.sh/_mcp/server.

# Autofill Toll-Free Campaign Information

POST https://api.pinnacle.sh/campaigns/toll-free/autofill
Content-Type: application/json

Generate campaign details based off existing campaign and the brand it's connected to.

Reference: https://docs.pinnacle.sh/api-reference/campaigns/toll-free/autofill

## Authentication

- `PINNACLE-API-KEY` header (required) — API Key authentication via header

## Request

### Body (application/json)

This endpoint expects an autofillCampaignSchema.

- `additionalInfo` (string, optional) — Any additional information you want to provide.
- `campaignId` (string, optional) — Unique identifier for the campaign. - When autofilling 10DLC campaigns, it must begin with the prefix `dlc_` (e.g., `dlc_1234567890`) - When autofilling Toll-Free campaigns, it must begin with the prefix `tf_` (e.g., `tf_1234567890`) - When autofilling RCS campaigns, it must begin with the prefix `rcs_` (e.g., `rcs_1234567890`)

## Response

### 200

Returns autofilled toll-free information.

- `brand` (string, optional)
- `campaignId` (string, optional) — Unique identifier for the campaign. Must begin with the prefix `tf_`.
- `keywords` (CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaKeywords, optional) — Keyword response configuration.
- `links` (CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaLinks, optional) — Legal documentation links.
- `monthlyVolume` (enum, optional) — Message volume.
  - Allowed values: `10`, `100`, `1,000`, `10,000`, `100,000`, `250,000`, `500,000`, `750,000`, `1,000,000`, `5,000,000`, `10,000,000+`
- `name` (string, optional) — Display name of the campaign. This is not sent to carriers for approval and is only used for your reference on the Pinnacle dashboard.
- `optIn` (CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaOptIn, optional) — Opt-in method and workflow.
- `options` (CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaOptions, optional) — Campaign configuration options.
- `productionMessageContent` (string, optional) — Example message(s) that would be sent in production. Should reflect the actual content users will receive. See the [Production Message Content](/guides/campaigns/opt-in-compliance#production-message-content) section for requirements.
- `useCase` (CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaUseCase, optional) — Use case classification for the campaign.

## Errors

### 400 Bad Request Error

Validation failed. The payload has missing required fields and/or invalid types.&#x20; 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.&#x20; 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.&#x20; 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.

### 500 Internal Server Error

An unexpected error occurred on Pinnacle's servers while processing your request.&#x20; 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

### CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaKeywords

Keyword response configuration.

- `HELP` (CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaKeywordsHelp, optional) — Help keyword settings.
- `OPT_IN` (CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaKeywordsOptIn, optional) — Opt-in keyword settings.

### CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaLinks

Legal documentation links.

- `privacyPolicy` (string, optional) — Privacy policy URL.
- `termsOfService` (string, optional) — Terms of service URL.

### CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaOptIn

Opt-in method and workflow.

- `method` (enum, optional) — Method used to collect opt-in consent from users. See the [Opt-In Methods and Workflow](/guides/campaigns/opt-in-compliance#opt-in-methods-and-workflow) section for detailed requirements. - `DIGITAL`: Web form, app, or online checkout. Requires URL to the form. Checkbox must not be pre-selected. - `PAPER`: Physical paper form (in-store, event, etc.). Requires URL/image of the form with SMS disclosures visible. - `TEXT`: Text-to-join keyword campaign. Users text a keyword to opt in. Requires the keyword and number. - `VERBAL`: In-person or phone consent. Not allowed for marketing campaigns. Requires script and confirmation SMS details.
  - Allowed values: `DIGITAL`, `PAPER`, `TEXT`, `VERBAL`
- `url` (string, optional) — URL where the opt-in form or documentation can be found.
- `workflowDescription` (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.

### CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaOptions

Campaign configuration options.

- `ageGated` (boolean, optional) — Whether the campaign is age-gated.

### CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaUseCase

Use case classification for the campaign.

- `summary` (string, optional) — Detailed summary of the use case explaining what messages will be sent and how users interact with the campaign. See the [Use Case Summary](/guides/campaigns/opt-in-compliance#use-case-summary) section for requirements.
- `value` (enum, optional) — The primary use case classification for this campaign.
  - Allowed values: `APP_NOTIFICATIONS`, `APPOINTMENTS`, `AUCTIONS`, `AUTO_REPAIR_SERVICES`, `BANK_TRANSFERS`, `BILLING`, `BOOKING_CONFIRMATIONS`, `BUSINESS_UPDATES`, `CAREER_TRAINING`, `CHATBOT`, `CONVERSATIONAL_ALERTS`, `COURIER_SERVICES_DELIVERIES`, `COVID_19_ALERTS`, `EMERGENCY_ALERTS`, `EVENTS_PLANNING`, `FINANCIAL_SERVICES`, `FRAUD_ALERTS`, `FUNDRAISING`, `GENERAL_MARKETING`, `GENERAL_SCHOOL_UPDATES`, `HEALTHCARE_ALERTS`, `HOUSING_COMMUNITY_UPDATES`, `HR_STAFFING`, `INSURANCE_SERVICES`, `JOB_DISPATCH`, `LEGAL_SERVICES`, `MIXED`, `MOTIVATIONAL_REMINDERS`, `NOTARY_NOTIFICATIONS`, `ORDER_NOTIFICATIONS`, `POLITICAL`, `PUBLIC_WORKS`, `REAL_ESTATE_SERVICES`, `RELIGIOUS_SERVICES`, `REPAIR_DIAGNOSTICS_ALERTS`, `REWARDS_PROGRAM`, `SURVEYS`, `SYSTEM_ALERTS`, `TWO_FA`, `VOTING_REMINDERS`, `WAITLIST_ALERTS`, `WEBINAR_REMINDERS`, `WORKSHOP_ALERTS`

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

### CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaKeywordsHelp

Help keyword settings.

- `message` (string, optional) — Message sent when a user sends HELP. Must include at least one support contact method (phone, email, or website). See the [Help keyword requirements](/guides/campaigns/opt-in-compliance#keyword-response-messages).

### CampaignsTollFreeAutofillPostResponsesContentApplicationJsonSchemaKeywordsOptIn

Opt-in keyword settings.

- `message` (string, optional) — Message sent when a user opts in. Must include brand name, confirmation of subscription, and disclosures (STOP and HELP instructions, message and data rates). See the [Opt-In keyword requirements](/guides/campaigns/opt-in-compliance#keyword-response-messages).
- `keywords` (list of string, optional) — Keywords that trigger opt-in response.

## Examples

**Request**

```json
{
  "additionalInfo": "Please autofill missing campaign fields using my brand profile",
  "campaignId": "dlc_1234567890"
}
```

**Response**

```json
{
  "brand": "b_1234567890",
  "campaignId": "tf_1234567890",
  "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."
    },
    "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/",
      "keywords": [
        "START",
        "SUBSCRIBE"
      ]
    }
  },
  "links": {
    "privacyPolicy": "https://www.pinnacle.sh/privacy",
    "termsOfService": "https://www.pinnacle.sh/terms"
  },
  "monthlyVolume": "10,000",
  "name": "Pinnacle",
  "optIn": {
    "method": "PAPER",
    "url": "https://www.pinnacle.sh/opt-in",
    "workflowDescription": "End users opt-in when filling out the in-person intake forms where they will write their phone numbers and check a box indicating that they've opted in to messages. Link to paper form: https://www.pinnacle.sh/opt-in"
  },
  "options": {
    "ageGated": false
  },
  "productionMessageContent": "• Hi [First Name], your order #[Order ID] has shipped and will arrive [Date]. Track here: [URL]. Reply HELP for help or STOP to unsubscribe.\n• Heads up! [Friend Name] shared 3 photos. Reply VIEW to see them. Reply HELP for help or STOP to unsubscribe.\n• Hello [First Name]! I'm Pinnacle's virtual assistant. How can I help you today? Ask about order status, account updates, photo sharing, or more. Reply HELP for assistance or STOP to unsubscribe.",
  "useCase": {
    "summary": "Customers who have opted into text messages can interact with our automated SMS chatbot to receive transaction-driven notifications (order status, shipping updates, account alerts), ask support questions, share photos with friends, and manage their account details via simple, conversational text flows. All messages are transactional or interactive flows customers opt into. Users can send images (e.g., receipts) and get guided replies.",
    "value": "CHATBOT"
  }
}
```

**SDK Code**

```python Autofilled Toll-Free Campaign
import requests

url = "https://api.pinnacle.sh/campaigns/toll-free/autofill"

payload = {
    "additionalInfo": "Please autofill missing campaign fields using my brand profile",
    "campaignId": "dlc_1234567890"
}
headers = {
    "PINNACLE-API-KEY": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Autofilled Toll-Free Campaign
const url = 'https://api.pinnacle.sh/campaigns/toll-free/autofill';
const options = {
  method: 'POST',
  headers: {'PINNACLE-API-KEY': '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"additionalInfo":"Please autofill missing campaign fields using my brand profile","campaignId":"dlc_1234567890"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Autofilled Toll-Free Campaign
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.pinnacle.sh/campaigns/toll-free/autofill"

	payload := strings.NewReader("{\n  \"additionalInfo\": \"Please autofill missing campaign fields using my brand profile\",\n  \"campaignId\": \"dlc_1234567890\"\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("PINNACLE-API-KEY", "<apiKey>")
	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 Autofilled Toll-Free Campaign
require 'uri'
require 'net/http'

url = URI("https://api.pinnacle.sh/campaigns/toll-free/autofill")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["PINNACLE-API-KEY"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"additionalInfo\": \"Please autofill missing campaign fields using my brand profile\",\n  \"campaignId\": \"dlc_1234567890\"\n}"

response = http.request(request)
puts response.read_body
```

```java Autofilled Toll-Free Campaign
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.pinnacle.sh/campaigns/toll-free/autofill")
  .header("PINNACLE-API-KEY", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"additionalInfo\": \"Please autofill missing campaign fields using my brand profile\",\n  \"campaignId\": \"dlc_1234567890\"\n}")
  .asString();
```

```php Autofilled Toll-Free Campaign
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.pinnacle.sh/campaigns/toll-free/autofill', [
  'body' => '{
  "additionalInfo": "Please autofill missing campaign fields using my brand profile",
  "campaignId": "dlc_1234567890"
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'PINNACLE-API-KEY' => '<apiKey>',
  ],
]);

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

```csharp Autofilled Toll-Free Campaign
using RestSharp;

var client = new RestClient("https://api.pinnacle.sh/campaigns/toll-free/autofill");
var request = new RestRequest(Method.POST);
request.AddHeader("PINNACLE-API-KEY", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"additionalInfo\": \"Please autofill missing campaign fields using my brand profile\",\n  \"campaignId\": \"dlc_1234567890\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Autofilled Toll-Free Campaign
import Foundation

let headers = [
  "PINNACLE-API-KEY": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "additionalInfo": "Please autofill missing campaign fields using my brand profile",
  "campaignId": "dlc_1234567890"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.pinnacle.sh/campaigns/toll-free/autofill")! 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()
```