Translation keys are the core data in Comvi. Each key belongs to a project and namespace, and holds translation values for each locale. This API lets you list, create, update, and delete keys and their values.
Retrieve translation keys for a project with cursor-based pagination and filtering.
GET /api/v1/projects/:projectId/keys
Parameter Type Required Description projectIdintegerYes Project ID
Parameter Type Required Description cursorstringNo Cursor from the previous response’s nextCursor limitintegerNo Items per page (1-100, default: 50) searchstringNo Search by key name namespaceIdsinteger[]No Filter by namespace IDs statusesstring[]No Filter by translation status: translated, not_reviewed, not_translated localeCodesstring[]No Filter by locale codes sortBystringNo Sort field: key, updatedAt, createdAt sortOrderstringNo Sort direction: asc, desc
-H " X-API-Key: tlk_your_api_key " \
" https://api.comvi.io/api/v1/projects/1/keys?limit=20&search=welcome&sortBy=key&sortOrder=asc "
" key " : " welcome.message " ,
" description " : " Main welcome message on the homepage " ,
" value " : " Welcome to our app! " ,
" createdAt " : " 2025-01-15T10:30:00.000Z " ,
" updatedAt " : " 2025-01-15T10:30:00.000Z " ,
" value " : " Ласкаво просимо! " ,
" createdAt " : " 2025-01-15T11:00:00.000Z " ,
" updatedAt " : " 2025-01-15T11:00:00.000Z " ,
" createdAt " : " 2025-01-15T10:30:00.000Z " ,
" updatedAt " : " 2025-01-15T11:00:00.000Z "
" nextCursor " : " eyJpZCI6NDN9 " ,
Status Error Description 401UNAUTHORIZEDMissing or invalid authentication 403FORBIDDENNo permission to view translations in this project
Retrieve a single translation key with all its locale values.
GET /api/v1/projects/:projectId/keys/:keyId
Parameter Type Required Description projectIdintegerYes Project ID keyIdintegerYes Translation key ID
-H " X-API-Key: tlk_your_api_key " \
https://api.comvi.io/api/v1/projects/1/keys/42
" key " : " welcome.message " ,
" description " : " Main welcome message on the homepage " ,
" value " : " Welcome to our app! " ,
" createdAt " : " 2025-01-15T10:30:00.000Z " ,
" updatedAt " : " 2025-01-15T10:30:00.000Z " ,
" createdAt " : " 2025-01-15T10:30:00.000Z " ,
" updatedAt " : " 2025-01-15T10:30:00.000Z "
Status Error Description 401UNAUTHORIZEDMissing or invalid authentication 403FORBIDDENNo permission to view this translation 404KEY_NOT_FOUNDTranslation key does not exist
Create a new translation key in a project. You can optionally include initial translation values for one or more locales.
POST /api/v1/projects/:projectId/keys
Parameter Type Required Description projectIdintegerYes Project ID
Field Type Required Description keystringYes Translation key name (1-255 characters) namespacestringNo Namespace name (uses default if omitted) namespaceIdintegerNo Namespace ID (alternative to namespace name) descriptionstringNo Description or context for translators (max 1000 characters) isPluralbooleanNo Whether this key uses ICU plural forms characterLimitintegerNo Maximum character count for translations translationsobjectNo Initial values keyed by locale code
Each entry is keyed by locale code and contains:
Field Type Required Description valuestringYes Translation text statusstringYes Status: translated, not_reviewed, not_translated
-H " X-API-Key: tlk_your_api_key " \
-H " Content-Type: application/json " \
"key": "welcome.message",
"description": "Main welcome message on the homepage",
"value": "Welcome to our app!",
"value": "Ласкаво просимо!",
https://api.comvi.io/api/v1/projects/1/keys
Returns 201 Created with the full translation key object (same shape as Get translation key ).
Status Error Description 400VALIDATION_ERRORInvalid request body 401UNAUTHORIZEDMissing or invalid authentication 403FORBIDDENNo permission to create translations 403LIMIT_EXCEEDEDTranslation key limit reached for the current plan 409KEY_ALREADY_EXISTSA key with this name already exists in the namespace
Update a translation key’s metadata. To update translation values, use the upsert translation value endpoint.
PATCH /api/v1/projects/:projectId/keys/:keyId
Parameter Type Required Description projectIdintegerYes Project ID keyIdintegerYes Translation key ID
Field Type Required Description keystringNo Updated key name (1-255 characters) namespaceIdintegerNo Move key to a different namespace descriptionstring|nullNo Updated description isPluralbooleanNo Whether this key uses ICU plural forms characterLimitinteger|nullNo Updated character limit
-H " X-API-Key: tlk_your_api_key " \
-H " Content-Type: application/json " \
"description": "Updated welcome message for the new homepage design",
https://api.comvi.io/api/v1/projects/1/keys/42
Returns the full updated translation key object.
Status Error Description 401UNAUTHORIZEDMissing or invalid authentication 403FORBIDDENNo permission to edit translations 404KEY_NOT_FOUNDTranslation key does not exist 409KEY_ALREADY_EXISTSA key with the new name already exists in the target namespace
Create or update a translation value for a specific key and locale. If a value already exists for the given locale, it is overwritten.
PUT /api/v1/projects/:projectId/keys/:key?namespace={namespace}
Parameter Type Required Description projectIdintegerYes Project ID keystringYes Translation key name (URL-encoded if it contains special characters)
Parameter Type Required Description namespacestringNo Namespace name (uses default if omitted)
Field Type Required Description localestringYes Locale code (e.g., en, uk) valuestringYes Translation text statusstringNo Status: translated, not_reviewed, not_translated
-H " X-API-Key: tlk_your_api_key " \
-H " Content-Type: application/json " \
"value": "Ласкаво просимо до нашого додатку!",
" https://api.comvi.io/api/v1/projects/1/keys/welcome.message?namespace=default "
" value " : " Ласкаво просимо до нашого додатку! " ,
" createdAt " : " 2025-01-15T11:00:00.000Z " ,
" updatedAt " : " 2025-01-16T09:15:00.000Z " ,
Status Error Description 401UNAUTHORIZEDMissing or invalid authentication 403FORBIDDENNo permission to edit translations 404KEY_NOT_FOUNDTranslation key does not exist
Soft-delete a translation key and all its values.
DELETE /api/v1/projects/:projectId/keys/:keyId
Parameter Type Required Description projectIdintegerYes Project ID keyIdintegerYes Translation key ID
-H " X-API-Key: tlk_your_api_key " \
https://api.comvi.io/api/v1/projects/1/keys/42
Returns 204 No Content with an empty body on success.
Status Error Description 401UNAUTHORIZEDMissing or invalid authentication 403FORBIDDENNo permission to delete translations 404KEY_NOT_FOUNDTranslation key does not exist
Change the review status of a specific translation value.
PUT /api/v1/projects/:projectId/translation/:translationId/status
Parameter Type Required Description projectIdintegerYes Project ID translationIdintegerYes Translation value ID
Field Type Required Description statusstringYes New status: translated, not_reviewed, not_translated
-H " X-API-Key: tlk_your_api_key " \
-H " Content-Type: application/json " \
-d ' {"status": "translated"} ' \
https://api.comvi.io/api/v1/projects/1/translation/102/status
" value " : " Ласкаво просимо! " ,
" createdAt " : " 2025-01-15T11:00:00.000Z " ,
" updatedAt " : " 2025-01-16T14:20:00.000Z " ,
" reviewedAt " : " 2025-01-16T14:20:00.000Z "
Perform operations on multiple translation keys at once. All batch endpoints are under the /keys/batch prefix.
Delete multiple translation keys in a single request.
POST /api/v1/projects/:projectId/keys/batch/delete
Field Type Required Description keyIdsinteger[]Yes Array of key IDs to delete (at least 1)
-H " X-API-Key: tlk_your_api_key " \
-H " Content-Type: application/json " \
-d ' {"keyIds": [42, 43, 44]} ' \
https://api.comvi.io/api/v1/projects/1/keys/batch/delete
Update the translation status for multiple keys at once for a specific locale.
POST /api/v1/projects/:projectId/keys/batch/status
Field Type Required Description keyIdsinteger[]Yes Array of key IDs localeCodestringYes Locale code to update statusstringYes New status: translated, not_reviewed, not_translated
Move multiple keys to a different namespace.
POST /api/v1/projects/:projectId/keys/batch/namespace
Field Type Required Description keyIdsinteger[]Yes Array of key IDs targetNamespaceIdintegerYes Destination namespace ID
Copy translation values from one locale to another for multiple keys.
POST /api/v1/projects/:projectId/keys/batch/copy
Field Type Required Description keyIdsinteger[]Yes Array of key IDs fromLocaleCodestringYes Source locale code toLocaleCodestringYes Target locale code overwriteExistingbooleanNo Overwrite existing translations (default: false)
Clear (remove) translation values for multiple keys and locales.
POST /api/v1/projects/:projectId/keys/batch/clear
Field Type Required Description keyIdsinteger[]Yes Array of key IDs localeCodesstring[]Yes Locale codes to clear