---
title: "Get a brand"
method: GET
path: "/brands/{id}"
tags: ["Brands"]
---

# Get a brand

`GET /brands/{id}`

## Request

- Base URL: `https://www.rainbrand.com/api/v1`
- URL: `https://www.rainbrand.com/api/v1/brands/{id}`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://www.rainbrand.com/api/auth/oauth2/authorize`
    - Token URL: `https://www.rainbrand.com/api/auth/oauth2/token`

Read the brand's current profile and active Brand Skill version, or check progress while it is being prepared.

## Path parameters

- `id` string, uuid, required: Brand ID

## Query parameters

- `wait` union: Hold the connection until the resource reaches a terminal status
  - boolean
  - '0' | '1' | 'true' | 'false'
- `timeout` integer: Max seconds to wait (default 120, max 295)

## Response `200`

OK

- object
  - `data` object, required
    - `id` string, uuid, required
    - `status` 'analyzing' | 'ready' | 'logo_required' | 'failed', required
    - `failure` object, nullable, required
      - `code` 'INVALID_URL' | 'UNSUPPORTED_SOURCE' | 'SCRAPE_FAILED' | 'WEBSITE_SOURCE_REJECTED' | 'INSTAGRAM_FETCH_FAILED' | 'INSTAGRAM_PROFILE_NOT_FOUND' | 'INSTAGRAM_PRIVATE_PROFILE' | 'PDF_PROCESSING_FAILED' | 'PDF_SOURCE_REJECTED' | 'SOURCE_REJECTED' | 'TARGET_RESTRICTED' | 'BRAND_GUIDE_BUILD_FAILED' | 'INTERNAL_ERROR' | 'VISUAL_DNA_FAILED', required
      - `message` string, required
    - `profile` object, nullable, required: Current brand identity. Brands with an active Brand Skill read this from that immutable Skill; brands still being created may not have a profile yet.
      - `name` string, nullable, required
      - `primaryLogo` object, nullable, required
        - `url` string, uri, required
        - `mediaType` string, nullable, required
      - `logoCatalog` object, nullable, required: Supported logos saved with this Brand Skill version. Null means no catalog was published; an empty items array explicitly records no supported logos. Asset URLs are temporary. Follow exact caller selection and relevant Brand Skill guidance before visibility hints, with the primary logo as a general fallback.
        - `primaryLogoImageId` string, uuid, nullable, required
        - `items` object[], required
          - `imageId` string, uuid, required
          - `form` 'icon' | 'wordmark' | 'lockup', required
          - `contrastsBestOn` string[], nullable, required: Backgrounds that independently pass the visibility check for a transparent logo. An empty array means neither passes. Null means analysis was unavailable for a transparent asset or does not apply to an opaque asset. This heuristic does not establish Brand approval.
          - `asset` object, required
            - `path` string, required
            - `mediaType` string, required
            - `byteLength` integer, required
            - `sha256` string, required
            - `width` integer, required
            - `height` integer, required
            - `aspectRatio` number, required
            - `hasTransparency` boolean, required
            - `url` string, uri, required: Temporary signed URL for the logo bytes saved with this Brand Skill version. Read the version again to refresh an expired URL.
      - `favicon` object, nullable, required
        - `url` string, uri, required
        - `mediaType` string, nullable, required
      - `palette` object[], required: The Brand's complete ordered color palette.
        - `hex` string, required: Six-digit HEX color value, including the leading #.
        - `name` string, nullable, required: The source-established color name, when available.
        - `group` string, nullable, required: The source-defined palette group, or null when the source does not group this color.
        - `usage` string, nullable, required: Source-supported guidance for using this color, when available.
      - `gradients` object[], required: The Brand's complete ordered linear gradients.
        - `name` string, required: The gradient's name, as established by the source.
        - `angle` number, required: The linear gradient's angle in degrees, from 0 up to but not including 360.
        - `stops` object[], required: At least two color stops in non-decreasing position order. Adjacent stops may share a position to create a hard transition.
          - `hex` string, required: Six-digit HEX color value for this stop, including the leading #.
          - `position` number, required: The stop's position as a percentage from 0 to 100.
        - `usage` string: Source-supported guidance on when and how to use this gradient.
      - `typography` object, nullable, required
        - `heading` object, nullable, required: Deprecated. Font of the role named Heading, if any.
          - `family` string, required
        - `body` object, nullable, required: Deprecated. Font of the role named Body, if any.
          - `family` string, required
        - `roles` object[], required: The brand's typography roles, most prominent first.
          - `name` string, required: The brand's name for this typography role, such as Eyebrow.
          - `family` string, required
          - `weight` integer, nullable, required: Font weight for this role, or null when unspecified.
    - `activeSkill` object, nullable, required: Current immutable Brand Skill, when one is active.
      - `id` string, uuid, required
      - `createdAt` string, date-time, required
    - `workspaceId` string, nullable, required
    - `workspaceName` string, required
    - `createdAt` string, date-time, required

## Other responses

- `401`: 401
- `403`: 403
- `404`: 404
- `429`: 429

---

[API](https://skmtc.dev/rainbrand/apis/rainbrand-api.md) - [All operations](https://skmtc.dev/rainbrand/apis/rainbrand-api/llms.txt) - [OpenAPI document](https://skmtc.dev/rainbrand/apis/rainbrand-api/revisions/012b8e9da4df?raw)
