Kenso

Translations

The Translations endpoints of the Kenso API.

AI1 endpointKen-Version: 2026-11-02AuthenticationWorkspacesErrors

Translate plain text into one language

POST/v1/translationstranslations.create

Needs the multilingual_outreach feature on your workspace. Until it is on, calls answer 404.

Try it on developer.ken.so

text (required, at most 8,000 characters) is plain text; the result keeps its line breaks, names, links, numbers and {placeholders}. targetLanguage is a two-letter ISO 639-1 code, such as en. messageId is optional: an email msg_ id of the workspace caches the result on that message, so the next call for the same language answers from it with no model call; another workspace's email is 404; a LinkedIn msg_ id is accepted and not cached. Answers { text, sourceLanguage }, where sourceLanguage is the input's ISO 639-1 code or und. A failed model call is 503 "Couldn't translate". Requires inbox view and Ask. Each call takes one unit of the workspace's aiTranslations quota (20 a minute, 500 a day): past it, 429 quota_exceeded with Retry-After.

Parameters

Name
In
Type
Required
Description
Ken-Version
In: header
string, one of: 2026-11-02, 1.1
required
The API version: a dated version (YYYY-MM-DD), or 1.1, another name for the first dated version. Without it the request uses your API key's pinned version; an unpinned key reaches the legacy shape of the same path. 1.0 selects the legacy shape explicitly.
X-Ken-Workspace-Id
In: header
integer (int64)
optional
Workspace to act in. Required when your credential can reach more than one workspace (otherwise 400 workspace_required).

Request body

application/json, optional.

Field
Type
Required
Description
text
string
optional
Plain text to translate, at most 8,000 characters. Line breaks are kept.
targetLanguage
string
optional
Lowercase ISO 639-1 code of the language to translate into, such as en.
messageId
string
optional
Optional msg_ id of the message the text comes from. An email message caches the result on itself, so the next call for the same language is answered from it; a LinkedIn message is accepted and not cached.

Response 200

data is a TranslationModel.

Field
Type
Description
text
string
The translated plain text, with the input's line breaks.
sourceLanguage
string
ISO 639-1 code of the input text, or und when the model named none.
Request
curl -X POST "https://api.ken.so/v1/translations" \
  -H "Authorization: Bearer $KEN_API_KEY" \
  -H "Ken-Version: 2026-11-02" \
  -H "X-Ken-Workspace-Id: $KEN_WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
  "text": "string",
  "targetLanguage": "string",
  "messageId": "msg_ZW1haWw6NDAyMjg0LjJAZXhhbXBsZS5jb20"
}'
Response 200
{
  "success": true,
  "data": {
    "text": "string",
    "sourceLanguage": "string"
  }
}