---
title: "Submit for carrier review"
method: POST
path: "/v1/brands/{id}/submit"
tags: ["Brands"]
---

# Submit for carrier review

`POST /v1/brands/{id}/submit`

## Request

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

Refused until the readiness check passes.

## Path parameters

- `id` string, required

## Response `200`

Submitted.

- 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

## Other responses

- `401`: Not signed in, and no account-linked API key was sent.
- `404`: No such brand on this account.
- `409`: Readiness check not passed, or an invalid status transition.
- `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)
