---
title: "Brand detail"
method: GET
path: "/v1/brands/{id}"
tags: ["Brands"]
---

# Brand detail

`GET /v1/brands/{id}`

## Request

- Base URL: `https://api.cadencercs.com`
- URL: `https://api.cadencercs.com/v1/brands/{id}`
- Auth: HTTP bearer

Includes the submission gate, so a UI or an agent can always say exactly what is blocking.

## Path parameters

- `id` string, required

## Response `200`

Brand, last readiness report, gate and agents.

- object
  - `brand` Brand, required: **Brand fields are snake_case, in and out.** Conversation routes are camelCase. This is the single most common mistake against this API — `PATCH /v1/brands/{id}` rejects camelCase with `UNKNOWN_FIELDS` rather than ignoring it.
    - `id` string, required
    - `account_id` string, required
    - `display_name` string, required: Consumer-facing name.
    - `legal_entity` string, nullable: Registered entity, e.g. `Salus, Inc.` — carriers check this against consent surfaces.
    - `website` string, nullable
    - `description` string, nullable
    - `use_case` 'transactional' | 'promo' | 'leadgen' | 'multi_use' | 'otp' | 'conversational' | 'null', nullable: **Permanent at Google once the agent is synced**, and an agent's `useCase` defaults to this. `transactional` means the agent may never send anything promotional — no upgrade prompts, no win-back, ever. `multi_use` mixes both and is the value to pick if that is ever in scope. `conversational` is rejected at sync time: it describes turn structure rather than content, and Google's vocabulary is about content.
    - `logo_url` string, nullable
    - `banner_url` string, nullable
    - `color` string, nullable: Hex, e.g. `#5B37DE`. Needs 4.5:1 contrast against white for launch review — the example is 6.9:1. `#7C5CFF` is 4.35:1 and Google refuses it, which is the kind of near-miss that only shows up at launch.
    - `contact_email` string, nullable
    - `contact_phone` string, nullable
    - `privacy_url` string, nullable
    - `terms_url` string, nullable
    - `status` 'draft' | 'ready' | 'submitted' | 'verified' | 'rejected', required
    - `rbm_brand_id` string, nullable: The brand's id at Google, once synced or linked.
    - `last_check_id` string, nullable
    - `submitted_at` string, nullable
    - `verified_at` string, nullable
    - `reject_reason` string, nullable
    - `created_at` string
  - `check` ReadinessReport
    - `brand` string, required
    - `entity` string
    - `domain` string, required
    - `verdict` 'ready' | 'needs_work' | 'blocked', required
    - `summary` object, required
      - `passed` number
      - `failed` number
      - `warnings` number
      - `total` number
    - `checks` ReadinessCheck[], required
      - `id` string, required
      - `label` string, required
      - `status` 'pass' | 'fail' | 'warn' | 'unknown', required
      - `detail` string, required
      - `fix` string: How to resolve it. Present when not passing.
      - `blocking` boolean, required: A failing blocking check means the submission will very likely be rejected.
      - `permanent` boolean: **This one cannot be undone later.** A separate axis from `blocking`, deliberately: agent artwork is accepted by Google as a non-blocking warning and then freezes at `request-verification`, so filtering on `blocking === true` walks past it into a one-way door. If you automate a decision from this report, gate on `permanent` as well.
    - `artifacts` object[]: Policy text we generate for what the brand is missing.
      - `name` string, required
      - `filename` string, required
      - `description` string
      - `content` string, required: The generated document, ready to publish.
    - `discovered` object
      - `privacyUrl` string
      - `termsUrl` string
      - `optinUrl` string
      - `auto` string[]: URLs found by crawling rather than supplied.
  - `gate` BrandGate, required
    - `ready` boolean, required: Whether this brand can be submitted for carrier review.
    - `reasons` string[]: What is blocking, when `ready` is false.
  - `agents` Agent[], required
    - `id` string, required
    - `brand_id` string, required
    - `display_name` string, required
    - `rbm_agent_id` string, nullable: The agent's id at Google. Null until sync-google or link-google.
    - `use_case` string, nullable
    - `hosting_region` string, nullable: `NORTH_AMERICA` | `EUROPE` | `ASIA_PACIFIC`. **Permanent** once the agent exists at Google.
    - `billing_category` string, nullable: `CONVERSATIONAL` | `NON_CONVERSATIONAL`. Fixed at launch; only CONVERSATIONAL gets 24-hour session billing.
    - `region` string: Derived API endpoint prefix, not Google's hosting region.
    - `status` 'draft' | 'created' | 'submitted' | 'verified' | 'launching' | 'launched' | 'rejected', required: `created` reaches accepted test devices only. `launched` reaches real recipients, per carrier.
    - `hasOwnWebhook` boolean: Whether this agent overrides the partner-level inbound webhook at Google.
    - `rbm_service_id` string, nullable: The agent's messaging address (`bot@…`). Not readable from Google's API — copied by hand from the Console.
    - `deeplink_phone` string, nullable
    - `launch_video_url` string, nullable
    - `reviewer_instructions` string, nullable
    - `trigger_description` string, nullable
    - `interaction_types` string, nullable
    - `contact_name` string, nullable
    - `contact_email` string, nullable
    - `contact_phone` string, nullable
    - `contact_title` string, nullable
    - `optin_description` string, nullable
    - `second_use_case` string, nullable
    - `submitted_at` string, nullable
    - `verified_at` string, nullable
    - `reject_reason` string, nullable
    - `created_at` string

## Other responses

- `401`: Not signed in, and no account-linked API key was sent.
- `404`: No such brand on this account.
- `500`: Unexpected server error. The body is always JSON.

---

[API](https://skmtc.dev/cadencercs/apis/cadence-api.md) · [All operations](https://skmtc.dev/cadencercs/apis/cadence-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cadencercs/apis/cadence-api/revisions/9438443c2081?raw)
