> ## 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.

# On Brand

> Make HeyGen output match your brand over the API. A brand kit carries your colors, fonts, and logo; a brand glossary controls how your custom terms are spoken and translated. Learn which endpoints accept each.

<img className="w-full h-44 object-cover rounded-xl" src="https://mintcdn.com/heygen-1fa696a7/hfMXXwJzjE7vBSYZ/images/theme/research.webp?fit=max&auto=format&n=hfMXXwJzjE7vBSYZ&q=85&s=3e4c2594813dcfd56985f3d63e3ba321" alt="" noZoom width="1400" height="788" data-path="images/theme/research.webp" />

Two workspace records control how on-brand a generated video is, and they cover different halves of the problem:

* **[Brand kit](/docs/brand-kits)** — how the video **looks**. Your colors, fonts, and logo, applied to scene backgrounds, text treatments, chart palettes, and logo placement.
* **[Brand glossary](/docs/brand-glossary)** — how the video **sounds** and **reads**. A list of your custom terms with the pronunciation each one should get, so `HeyGen` is spoken `hey-jen` and product names survive translation intact.

Both are authored in the HeyGen web app under **Brand Kit** and are **read-only over the API** — you list them, get their IDs, and pass those IDs when you create a video. There is no endpoint that creates or edits either one.

<Info>
  **API reference:** [List Brand Kits](/reference/list-brand-kits) · [List Brand Glossaries](/reference/list-brand-glossaries) · [Get Brand Glossary](/reference/get-brand-glossary)
</Info>

## Which endpoint takes which

The two IDs go to different endpoints, and no endpoint accepts both. Video Agent is the only consumer of a brand kit; everything that turns a written script into speech takes a glossary instead.

| Endpoint                                                                                     | Field               | What it does                                                                                                                                                                                                                   |
| -------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [`POST /v3/video-agents`](/reference/create-video-agent-session)                             | `brand_kit_id`      | Applies your colors, fonts, and logo to every scene the agent composes.                                                                                                                                                        |
| [`POST /v3/video-agents/{session_id}`](/reference/send-message-or-request-revision)          | `brand_kit_id`      | Re-brands an [interactive session](/docs/interactive-sessions) on a follow-up message, without starting over.                                                                                                                  |
| [`POST /v3/videos`](/reference/create-video) with `"type"` of `studio`, `avatar`, or `image` | `brand_glossary_id` | Sets pronunciation wherever audio is synthesized from a `script`: every [Studio](/studio-videos) scene, or the single scene of an `avatar` or `image` video. Not accepted on `cinematic_avatar`, which has no script or voice. |
| [`POST /v3/videos/batches`](/reference/create-video-batch)                                   | `brand_glossary_id` | Same, set per item inside `videos`. Batch items are `avatar` or `image`; a `studio` item is rejected by this endpoint.                                                                                                         |
| [`POST /v3/templates/{template_id}`](/reference/generate-video-from-template)                | `brand_glossary_id` | Sets pronunciation in the speech generated for a [template](/templates).                                                                                                                                                       |
| [`POST /v3/video-translations`](/reference/create-video-translation)                         | `brand_glossary_id` | Fixes how your terms are carried into the [translated](/docs/video-translate) script.                                                                                                                                          |
| [`POST /v3/video-translations/batches`](/reference/create-video-translation-batch)           | `brand_glossary_id` | Same, set per item inside `video_translations`.                                                                                                                                                                                |
| [`POST /v3/video-translations/proofreads`](/reference/create-proofread-session)              | `brand_glossary_id` | Applies your terms to the editable subtitles a proofread session returns.                                                                                                                                                      |

A brand kit reaches a Studio or Templates video the other way around: build the look into the composition or the template itself, then use a glossary for the audio.

### Scope of each field

`brand_kit_id` and `brand_glossary_id` are both **global to the request** — one value per call, applied to everything it produces. In a translation batch or a video batch the glossary is per item, so a single batch can send different glossaries to different videos.

On `POST /v3/videos`, `brand_glossary_id` applies to the `studio`, `avatar`, and `image` composition types. It takes effect only where speech is synthesized from a `script`, so a caller-supplied `audio_url` or `audio_asset_id` is unaffected, and captions keep the original script wording either way. `cinematic_avatar` does not accept the field, because it has no script or voice: motion and speech are driven by the `prompt` and its reference assets.

## Both IDs are workspace-scoped

A brand kit or glossary is visible only to API keys belonging to the workspace that owns it. IDs are 32-character hex strings with no prefix:

```json theme={null}
{
  "brand_kit_id": "3f9a1c47b8e24d5fa0c61e8b7d24f6a1",
  "brand_glossary_id": "8c2d5e91a47b4f3c8d1e6a9b2f5c7d40"
}
```

An ID that does not exist in the caller's workspace is rejected when the request is made, so a bad ID costs you nothing — no video is created and no credits are consumed. If a valid-looking ID is rejected, confirm the API key belongs to the same workspace that owns the record.

## Combining brand with a style

For Video Agent, `brand_kit_id` and `style_id` are independent and compose: a [style](/docs/styles-and-references) picks the look — scene layout, pacing, aesthetic — and the brand kit makes that look yours. Use a style for the shape of the video and a brand kit to make it recognizably you.
