Skip to content

Glossaries API

The Glossaries API lets you manage terminology databases for your organization. Glossaries enforce consistent translation of brand names, technical terms, and product-specific vocabulary across all your projects.


Each term in a glossary has a type that controls how it is handled:

TypeDescription
preferredThe recommended translation for this term
admittedAn acceptable alternative translation
deprecatedAn outdated term that should be replaced
forbiddenA term that must not be used in translations

Returns all glossaries in an organization.

GET /api/v1/organizations/:orgId/glossaries

Path parameters

ParameterTypeRequiredDescription
orgIdintegerYesOrganization ID

Example request

Terminal window
curl -X GET \
-H "X-API-Key: tlk_your_api_key" \
https://api.comvi.io/api/v1/organizations/1/glossaries

Example response

[
{
"id": 1,
"organizationId": 1,
"sourceLocaleId": 10,
"name": "Product Terminology",
"description": "Official product names and technical terms",
"isDefault": true,
"type": "organization",
"createdAt": "2025-01-15T10:00:00Z",
"updatedAt": "2025-03-20T14:00:00Z"
}
]

Response fields

FieldTypeDescription
idintegerGlossary ID
organizationIdintegerOrganization this glossary belongs to
sourceLocaleIdintegerSource language locale ID
namestringGlossary name
descriptionstring | nullOptional description
isDefaultbooleanWhether this is the default glossary for the organization
typestring"organization" or "project" scope
createdAtstringISO 8601 creation timestamp
updatedAtstringISO 8601 last update timestamp

Create a new terminology glossary in an organization.

POST /api/v1/organizations/:orgId/glossaries

Path parameters

ParameterTypeRequiredDescription
orgIdintegerYesOrganization ID

Request body

FieldTypeRequiredDescription
namestringYesGlossary name
descriptionstringNoOptional description
sourceLocaleIdintegerYesSource language locale ID

Example request

Terminal window
curl -X POST \
-H "X-API-Key: tlk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Legal Terms",
"description": "Legal and compliance terminology",
"sourceLocaleId": 10
}' \
https://api.comvi.io/api/v1/organizations/1/glossaries

Example response

{
"id": 2,
"organizationId": 1,
"sourceLocaleId": 10,
"name": "Legal Terms",
"description": "Legal and compliance terminology",
"isDefault": false,
"type": "organization",
"createdAt": "2025-03-25T12:00:00Z",
"updatedAt": "2025-03-25T12:00:00Z"
}

Retrieve a single glossary by ID.

GET /api/v1/organizations/:orgId/glossaries/:glossaryId

Path parameters

ParameterTypeRequiredDescription
orgIdintegerYesOrganization ID
glossaryIdintegerYesGlossary ID

Example request

Terminal window
curl -X GET \
-H "X-API-Key: tlk_your_api_key" \
https://api.comvi.io/api/v1/organizations/1/glossaries/1

Example response

Returns the same glossary object format as the Create glossary response.


Update a glossary’s name or description.

PATCH /api/v1/organizations/:orgId/glossaries/:glossaryId

Path parameters

ParameterTypeRequiredDescription
orgIdintegerYesOrganization ID
glossaryIdintegerYesGlossary ID

Request body

FieldTypeRequiredDescription
namestringNoUpdated name
descriptionstringNoUpdated description

Example request

Terminal window
curl -X PATCH \
-H "X-API-Key: tlk_your_api_key" \
-H "Content-Type: application/json" \
-d '{"name": "Product Terminology v2"}' \
https://api.comvi.io/api/v1/organizations/1/glossaries/1

Response

Returns the updated glossary object.


Permanently delete a glossary and all of its terms.

DELETE /api/v1/organizations/:orgId/glossaries/:glossaryId

Path parameters

ParameterTypeRequiredDescription
orgIdintegerYesOrganization ID
glossaryIdintegerYesGlossary ID

Example request

Terminal window
curl -X DELETE \
-H "X-API-Key: tlk_your_api_key" \
https://api.comvi.io/api/v1/organizations/1/glossaries/1

Response

Returns 204 No Content on success.


Returns paginated terms in a glossary, including their translations.

GET /api/v1/organizations/:orgId/glossaries/:glossaryId/terms

Path parameters

ParameterTypeRequiredDescription
orgIdintegerYesOrganization ID
glossaryIdintegerYesGlossary ID

Query parameters

ParameterTypeRequiredDescription
cursorstringNoPagination cursor from a previous response
limitintegerNoItems per page (1-100, default: 50)
searchstringNoSearch terms by text (max 255 characters)
termTypestringNoFilter by type: preferred, admitted, deprecated, forbidden

Example request

Terminal window
curl -X GET \
-H "X-API-Key: tlk_your_api_key" \
"https://api.comvi.io/api/v1/organizations/1/glossaries/1/terms?search=dashboard&limit=10"

Example response

{
"terms": [
{
"id": 101,
"conceptId": 50,
"term": "Dashboard",
"definition": "The main overview page of the application",
"termType": "preferred",
"partOfSpeech": "noun",
"gender": null,
"isCaseSensitive": true,
"isTranslatable": true,
"translations": [
{
"id": 201,
"localeId": 11,
"localeCode": "fr",
"localeName": "French",
"text": "Tableau de bord",
"termType": "preferred"
},
{
"id": 202,
"localeId": 12,
"localeCode": "de",
"localeName": "German",
"text": "Dashboard",
"termType": "preferred"
}
],
"createdAt": "2025-02-01T10:00:00Z",
"updatedAt": "2025-03-15T14:00:00Z"
}
],
"nextCursor": "eyJpZCI6MTAxfQ==",
"hasMore": true
}

Term fields

FieldTypeDescription
idintegerTerm ID
conceptIdintegerParent concept ID (groups related terms)
termstringSource text of the term
definitionstring | nullExplanation of the term’s meaning
termTypestringpreferred, admitted, deprecated, or forbidden
partOfSpeechstring | nullGrammatical category (e.g., noun, verb)
genderstring | nullGrammatical gender
isCaseSensitivebooleanWhether QA checks enforce exact case matching
isTranslatablebooleanIf false, the term should stay untranslated
translationsarrayTranslations of this term in target languages
createdAtstringISO 8601 creation timestamp
updatedAtstringISO 8601 last update timestamp

Add a new term to a glossary.

POST /api/v1/organizations/:orgId/glossaries/:glossaryId/terms

Path parameters

ParameterTypeRequiredDescription
orgIdintegerYesOrganization ID
glossaryIdintegerYesGlossary ID

Request body

FieldTypeRequiredDescription
termstringYesSource text (1-500 characters)
definitionstringNoTerm definition (up to 2000 characters)
termTypestringNopreferred (default), admitted, deprecated, forbidden
partOfSpeechstringNoGrammatical category (up to 50 characters)
genderstringNoGrammatical gender (up to 20 characters)
isCaseSensitivebooleanNoEnforce case matching in QA (default: false)
isTranslatablebooleanNoWhether the term should be translated (default: true)

Example request

Terminal window
curl -X POST \
-H "X-API-Key: tlk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"term": "Comvi",
"definition": "The product name, should never be translated",
"termType": "preferred",
"isCaseSensitive": true,
"isTranslatable": false
}' \
https://api.comvi.io/api/v1/organizations/1/glossaries/1/terms

Example response

{
"id": 102,
"conceptId": 51,
"term": "Comvi",
"definition": "The product name, should never be translated",
"termType": "preferred",
"partOfSpeech": null,
"gender": null,
"isCaseSensitive": true,
"isTranslatable": false,
"translations": [],
"createdAt": "2025-03-25T12:00:00Z",
"updatedAt": "2025-03-25T12:00:00Z"
}

Add a translation for a term in a target language.

POST /api/v1/organizations/:orgId/glossaries/:glossaryId/terms/:termId/translations

Path parameters

ParameterTypeRequiredDescription
orgIdintegerYesOrganization ID
glossaryIdintegerYesGlossary ID
termIdintegerYesTerm ID

Request body

FieldTypeRequiredDescription
localeIdintegerYesTarget language locale ID
textstringYesTranslated text (1-1000 characters)
termTypestringNoTerm type for this translation (preferred, admitted, deprecated, forbidden)

Example request

Terminal window
curl -X POST \
-H "X-API-Key: tlk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"localeId": 11,
"text": "Tableau de bord",
"termType": "preferred"
}' \
https://api.comvi.io/api/v1/organizations/1/glossaries/1/terms/101/translations

StatusError CodeDescription
403FORBIDDENMissing glossary management permission
404NOT_FOUNDGlossary or term not found
400VALIDATION_ERRORInvalid input (e.g., term text too long)