---
title: "Update Brand Kit"
method: PATCH
path: "/v3/brand-kits/{brand_kit_id}"
tags: ["Brand"]
---

# Update Brand Kit

`PATCH /v3/brand-kits/{brand_kit_id}`

## Request

- Base URL: `https://api.heygen.com`
- URL: `https://api.heygen.com/v3/brand-kits/{brand_kit_id}`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

Updates a brand kit's name or role assignments: color roles, main logo, heading and body fonts. Omitted fields are unchanged and `null` is rejected. Each role object you send replaces the existing one in full; `{}` clears a role and it stays cleared. Role edits return 409 until the kit is `completed`; shared kits return 403.

## Path parameters

- `brand_kit_id` string, required

## Request body

- UpdateBrandKitRequest: Request body for PATCH /v3/brand-kits/{brand_kit_id}. Every field is optional and omitting one leaves it unchanged. Sending a role object with no fields inside it (`{}`) clears that role, and a cleared role stays cleared — nothing recomputes over a role the caller has deliberately emptied. Clearing is an empty object rather than `null`, and `null` is rejected outright, so each intention has exactly one spelling. Generated clients serialise request bodies with `exclude_none` and drop a `null` before sending, so honouring `null` as "clear" would clear the role for a caller using raw HTTP and silently do nothing for a caller using our own SDK.
  - `name` string: New display name for the brand kit, 1-256 characters. Leading and trailing whitespace is trimmed.
  - `color_roles` UpdateBrandKitColorRoles: Color role assignment to write. Unknown keys are rejected.
    - `primary` string, nullable: Primary brand color, as a hex value like '#FF5733'.
    - `secondary` string, nullable: Secondary brand color, as a hex value.
    - `tertiary` string, nullable: Tertiary brand color, as a hex value.
    - `accent` string, nullable: Accent color for highlights and calls to action, as a hex value.
  - `logo_roles` UpdateBrandKitLogoRoles: Logo role assignment to write. Unknown keys are rejected.
    - `primary` string, nullable: Identifier of the primary logo. Must be a logo_id belonging to this kit that has finished importing.
  - `font_roles` UpdateBrandKitFontRoles: Typographic role assignment to write. Unknown keys are rejected.
    - `title_text` UpdateBrandKitFontRole: One typographic role to write. Unknown keys are rejected.
      - `font_id` string, nullable: Identifier of the font to assign. Not required to appear in the kit's `fonts` list: a role may legitimately name a font variant that the list does not enumerate separately.
      - `weight` integer, nullable: Font weight, 1-1000. E.g. 400 for regular or 700 for bold.
    - `body_text` UpdateBrandKitFontRole: One typographic role to write. Unknown keys are rejected.
      - `font_id` string, nullable: Identifier of the font to assign. Not required to appear in the kit's `fonts` list: a role may legitimately name a font variant that the list does not enumerate separately.
      - `weight` integer, nullable: Font weight, 1-1000. E.g. 400 for regular or 700 for bold.

## Response `200`

Successful response

- object
  - `data` BrandKitDetail: A single brand kit with its colors, logos and fonts. A brand kit imported from a website is assembled in the background. While `status` is `loading` the collections and role fields are provisional and may be empty or incomplete; the import has finished contributing to them once `status` is `completed`. A kit whose import failed reports `error` and keeps whatever was assembled before the failure. A kit can still be edited in the HeyGen web app afterwards, so `completed` means the import is done, not that the kit is frozen.
    - `brand_kit_id` string, required: Unique brand kit identifier.
    - `name` string, required: Display name of the brand kit.
    - `status` 'loading' | 'completed' | 'error', required: Assembly status: 'loading' while the kit is still being built, 'completed' when it is ready, or 'error' if the import failed.
    - `colors` string[]: Brand colors as hex values, e.g. '#FF5733'. A color playing a role may sit outside this list — see color_roles — so do not treat it as the full set of colors the kit references.
    - `color_roles` BrandKitColorRoles: Which color plays which part in the brand's visual system, as hex values. A role may name a color that is not present in `colors`: the palette lists the brand's core swatches, while a role such as `tertiary` can point at a supporting surface color outside them.
      - `primary` string, nullable: Primary brand color.
      - `secondary` string, nullable: Secondary brand color.
      - `tertiary` string, nullable: Tertiary brand color.
      - `accent` string, nullable: Accent color, used for highlights and calls to action.
    - `logos` BrandKitLogo[]: Logos belonging to the brand kit.
      - `logo_id` string, required: Unique logo identifier. The logo named by logo_roles.primary is the brand's main logo.
      - `name` string, nullable: Display name of the logo.
      - `url` string, nullable: URL of the logo image. Absent if the logo has no stored file yet.
    - `logo_roles` BrandKitLogoRoles: Which logo is the brand's main one. Deleting a logo does not clear the role that named it, so this can reference a logo_id absent from `logos`. Match by id and handle the miss rather than assuming a lookup succeeds.
      - `primary` string, nullable: Identifier of the primary logo. Names a logo_id in `logos` unless that logo has since been deleted.
    - `fonts` BrandKitFont[]: Fonts belonging to the brand kit.
      - `font_id` string, required: Unique font identifier. A font_roles entry usually names one of these, but see font_roles for when it does not.
      - `name` string, nullable: Font family name.
    - `font_roles` BrandKitFontRoles: Which font plays which typographic part. Deleting a font does not clear the role that named it, so a role's font_id can be absent from `fonts`. Match by id and handle the miss rather than assuming a lookup succeeds.
      - `title_text` BrandKitFontRole: A font assigned to one typographic role.
        - `font_id` string, nullable: Identifier of the assigned font.
        - `weight` integer, nullable: Font weight, e.g. 400 for regular or 700 for bold.
      - `body_text` BrandKitFontRole: A font assigned to one typographic role.
        - `font_id` string, nullable: Identifier of the assigned font.
        - `weight` integer, nullable: Font weight, e.g. 400 for regular or 700 for bold.

## Other responses

- `400`: Invalid request parameters
- `401`: Authentication failed
- `403`: Forbidden
- `404`: Resource not found
- `409`: Conflict
- `429`: Rate limit exceeded

## Changes

- **2026-11-03** `7dfa5e59b4f5`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/heygen/apis/heygen-external-api/changes/v3/brand-kits/:brand_kit_id/patch.md)

---

[API](https://skmtc.dev/heygen/apis/heygen-external-api.md) - [All operations](https://skmtc.dev/heygen/apis/heygen-external-api/llms.txt) - [OpenAPI document](https://skmtc.dev/heygen/apis/heygen-external-api/revisions/7dfa5e59b4f5?raw)
