> 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/audiences/update/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pinnacle.sh/_mcp/server. # Update Audience PATCH https://api.pinnacle.sh/audiences Content-Type: application/json Update audience metadata. This endpoint does NOT modify contacts. To add or remove contacts, use the [Add Contacts](/api-reference/audiences/add-contacts) or [Remove Contacts](/api-reference/audiences/remove-contacts) endpoints. Reference: https://docs.pinnacle.sh/api-reference/audiences/update ## Authentication - `PINNACLE-API-KEY` header (required) — API Key authentication via header ## Request ### Body (application/json) This endpoint expects an UpdateAudienceRequest. - `id` (string, required) — Audience ID to update. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`. - `name` (string, optional) — New audience name. - `description` (string, optional) — New audience description. ## Response ### 200 Successfully updated the audience. - `id` (string, required) — Audience public ID. This identifier is a string that always begins with the prefix `aud_`, for example: `aud_abc123`. - `name` (string, required) — Audience name. - `description` (string, required) — Audience description. - `contactCount` (integer, required) — Total number of contacts in audience. Use the [Get Audience](/api-reference/audiences/get) endpoint with the pagination parameters to get the audience with its contacts. ## 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 ### 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 **Request** ```json { "id": "aud_abc123", "name": "Updated Audience Name", "description": "New description" } ``` **Response** ```json { "id": "aud_abc123", "name": "Updated Audience Name", "description": "New description", "contactCount": 150 } ``` **SDK Code** ```python Updated Audience import requests url = "https://api.pinnacle.sh/audiences" payload = { "id": "aud_abc123", "name": "Updated Audience Name", "description": "New description" } headers = { "PINNACLE-API-KEY": "", "Content-Type": "application/json" } response = requests.patch(url, json=payload, headers=headers) print(response.json()) ``` ```javascript Updated Audience const url = 'https://api.pinnacle.sh/audiences'; const options = { method: 'PATCH', headers: {'PINNACLE-API-KEY': '', 'Content-Type': 'application/json'}, body: '{"id":"aud_abc123","name":"Updated Audience Name","description":"New description"}' }; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go Updated Audience package main import ( "fmt" "strings" "net/http" "io" ) func main() { url := "https://api.pinnacle.sh/audiences" payload := strings.NewReader("{\n \"id\": \"aud_abc123\",\n \"name\": \"Updated Audience Name\",\n \"description\": \"New description\"\n}") req, _ := http.NewRequest("PATCH", 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 Updated Audience require 'uri' require 'net/http' url = URI("https://api.pinnacle.sh/audiences") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Patch.new(url) request["PINNACLE-API-KEY"] = '' request["Content-Type"] = 'application/json' request.body = "{\n \"id\": \"aud_abc123\",\n \"name\": \"Updated Audience Name\",\n \"description\": \"New description\"\n}" response = http.request(request) puts response.read_body ``` ```java Updated Audience import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.patch("https://api.pinnacle.sh/audiences") .header("PINNACLE-API-KEY", "") .header("Content-Type", "application/json") .body("{\n \"id\": \"aud_abc123\",\n \"name\": \"Updated Audience Name\",\n \"description\": \"New description\"\n}") .asString(); ``` ```php Updated Audience request('PATCH', 'https://api.pinnacle.sh/audiences', [ 'body' => '{ "id": "aud_abc123", "name": "Updated Audience Name", "description": "New description" }', 'headers' => [ 'Content-Type' => 'application/json', 'PINNACLE-API-KEY' => '', ], ]); echo $response->getBody(); ``` ```csharp Updated Audience using RestSharp; var client = new RestClient("https://api.pinnacle.sh/audiences"); var request = new RestRequest(Method.PATCH); request.AddHeader("PINNACLE-API-KEY", ""); request.AddHeader("Content-Type", "application/json"); request.AddParameter("application/json", "{\n \"id\": \"aud_abc123\",\n \"name\": \"Updated Audience Name\",\n \"description\": \"New description\"\n}", ParameterType.RequestBody); IRestResponse response = client.Execute(request); ``` ```swift Updated Audience import Foundation let headers = [ "PINNACLE-API-KEY": "", "Content-Type": "application/json" ] let parameters = [ "id": "aud_abc123", "name": "Updated Audience Name", "description": "New description" ] as [String : Any] let postData = JSONSerialization.data(withJSONObject: parameters, options: []) let request = NSMutableURLRequest(url: NSURL(string: "https://api.pinnacle.sh/audiences")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "PATCH" 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.