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.
API reference: Create Brand Kit · Get Brand Kit · List Brand Kits · Create Session · Send Message
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:
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 astertiarymay point at a supporting surface color that isn’t one of them. Readcolor_rolesfor roles andcolorsfor 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_idorfont_idup inlogosorfontsand handle the miss instead of assuming the lookup succeeds.
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.
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
Passbrand_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_idpicks a curated visual template — scene layout, pacing, overall aesthetic. See Styles & References.brand_kit_idsupplies your colors, fonts, and logo.
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:

