# General Translation Platform: Upsert glossary terms
URL: https://generaltranslation.com/en-US/docs/platform/openapi/reference/context-management/upsert-glossary.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Creates or updates 1–100 terms ({ entries: [...] }; send one term as a one-item array), matched by keyword, in one atomic batch. An absent field keeps its stored value. null clears a nullable field or removes a map entry; other fields reject null. In batches and imports, items match stored items by natural key, stored items absent from the batch are untouched, and nothing else is deleted. A blank CSV cell counts as absent. Repeating a keyword within one batch rejects the whole batch (400). Requires org:context:write. API reference for Upsert glossary terms.

## Endpoint

`POST https://api.gtx.dev/v2/context-groups/{groupId}/glossary`

**Operation ID:** `upsertContextGlossary`

**Tags:** `Context Management`

**Summary:** Upsert glossary terms

Creates or updates 1–100 terms (`{ entries: [...] }`; send one term as a one-item array), matched by keyword, in one atomic batch. An absent field keeps its stored value. `null` clears a nullable field or removes a map entry; other fields reject `null`. In batches and imports, items match stored items by natural key, stored items absent from the batch are untouched, and nothing else is deleted. A blank CSV cell counts as absent. Repeating a keyword within one batch rejects the whole batch (400). Requires `org:context:write`.

Authentication: required. Send an API key in the `Authorization: Bearer <key>` header when authenticating.

### Parameters

- `groupId` (path, string, required): Context group ID.
- `gt-api-version` (header, "2025-01-01.v0" | "2025-11-03.v1" | "2026-02-18.v1" | "2026-03-06.v1", optional): API contract version. Defaults to the oldest supported version.

### Request body (required)

Body (`application/json`, object):
- `entries` (object[], required): 1–100 terms, matched by keyword; a keyword may appear once.
  - `keyword` (string, required)
  - `userDefined` (boolean)
  - `definition` (string | null): null clears the definition.
  - `translations` (object): Translations by locale; null for a locale deletes its translation.
    - `<key>` (object | null, dynamic key)
      - `translation` (string, required)
      - `userDefined` (boolean)

### Responses

**200**: Glossary terms written
Response body (`application/json`, object):
- `committed` (true, required)
- `counts` (object, required)
  - `created` (integer, required)
  - `updated` (integer, required)
  - `unchanged` (integer, required)

**400**: Request error
Response body (`application/json`, object):
- `error` (string, required)

Response body (`text/html`, string):

**401**: Request error
Response body (`application/json`, object):
- `error` (string, required)

Response body (`text/html`, string):

**403**: Request error
Response body (`application/json`, object):
- `error` (string, required)

Response body (`text/html`, string):

**404**: Request error
Response body (`application/json`, object):
- `error` (string, required)

Response body (`text/html`, string):

**413**: Request error
Response body (`application/json`, object):
- `error` (string, required)

Response body (`text/html`, string):

**429**: Request error
Response body (`application/json`, object):
- `error` (string, required)

Response body (`text/html`, string):

**500**: Request error
Response body (`application/json`, object):
- `error` (string, required)

Response body (`text/html`, string):

Complete OpenAPI 3.1 specification: https://generaltranslation.com/openapi.yaml

OpenAPI schema: [openapi.json](https://generaltranslation.com/openapi.json)

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
