---
title: "Agent detail"
method: GET
path: "/v1/agents/{id}"
tags: ["Agents"]
---

# Agent detail

`GET /v1/agents/{id}`

## Request

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

The agent, its brand, its per-carrier launch state and its lifecycle history.

## Path parameters

- `id` string, required

## Response `200`

Agent detail.

- object
  - `agent` Agent, required: An agent as the API describes it. The webhook plumbing (`webhook_integration_id`, `webhook_uri`, token version) is deliberately not on the wire; `hasOwnWebhook` is the part worth knowing.
    - `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
  - `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
  - `carriers` object[]
    - `carrier` string
    - `status` string
    - `requested_at` string, nullable
    - `launched_at` string, nullable
  - `history` object[]
    - `from_status` string, nullable
    - `to_status` string
    - `reason` string, nullable
    - `created_at` string

## Other responses

- `401`: Not signed in, and no account-linked API key was sent.
- `404`: No such agent 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)
