Skip to main content
A brand kit is a saved set of brand colors, fonts, and logos. Pass its brand_kit_id to the Video Agent and the agent applies it to everything it builds — scene backgrounds, text treatments, chart palettes, and logo placement — so output ships on-brand without describing your brand in the prompt. You can build a kit two ways: author it in the HeyGen app under Brand Kit, or import one from a public website over the API. Either way you end up with a brand_kit_id, and a kit created over the API stays editable in the app. A brand kit governs how a video looks. To control how your terms are spoken, pair it with a brand glossary on the endpoints that accept one — see On Brand.

Import a kit from a website

POST /v3/brand-kits visits a public URL, imports the logos, colors, and font files it finds there, and assembles them into a kit. This is the path to on-brand output for a workspace that has never opened the HeyGen app — onboard a customer by their own domain and generate their first branded video in the same run.
By calling this endpoint you confirm you have the rights and licenses necessary to upload, store, and use the imported assets in HeyGen.
Send an Idempotency-Key header so a retry is free: a repeat within 24 hours replays the original response instead of starting a second import of the same site. A retry that arrives while the first request is still in flight gets a 409 with code request_in_progress — wait a moment and try again. 201 comes back as soon as the kit record exists, before any asset has been imported:
The brand_kit_id is usable immediately, including on a Video Agent request. The assets behind it are gathered in the background.

Read a kit and wait for the import

GET /v3/brand-kits/{brand_kit_id} returns one kit with its colors, logos, and fonts, and which of them plays which role. After an import, poll it every 2 to 5 seconds until status is completed and read the palette only then. A website import usually settles in under two minutes; fonts are typically the last thing to land, so a kit that already has colors and a logo may still be loading.

Reading roles safely

Two habits keep a kit reader robust once a human starts editing the kit in the app:
  • A role can name a color outside colors. The palette lists the brand’s core swatches, while a role such as tertiary may point at a supporting surface color that isn’t one of them. Read color_roles for roles and colors for the palette rather than deriving one from the other.
  • A role can name an asset that no longer exists. Deleting a logo or font leaves the role that referenced it in place, so look the logo_id or font_id up in logos or fonts and handle the miss instead of assuming the lookup succeeds.
Both collections and the role fields are provisional while status is loading, which is the other reason to wait for completed. status is error when the import failed. The kit still exists and keeps whatever was assembled before the failure, so it remains usable — check colors, logos, and fonts to see what made it through, and fill the gaps in the HeyGen app. completed means the import is done, not that the kit is frozen.

List your brand kits

GET /v3/brand-kits returns the kits available in the authenticated workspace — the endpoint to reach for when you need an ID for a kit somebody else created in the app.
The listing is a summary: it carries logo_url for the primary logo and the color list, but not fonts or role assignments. Read a kit by ID when you need those.
logo_url is null when a kit defines colors and fonts but no logo, which is common — treat it as optional rather than assuming a logo is present.

Apply a brand kit to a video

Pass brand_kit_id when you create the session. It works in both generate and chat modes.

Switch brands mid-session

In an interactive session, brand_kit_id is also accepted on each follow-up message, so you can re-brand without starting over — useful when producing the same video for multiple brands or sub-brands.

Brand kits and styles

brand_kit_id and style_id are independent and can be combined:
  • style_id picks a curated visual template — scene layout, pacing, overall aesthetic. See Styles & References.
  • brand_kit_id supplies your colors, fonts, and logo.
Use a style for the look of the video and a brand kit to make that look yours.

Errors

An unknown or inaccessible brand_kit_id on a Video Agent request is rejected when the request is made, rather than failing partway through the render:
Brand kits are scoped to the authenticated workspace. If you get this error with an ID that exists, confirm the API key belongs to the same workspace that owns the brand kit.