Skip to content

Projects API

Projects are the top-level container for your translations. Each project belongs to an organization and contains translation keys, locales, and namespaces.

Retrieve all projects for an organization. Results are paginated using cursor-based pagination.

GET /api/v1/projects?organizationId={organizationId}
ParameterTypeRequiredDescription
organizationIdintegerYesOrganization ID to list projects for
cursorintegerNoCursor from previous response’s nextCursor
limitintegerNoItems per page (1-100, default: 50)
Terminal window
curl -X GET \
-H "X-API-Key: tlk_your_api_key" \
"https://api.comvi.io/api/v1/projects?organizationId=1&limit=10"
{
"projects": [
{
"id": 1,
"organizationId": 1,
"name": "my-web-app",
"description": "Main web application translations",
"sourceLocale": "en",
"locales": [
{
"id": 1,
"code": "en",
"name": "English",
"nativeName": "English",
"isCustom": false,
"flagEmoji": "🇺🇸"
},
{
"id": 2,
"code": "uk",
"name": "Ukrainian",
"nativeName": "Українська",
"isCustom": false,
"flagEmoji": "🇺🇦"
}
],
"namespaces": [
{
"id": 1,
"projectId": 1,
"namespace": "default",
"description": null,
"isDefault": true,
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}
]
}
],
"nextCursor": 2,
"hasMore": true
}
StatusErrorDescription
401UNAUTHORIZEDMissing or invalid authentication
403FORBIDDENNo access to the specified organization

Retrieve a single project by its ID. The response includes the project’s locales, namespaces, and settings.

GET /api/v1/projects/:id
ParameterTypeRequiredDescription
idintegerYesProject ID
Terminal window
curl -X GET \
-H "X-API-Key: tlk_your_api_key" \
https://api.comvi.io/api/v1/projects/1
{
"id": 1,
"organizationId": 1,
"name": "my-web-app",
"description": "Main web application translations",
"sourceLocale": "en",
"locales": [
{
"id": 1,
"code": "en",
"name": "English",
"nativeName": "English",
"isCustom": false,
"flagEmoji": "🇺🇸"
}
],
"namespaces": [
{
"id": 1,
"projectId": 1,
"namespace": "default",
"description": null,
"isDefault": true,
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}
],
"mtSettings": {
"enabledProviders": ["google", "deepl"],
"primaryProvider": "google",
"autoApply": false,
"aiTranslationInstructions": null,
"aiModels": null
},
"cdnSettings": {
"enabled": true,
"locales": ["en", "uk"],
"namespaces": ["default"],
"statuses": ["translated"],
"format": "json",
"baseUrl": null
}
}
StatusErrorDescription
401UNAUTHORIZEDMissing or invalid authentication
403FORBIDDENNo permission to view this project
404PROJECT_NOT_FOUNDProject does not exist

Create a new translation project in an organization. The caller must have project.create permission in the organization.

POST /api/v1/projects
FieldTypeRequiredDescription
organizationIdintegerYesOrganization to create the project in
namestringYesProject name (1-255 characters)
descriptionstringNoProject description (max 1000 characters)
sourceLocaleCodestringYesSource language code (e.g., en, uk)
Terminal window
curl -X POST \
-H "X-API-Key: tlk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"organizationId": 1,
"name": "my-web-app",
"description": "Main web application translations",
"sourceLocaleCode": "en"
}' \
https://api.comvi.io/api/v1/projects
{
"id": 1,
"organizationId": 1,
"name": "my-web-app",
"description": "Main web application translations",
"sourceLocale": "en",
"locales": [
{
"id": 1,
"code": "en",
"name": "English",
"nativeName": "English",
"isCustom": false,
"flagEmoji": "🇺🇸"
}
],
"namespaces": [
{
"id": 1,
"projectId": 1,
"namespace": "default",
"description": null,
"isDefault": true,
"createdAt": "2025-01-15T10:30:00.000Z",
"updatedAt": "2025-01-15T10:30:00.000Z"
}
]
}
StatusErrorDescription
400LOCALE_NOT_FOUNDThe sourceLocaleCode is not a valid locale
401UNAUTHORIZEDMissing or invalid authentication
403FORBIDDENNo permission to create projects in this organization
403LIMIT_EXCEEDEDProject limit reached for the current plan

Update a project’s name, description, source locale, machine translation settings, or CDN settings. You only need to include the fields you want to change.

PATCH /api/v1/projects/:id
ParameterTypeRequiredDescription
idintegerYesProject ID
FieldTypeRequiredDescription
namestringNoUpdated project name (1-255 characters)
descriptionstringNoUpdated description (max 1000 characters)
sourceLocaleCodestringNoUpdated source language code
mtSettingsobjectNoMachine translation configuration
cdnSettingsobjectNoCDN publishing configuration
FieldTypeDescription
enabledProvidersstring[]Enabled MT providers: google, deepl, aws, azure, openai, anthropic
primaryProviderstring|nullDefault MT provider
autoApplybooleanAutomatically apply MT suggestions
aiTranslationInstructionsstring|nullCustom instructions for AI providers
aiModelsobject|nullCustom AI models per provider (e.g., {"openai": "gpt-4o"})
FieldTypeDescription
enabledbooleanEnable CDN publishing
localesstring[]Locale codes to include in CDN
namespacesstring[]Namespaces to include in CDN
statusesstring[]Translation statuses to publish: translated, not_reviewed, not_translated
formatstringOutput format (currently json)
Terminal window
curl -X PATCH \
-H "X-API-Key: tlk_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "my-web-app-v2",
"mtSettings": {
"enabledProviders": ["google", "deepl"],
"primaryProvider": "google",
"autoApply": false
}
}' \
https://api.comvi.io/api/v1/projects/1

Returns the full updated project object (same shape as Get project).

StatusErrorDescription
401UNAUTHORIZEDMissing or invalid authentication
403FORBIDDENNo permission to edit this project
404PROJECT_NOT_FOUNDProject does not exist
404LOCALE_NOT_FOUNDThe specified source locale code is invalid

Soft-delete a project. The project and its data are retained but no longer accessible.

DELETE /api/v1/projects/:id
ParameterTypeRequiredDescription
idintegerYesProject ID
Terminal window
curl -X DELETE \
-H "X-API-Key: tlk_your_api_key" \
https://api.comvi.io/api/v1/projects/1

Returns 204 No Content with an empty body on success.

StatusErrorDescription
401UNAUTHORIZEDMissing or invalid authentication
403FORBIDDENNo permission to delete this project
404PROJECT_NOT_FOUNDProject does not exist

Retrieve translation statistics for all projects in an organization.

GET /api/v1/projects/stats?organizationId={organizationId}
ParameterTypeRequiredDescription
organizationIdintegerYesOrganization ID
Terminal window
curl -X GET \
-H "X-API-Key: tlk_your_api_key" \
"https://api.comvi.io/api/v1/projects/stats?organizationId=1"
[
{
"projectId": 1,
"keyCount": 250,
"translatedPct": 85.5,
"notReviewedPct": 10.2,
"notTranslatedPct": 4.3
}
]