---
title: "Update Brand Glossary"
method: PATCH
path: "/v3/brand-glossaries/{brand_glossary_id}"
tags: ["Brand"]
---

# Update Brand Glossary

`PATCH /v3/brand-glossaries/{brand_glossary_id}`

## Request

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

Updates a brand glossary. A field you omit is left untouched, a list you send replaces the existing list in full across all languages, and an empty array removes every entry. Read the glossary and preserve every entry's `pronunciation_language` or `target_language` when sending an edited list; omitting a language field means all languages. A duplicate name or term/rule-type/language combination returns 409. A concurrent-edit conflict also returns 409 without saving the update; fetch the latest glossary and reapply your changes. Clients do not supply revisions. Tone settings are never modified by this endpoint. Temporary access-evaluation failures return 503; retry the request.

## Path parameters

- `brand_glossary_id` string, required

## Request body

- UpdateBrandGlossaryRequest: Request body for PATCH /v3/brand-glossaries/{brand_glossary_id}. Each field is replaced independently: a field you omit is left untouched, a field you send replaces that value across all languages, and an empty array clears that list. To add a single entry, read the glossary, append to the list, and send the whole list back with every language field preserved.
  - `name` string: New display name. Surrounding whitespace is removed, and the trimmed name must be 1-64 characters and unique within your workspace, compared without regard to case. Omit to keep the current name.
  - `terms` BrandGlossaryTermWrite[]: Replacement term list across all languages. Preserve every entry's pronunciation_language when editing. Omit to leave the existing terms untouched, or pass an empty array to remove them all.
    - `term` string, required: The term as written in a script, matched case-insensitively. Surrounding whitespace is removed and the trimmed value must be non-empty.
    - `pronunciation` string, required: Respelling handed to the speech synthesizer in place of `term` (for example 'hey-jen' for 'HeyGen'). Affects generated audio only — captions and subtitles keep the original `term` spelling. Surrounding whitespace is removed and the trimmed value must be non-empty.
    - `pronunciation_language` union: Language in which this pronunciation applies. Omit or use scope 'all' for all languages; null is invalid. Use scope 'specific' with a base language code such as 'fr', not a locale such as 'fr-FR'. A language-specific rule overrides an all-languages rule. Responses omit this field for all-languages rules.
      - AllBrandGlossaryLanguages: Apply the rule in every language.
        - `scope` 'all', required: Apply this rule in every language.
      - SpecificBrandGlossaryLanguage: Apply the rule in one language.
        - `scope` 'specific', required: Apply this rule only in the specified language.
        - `code` string, required: Language code, such as 'en' or 'fr'. Locale codes such as 'en-US' are not accepted.
  - `do_not_translate_terms` DoNotTranslateEntryWrite[]: Replacement Don't Translate list. Omit to leave the existing entries untouched, or pass an empty array to remove them all.
    - `term` string, required: A term to keep untranslated. When this glossary is used by a translation feature, each occurrence of the term — matched case-insensitively — is kept untranslated in every target language. Surrounding whitespace is removed and the trimmed value must be non-empty.
  - `forced_translations` ForcedTranslationEntryWrite[]: Replacement Force Translate list across all languages. Preserve every entry's target_language when editing. Omit to leave the existing entries untouched, or pass an empty array to remove them all. Don't Translate takes precedence for overlapping terms without deleting their Force Translate rules.
    - `term` string, required: The term to replace, matched in the source text case-insensitively. Surrounding whitespace is removed and the trimmed value must be non-empty.
    - `translation` string, required: The exact text used in place of `term` in the translated output for the selected target language scope. Inserted verbatim: grammatical inflection (case, gender, number) is not adapted to the surrounding sentence. Surrounding whitespace is removed and the trimmed value must be non-empty.
    - `target_language` union: Target language in which this translation applies. Omit or use scope 'all' for all languages; null is invalid. Use scope 'specific' with a base language code such as 'fr', not a locale such as 'fr-FR'. A language-specific rule overrides an all-languages rule. Responses omit this field for all-languages rules.
      - AllBrandGlossaryLanguages: Apply the rule in every language.
        - `scope` 'all', required: Apply this rule in every language.
      - SpecificBrandGlossaryLanguage: Apply the rule in one language.
        - `scope` 'specific', required: Apply this rule only in the specified language.
        - `code` string, required: Language code, such as 'en' or 'fr'. Locale codes such as 'en-US' are not accepted.

## Response `200`

Successful response

- object
  - `data` BrandGlossaryDetail: A single brand glossary with its full term list (GET /v3/brand-glossaries/{id}).
    - `brand_glossary_id` string, required: Unique brand glossary ID. Pass it as `brand_glossary_id` when creating a video or translation to apply this glossary.
    - `name` string, required: Display name of the brand glossary.
    - `created_at` string, date-time, required: Creation timestamp (UTC).
    - `updated_at` string, date-time, required: Last update timestamp (UTC).
    - `terms` BrandGlossaryTerm[], required: Every term mapping in this glossary. Empty when the glossary has no terms yet, in which case applying it has no effect.
      - `term` string, required: The term as written in a script, matched case-insensitively.
      - `pronunciation` string, required: Respelling handed to the speech synthesizer in place of `term` (for example 'hey-jen' for 'HeyGen'). Affects generated audio only — captions and subtitles keep the original `term` spelling.
      - `pronunciation_language` union: Language in which this pronunciation applies. Omit or use scope 'all' for all languages; null is invalid. Use scope 'specific' with a base language code such as 'fr', not a locale such as 'fr-FR'. A language-specific rule overrides an all-languages rule. Responses omit this field for all-languages rules.
        - AllBrandGlossaryLanguages: Apply the rule in every language.
          - `scope` 'all', required: Apply this rule in every language.
        - SpecificBrandGlossaryLanguage: Apply the rule in one language.
          - `scope` 'specific', required: Apply this rule only in the specified language.
          - `code` string, required: Language code, such as 'en' or 'fr'. Locale codes such as 'en-US' are not accepted.
    - `do_not_translate_terms` DoNotTranslateEntry[]: Don't Translate rules in this glossary. Omitted when it has none.
      - `term` string, required: A term to keep untranslated. When this glossary is used by a translation feature, each occurrence of the term — matched case-insensitively — is kept untranslated in every target language.
    - `forced_translations` ForcedTranslationEntry[]: Force Translate rules in this glossary. Omitted when it has none. If a term also appears in `do_not_translate_terms`, Don't Translate takes precedence without deleting its Force Translate rules.
      - `term` string, required: The term to replace, matched in the source text case-insensitively.
      - `translation` string, required: The exact text used in place of `term` in the translated output for the selected target language scope. Inserted verbatim: grammatical inflection (case, gender, number) is not adapted to the surrounding sentence.
      - `target_language` union: Target language in which this translation applies. Omit or use scope 'all' for all languages; null is invalid. Use scope 'specific' with a base language code such as 'fr', not a locale such as 'fr-FR'. A language-specific rule overrides an all-languages rule. Responses omit this field for all-languages rules.
        - AllBrandGlossaryLanguages: Apply the rule in every language.
          - `scope` 'all', required: Apply this rule in every language.
        - SpecificBrandGlossaryLanguage: Apply the rule in one language.
          - `scope` 'specific', required: Apply this rule only in the specified language.
          - `code` string, required: Language code, such as 'en' or 'fr'. Locale codes such as 'en-US' are not accepted.

## Other responses

- `400`: Invalid request parameters
- `401`: Authentication failed
- `404`: Resource not found
- `409`: Conflict
- `429`: Rate limit exceeded
- `503`: Temporarily unavailable — the request did not complete and is safe to retry.

## Changes

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

[Operation history](https://skmtc.dev/heygen/apis/heygen-external-api/changes/v3/brand-glossaries/:brand_glossary_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)
