> ## Documentation Index
> Fetch the complete documentation index at: https://heygen-1fa696a7.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Update Brand Kit

> Updates a brand kit's name or its role assignments — which color plays which part, which logo is the main one, and which font is used for headings and body text. A field you omit is left unchanged.

Creation assigns these roles automatically, with no human in the loop, so this is how a caller corrects them.

Each role object is replaced in full rather than merged: send the roles you want to keep, since a role you leave out of the object is cleared. Send an empty object to clear a role entirely. A cleared role stays cleared and is not recomputed later. Sending null for any field is rejected: omit it to leave it unchanged.

Role edits require an assembled kit and return 409 while status is 'loading' or 'error'. Renaming is allowed at any time. Editing the colors themselves is not supported here yet.

A brand kit shared into your workspace by another workspace is readable but not editable, and returns 403.



## OpenAPI

````yaml /openapi/external-api.json patch /v3/brand-kits/{brand_kit_id}
openapi: 3.1.0
info:
  title: HeyGen External API
  version: 1.0.0
  description: >-
    HeyGen's external API for programmatic AI video creation. See
    https://docs.heygen.com for full documentation.
  contact:
    name: HeyGen Product Infra
    url: https://heygen.com
servers:
  - url: https://api.heygen.com
    description: Production
security:
  - ApiKeyAuth: []
  - BearerAuth: []
tags:
  - name: Video Agent
    description: Create videos from text prompts using AI
  - name: Videos
    description: Create, list, retrieve, and delete videos
  - name: Templates
    description: Generate videos from reusable templates by replacing their variables
  - name: Voices
    description: Text-to-speech and voice management
  - name: Audio
    description: Search the background-music and sound-effects catalog
  - name: Video Translate
    description: Translate videos into other languages
  - name: AI Clipping
    description: Turn long-form videos into ready-to-share short clips with captions
  - name: Batches
    description: Create and track batches of videos.
  - name: Video Translation Batches
    description: Create and track batches of video translations.
  - name: Lipsync Batches
    description: Create and track batches of lipsyncs.
  - name: Asset Batches
    description: Create and track batches of direct-to-S3 asset uploads.
  - name: User
    description: Account information and billing
  - name: Avatars
    description: List and manage avatars and looks
  - name: Assets
    description: Upload files for use in video creation
  - name: Webhooks
    description: Manage webhook endpoints and events
  - name: Lipsync
    description: Dub or replace audio on existing videos
  - name: Brand
    description: >-
      Brand-related resources — brand kits (colors, fonts, logos) and brand
      glossaries (custom term translations)
  - name: HyperFrames
    description: Render HyperFrames composition zips into video — separate from /v3/videos
  - name: Filler Word Removal
    description: ''
paths:
  /v3/brand-kits/{brand_kit_id}:
    patch:
      tags:
        - Brand
      summary: Update Brand Kit
      description: >-
        Updates a brand kit's name or its role assignments — which color plays
        which part, which logo is the main one, and which font is used for
        headings and body text. A field you omit is left unchanged.


        Creation assigns these roles automatically, with no human in the loop,
        so this is how a caller corrects them.


        Each role object is replaced in full rather than merged: send the roles
        you want to keep, since a role you leave out of the object is cleared.
        Send an empty object to clear a role entirely. A cleared role stays
        cleared and is not recomputed later. Sending null for any field is
        rejected: omit it to leave it unchanged.


        Role edits require an assembled kit and return 409 while status is
        'loading' or 'error'. Renaming is allowed at any time. Editing the
        colors themselves is not supported here yet.


        A brand kit shared into your workspace by another workspace is readable
        but not editable, and returns 403.
      operationId: updateBrandKit
      parameters:
        - name: brand_kit_id
          in: path
          required: true
          schema:
            type: string
          description: Unique brand kit identifier
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBrandKitRequest'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/BrandKitDetail'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/StandardAPIError'
              example:
                error:
                  code: invalid_parameter
                  message: Provide at least one field to update.
                  param: null
                  doc_url: null
        '401':
          description: Authentication failed
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/StandardAPIError'
              example:
                error:
                  code: unauthorized
                  message: Invalid or expired API key. Verify your x-api-key header.
                  param: null
                  doc_url: null
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/StandardAPIError'
              example:
                error:
                  code: resource_access_denied
                  message: >-
                    This brand kit is shared with your workspace and can only be
                    edited by the workspace that owns it.
                  param: null
                  doc_url: null
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/StandardAPIError'
              example:
                error:
                  code: resource_not_found
                  message: Brand kit not found.
                  param: null
                  doc_url: null
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/StandardAPIError'
              example:
                error:
                  code: brand_kit_not_ready
                  message: >-
                    This brand kit is still being assembled (status 'loading').
                    Roles can only be edited once it is 'completed'.
                  param: null
                  doc_url: null
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    $ref: '#/components/schemas/StandardAPIError'
              example:
                error:
                  code: rate_limit_exceeded
                  message: >-
                    Too many requests. Retry after the duration specified in the
                    Retry-After header.
                  param: null
                  doc_url: null
          headers:
            Retry-After:
              description: Seconds to wait before retrying
              schema:
                type: integer
      security:
        - ApiKeyAuth: []
        - BearerAuth: []
components:
  schemas:
    UpdateBrandKitRequest:
      additionalProperties: false
      description: >-
        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.
      properties:
        name:
          default: null
          description: >-
            New display name for the brand kit, 1-256 characters. Leading and
            trailing whitespace is trimmed.
          maxLength: 256
          minLength: 1
          title: Name
          type: string
        color_roles:
          $ref: '#/components/schemas/UpdateBrandKitColorRoles'
          default: null
          description: >-
            Which color plays which part, as hex values. Replaces the stored
            assignment in full: a role you omit from this object is cleared, so
            send the roles you want to keep. Send `{}` to clear every color
            role.
          title: Color Roles
        logo_roles:
          $ref: '#/components/schemas/UpdateBrandKitLogoRoles'
          default: null
          description: >-
            Which logo is the brand's main one. Replaces the stored assignment
            in full, like color_roles, so omitting `primary` clears it. Send
            `{}` to clear the logo role.
          title: Logo Roles
        font_roles:
          $ref: '#/components/schemas/UpdateBrandKitFontRoles'
          default: null
          description: >-
            Which font plays which typographic part. Replaces the stored
            assignment in full, like color_roles.
          title: Font Roles
      title: UpdateBrandKitRequest
      type: object
    BrandKitDetail:
      description: >-
        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.
      properties:
        brand_kit_id:
          description: Unique brand kit identifier.
          title: Brand Kit Id
          type: string
        name:
          description: Display name of the brand kit.
          title: Name
          type: string
        status:
          description: >-
            Assembly status: 'loading' while the kit is still being built,
            'completed' when it is ready, or 'error' if the import failed.
          enum:
            - loading
            - completed
            - error
          title: Status
          type: string
        colors:
          description: >-
            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.
          items:
            type: string
          title: Colors
          type: array
        color_roles:
          anyOf:
            - $ref: '#/components/schemas/BrandKitColorRoles'
            - type: 'null'
          default: null
          description: >-
            Which color plays which part. May be absent while the kit is still
            loading.
        logos:
          description: Logos belonging to the brand kit.
          items:
            $ref: '#/components/schemas/BrandKitLogo'
          title: Logos
          type: array
        logo_roles:
          anyOf:
            - $ref: '#/components/schemas/BrandKitLogoRoles'
            - type: 'null'
          default: null
          description: >-
            Which logo is the main one. May be absent while the kit is still
            loading.
        fonts:
          description: Fonts belonging to the brand kit.
          items:
            $ref: '#/components/schemas/BrandKitFont'
          title: Fonts
          type: array
        font_roles:
          anyOf:
            - $ref: '#/components/schemas/BrandKitFontRoles'
            - type: 'null'
          default: null
          description: >-
            Which font plays which typographic part. May be absent while the kit
            is still loading.
      required:
        - brand_kit_id
        - name
        - status
      title: BrandKitDetail
      type: object
    StandardAPIError:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code
          example: invalid_parameter
        message:
          type: string
          description: Human-readable error message
          example: Video not found
        param:
          type:
            - string
            - 'null'
          description: Which request field caused the error
        doc_url:
          type:
            - string
            - 'null'
          description: Link to error documentation
        errors:
          type: array
          description: >-
            Per-item error details for batch/multi-node failures (e.g. graph
            compilation errors by node).
          items:
            $ref: '#/components/schemas/StandardAPIErrorDetail'
      required:
        - code
        - message
    UpdateBrandKitColorRoles:
      additionalProperties: false
      description: Color role assignment to write. Unknown keys are rejected.
      properties:
        primary:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Primary brand color, as a hex value like '#FF5733'.
          title: Primary
        secondary:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Secondary brand color, as a hex value.
          title: Secondary
        tertiary:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Tertiary brand color, as a hex value.
          title: Tertiary
        accent:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Accent color for highlights and calls to action, as a hex value.
          title: Accent
      title: UpdateBrandKitColorRoles
      type: object
    UpdateBrandKitLogoRoles:
      additionalProperties: false
      description: Logo role assignment to write. Unknown keys are rejected.
      properties:
        primary:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: >-
            Identifier of the primary logo. Must be a logo_id belonging to this
            kit that has finished importing.
          title: Primary
      title: UpdateBrandKitLogoRoles
      type: object
    UpdateBrandKitFontRoles:
      additionalProperties: false
      description: Typographic role assignment to write. Unknown keys are rejected.
      properties:
        title_text:
          anyOf:
            - $ref: '#/components/schemas/UpdateBrandKitFontRole'
            - type: 'null'
          default: null
          description: Font for headings and titles.
        body_text:
          anyOf:
            - $ref: '#/components/schemas/UpdateBrandKitFontRole'
            - type: 'null'
          default: null
          description: Font for body copy.
      title: UpdateBrandKitFontRoles
      type: object
    BrandKitColorRoles:
      description: >-
        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.
      properties:
        primary:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Primary brand color.
          title: Primary
        secondary:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Secondary brand color.
          title: Secondary
        tertiary:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Tertiary brand color.
          title: Tertiary
        accent:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Accent color, used for highlights and calls to action.
          title: Accent
      title: BrandKitColorRoles
      type: object
    BrandKitLogo:
      description: A logo belonging to a brand kit.
      properties:
        logo_id:
          description: >-
            Unique logo identifier. The logo named by logo_roles.primary is the
            brand's main logo.
          title: Logo Id
          type: string
        name:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Display name of the logo.
          title: Name
        url:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: URL of the logo image. Absent if the logo has no stored file yet.
          title: Url
      required:
        - logo_id
      title: BrandKitLogo
      type: object
    BrandKitLogoRoles:
      description: >-
        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.
      properties:
        primary:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: >-
            Identifier of the primary logo. Names a logo_id in `logos` unless
            that logo has since been deleted.
          title: Primary
      title: BrandKitLogoRoles
      type: object
    BrandKitFont:
      description: A font belonging to a brand kit.
      properties:
        font_id:
          description: >-
            Unique font identifier. A font_roles entry usually names one of
            these, but see font_roles for when it does not.
          title: Font Id
          type: string
        name:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Font family name.
          title: Name
      required:
        - font_id
      title: BrandKitFont
      type: object
    BrandKitFontRoles:
      description: >-
        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.
      properties:
        title_text:
          anyOf:
            - $ref: '#/components/schemas/BrandKitFontRole'
            - type: 'null'
          default: null
          description: Font for headings and titles.
        body_text:
          anyOf:
            - $ref: '#/components/schemas/BrandKitFontRole'
            - type: 'null'
          default: null
          description: Font for body copy.
      title: BrandKitFontRoles
      type: object
    StandardAPIErrorDetail:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code
          example: unknown_node_type
        message:
          type: string
          description: Human-readable error message
          example: Unknown node type
        node_id:
          type: string
          description: Graph node id this error pertains to, if applicable
        port:
          type: string
          description: Port name on the node this error pertains to, if applicable
        path:
          type: string
          description: Field path within the item this error pertains to, if applicable
      required:
        - code
        - message
    UpdateBrandKitFontRole:
      additionalProperties: false
      description: One typographic role to write. Unknown keys are rejected.
      properties:
        font_id:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: >-
            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.
          title: Font Id
        weight:
          anyOf:
            - maximum: 1000
              minimum: 1
              type: integer
            - type: 'null'
          default: null
          description: Font weight, 1-1000. E.g. 400 for regular or 700 for bold.
          title: Weight
      title: UpdateBrandKitFontRole
      type: object
    BrandKitFontRole:
      description: A font assigned to one typographic role.
      properties:
        font_id:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          description: Identifier of the assigned font.
          title: Font Id
        weight:
          anyOf:
            - type: integer
            - type: 'null'
          default: null
          description: Font weight, e.g. 400 for regular or 700 for bold.
          title: Weight
      title: BrandKitFontRole
      type: object
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: HeyGen API key. Obtain from your HeyGen dashboard.
    BearerAuth:
      type: http
      scheme: bearer
      description: OAuth2 bearer token.

````