> 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/brands/get/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pinnacle.sh/_mcp/server. # Get Brand by ID GET https://api.pinnacle.sh/brands/{id} Retrieve detailed information for a specific brand in your account by ID. Reference: https://docs.pinnacle.sh/api-reference/brands/get ## Authentication - `PINNACLE-API-KEY` header (required) — API Key authentication via header ## Request ### Path parameters - `id` (string, required) — The unique identifier of the brand you want to retrieve from your account. This identifier is a string that always begins with the prefix `b_`, for example: `b_1234567890`. ### Query parameters - `hideEIN` (boolean, optional, default: false) — Optional flag to mask the Employer Identification Number in the response for security purposes. When you set this to true, the EIN value will be replaced with a masked placeholder instead of the actual number. ## Response ### 200 Returns the brand. - `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. - `lastTcrVettingDate` (string, required, nullable) — ISO 8601 formatted timestamp of the last TCR vetting. - `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` - `tcrFeedback` (list of TcrFeedback, required, nullable) — Feedback from The Campaign Registry if TCR vetting was performed. - `updatedAt` (string, required) — ISO 8601 formatted timestamp of when this brand was last updated. - `vettingHistory` (list of VettingHistory, required) — History of all external vetting attempts for this brand. - `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. - `entityType` (enum, optional) — Legal entity type of the brand. - Allowed values: `LLC`, `SOLE_PROPRIETORSHIP`, `PARTNERSHIP`, `CORP`, `S_CORP` - `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` - `website` (string, optional) — Brand website URL. ## 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 ### TcrFeedback - `description` (string, required) — Detailed description of the feedback. - `displayName` (string, required) — Human-readable name of the feedback item. - `fields` (list of string, required) — Fields affected by this feedback item. - `id` (string, required) — Feedback item identifier. ### VettingHistory - `provider` (enum, required) — The vetting provider used. - Allowed values: `AEGIS` - `vettingClass` (enum, required) — The vetting class level. - Allowed values: `STANDARD` - `vettingDate` (string, required) — ISO 8601 formatted timestamp of when the vetting was initiated. - `vettingStatus` (enum, required) — Current status of the vetting process. - Allowed values: `ACTIVE`, `FAILED`, `IN_PROGRESS`, `PENDING` - `vettingScore` (double, optional) — Vetting score if available. ### 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. ### 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 **Response** ```json { "createdAt": "2024-09-11T19:41:12.099", "id": "b_1234567890", "isArchived": false, "lastTcrVettingDate": null, "status": "VERIFIED", "tcrFeedback": null, "updatedAt": "2024-05-08T07:58:01.291", "vettingHistory": [], "address": "500 Folsom St, San Francisco, CA 94105", "contact": { "email": "michael.chen@trypinnacle.app", "name": "Michael Chen", "phone": "+14155551234", "title": "Customer Support Representative" }, "dba": "Pinnacle RCS", "ein": "88-1234567", "email": "founders@trypinnacle.app", "entityType": "LLC", "name": "Pinnacle", "sector": "TECHNOLOGY", "type": "PRIVATE_PROFIT", "website": "https://www.pinnacle.sh" } ``` **SDK Code** ```python Brand import requests url = "https://api.pinnacle.sh/brands/b_1234567890" headers = {"PINNACLE-API-KEY": ""} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript Brand const url = 'https://api.pinnacle.sh/brands/b_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 Brand package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.pinnacle.sh/brands/b_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 Brand require 'uri' require 'net/http' url = URI("https://api.pinnacle.sh/brands/b_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 Brand import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.pinnacle.sh/brands/b_1234567890") .header("PINNACLE-API-KEY", "") .asString(); ``` ```php Brand request('GET', 'https://api.pinnacle.sh/brands/b_1234567890', [ 'headers' => [ 'PINNACLE-API-KEY' => '', ], ]); echo $response->getBody(); ``` ```csharp Brand using RestSharp; var client = new RestClient("https://api.pinnacle.sh/brands/b_1234567890"); var request = new RestRequest(Method.GET); request.AddHeader("PINNACLE-API-KEY", ""); IRestResponse response = client.Execute(request); ``` ```swift Brand import Foundation let headers = ["PINNACLE-API-KEY": ""] let request = NSMutableURLRequest(url: NSURL(string: "https://api.pinnacle.sh/brands/b_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.