General Translation API
Translate content at runtime and queue files for translation.
Translate content at runtime and queue files for translation.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/general-translation:general-translation-translation-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: General Translation API
version: 2026-03-06.v1
description: 'Translate content and manage projects with the General Translation API at `https://api.gtx.dev`.
Authenticate with `Authorization: Bearer `. Each endpoint lists its required permissions. Project keys (`gtx-api-`) access one project; Organization keys (`gtx-org-`) access projects in one Organization.
For project-scoped requests, use the project ID in the path. If you also send `gt-project-id`, it must match. Without a project ID in the path, project keys use their own project; Organization keys require `gt-project-id`. Discovery endpoints need no project ID. Organization-scoped requests use the Organization ID in the path. You must have access to the selected project or Organization.'
contact:
name: General Translation Support
email: support@generaltranslation.com
url: https://generaltranslation.com
servers:
- url: https://api.gtx.dev
description: General Translation API
tags:
- name: Translation
description: Translate content, queue files for translation, and read translation job status.
paths:
/v2/project/jobs/info:
post:
operationId: getTranslationJobInfo
summary: Get translation job status
description: Get the status of one or more translation or context generation jobs.
security:
- BearerAuth: []
parameters:
- schema:
$ref: '#/components/schemas/ApiVersion'
required: false
description: API contract version. Defaults to the oldest supported version.
name: gt-api-version
in: header
- schema:
type: string
description: Target project ID when no project ID is present in the path. Project API keys default to their bound project. If supplied, the header must match both the path target and the key’s bound project.
required: false
description: Target project ID when no project ID is present in the path. Project API keys default to their bound project. If supplied, the header must match both the path target and the key’s bound project.
name: gt-project-id
in: header
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
jobIds:
type: array
items:
type: string
minLength: 1
minItems: 1
required:
- jobIds
responses:
'200':
description: Translation job statuses
content:
application/json:
schema:
type: array
items:
oneOf:
- type: object
properties:
status:
type: string
enum:
- queued
jobId:
type: string
required:
- status
- jobId
- type: object
properties:
status:
type: string
enum:
- processing
jobId:
type: string
required:
- status
- jobId
- type: object
properties:
status:
type: string
enum:
- failed
jobId:
type: string
error:
type: object
properties:
message:
type:
- string
- 'null'
required:
- message
required:
- status
- jobId
- error
- type: object
properties:
status:
type: string
enum:
- completed
jobId:
type: string
required:
- status
- jobId
- type: object
properties:
status:
type: string
enum:
- unknown
jobId:
type: string
required:
- status
- jobId
'400':
description: The request is malformed or failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'401':
description: Authentication is missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'403':
description: The caller is authenticated but not allowed to perform this operation or access the requested resource.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'404':
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'413':
description: The request, or the data it would return, exceeds a size or item limit.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'415':
description: The request body's Content-Type is missing or not supported. Send the body as application/json.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'429':
description: Too many requests. The rate limit was exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'500':
description: An unexpected server error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
tags:
- Translation
x-docs-slug: translation/job-status
/v2/project/translations/enqueue:
post:
operationId: enqueueFileTranslations
summary: Queue files for translation
description: Enqueue uploaded source files for background translation. Max 100 files per request. The response shape depends on the requested `gt-api-version`.
security:
- BearerAuth: []
parameters:
- schema:
$ref: '#/components/schemas/ApiVersion'
required: false
description: API contract version. Defaults to the oldest supported version.
name: gt-api-version
in: header
- schema:
type: string
description: Target project ID when no project ID is present in the path. Project API keys default to their bound project. If supplied, the header must match both the path target and the key’s bound project.
required: false
description: Target project ID when no project ID is present in the path. Project API keys default to their bound project. If supplied, the header must match both the path target and the key’s bound project.
name: gt-project-id
in: header
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
files:
type: array
items:
type: object
properties:
branchId:
type: string
minLength: 1
fileId:
type: string
minLength: 1
versionId:
type: string
minLength: 1
fileName:
type: string
transformFormat:
type: string
enum:
- GTJSON
- MDX
- JSON
- YAML
- MD
- TS
- JS
- HTML
- TXT
- PO
- POT
- TWILIO_CONTENT_JSON
- LOTTIE
- SVG
- XCSTRINGS
- DOT_STRINGS
- DOT_STRINGSDICT
- ANDROID_STRINGS
- SRT
- RESX
required:
- fileId
- versionId
minItems: 1
maxItems: 100
targetLocales:
type: array
items:
type: string
sourceLocale:
type: string
force:
type: boolean
default: false
modelProvider:
$ref: '#/components/schemas/ModelProvider'
publish:
type: boolean
required:
- files
responses:
'200':
description: Enqueued translations. Shape depends on gt-api-version (legacy before 2025-11-03.v1).
content:
application/json:
schema:
anyOf:
- type: object
properties:
jobData:
type: object
additionalProperties:
type: object
properties:
kind:
type: string
enum:
- file_translation
sourceFileId:
type: string
fileId:
type: string
versionId:
type: string
branchId:
type: string
targetLocale:
type: string
projectId:
type: string
orgId:
type: string
force:
type: boolean
outputFileFormat:
$ref: '#/components/schemas/FileFormat'
modelProvider:
$ref: '#/components/schemas/ModelProvider'
glossaryRetranslate:
type: boolean
changedGlossaryTerms:
type: array
items:
type: string
onComplete:
type: object
properties:
kind:
type: string
enum:
- google_drive_apply
userId:
type: string
required:
- kind
required:
- sourceFileId
- fileId
- versionId
- branchId
- targetLocale
- projectId
- orgId
- force
locales:
type: array
items:
type: string
message:
type: string
required:
- jobData
- locales
- message
- type: object
properties:
translations:
type: array
items:
type: object
properties:
locale:
type: string
metadata: {}
fileId:
type: string
fileName:
type: string
versionId:
type: string
branchId:
type: string
id:
type: string
isReady:
type: boolean
downloadUrl:
type: string
required:
- locale
- fileId
- fileName
- versionId
- branchId
- id
- isReady
- downloadUrl
data:
type: object
additionalProperties:
type: object
properties:
fileName:
type: string
versionId:
type: string
required:
- fileName
- versionId
locales:
type: array
items:
type: string
message:
type: string
required:
- translations
- data
- locales
- message
'400':
description: Invalid request or missing source files
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/ErrorResponse'
- type: object
properties:
error:
type: string
missing:
type: array
items:
type: object
properties:
fileId:
type: string
versionId:
type: string
required:
- fileId
- versionId
count:
type: number
required:
- error
- missing
- count
text/html:
schema:
type: string
'401':
description: Authentication is missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'402':
description: The organization's billing account is blocked, or its plan usage limit, monthly spend limit, or credit balance does not cover this request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'403':
description: The caller is authenticated but not allowed to perform this operation or access the requested resource.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'404':
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'413':
description: The request, or the data it would return, exceeds a size or item limit.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'415':
description: The request body's Content-Type is missing or not supported. Send the body as application/json.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'429':
description: Too many requests. The rate limit was exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'500':
description: An unexpected server error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
tags:
- Translation
x-docs-slug: translation/queue
/v2/translate:
post:
operationId: translate
summary: Translate content at runtime
description: Translate strings, structured content, or Markdown and MDX documents. Send documents as strings with `fileFormat` set to `MD` or `MDX`. Requires `project:translations:generate`. Existing development API keys are also accepted.
security:
- BearerAuth: []
parameters:
- schema:
$ref: '#/components/schemas/ApiVersion'
required: false
description: API contract version. Defaults to the oldest supported version.
name: gt-api-version
in: header
- schema:
type: string
description: Target project ID when no project ID is present in the path. Project API keys default to their bound project. If supplied, the header must match both the path target and the key’s bound project.
required: false
description: Target project ID when no project ID is present in the path. Project API keys default to their bound project. If supplied, the header must match both the path target and the key’s bound project.
name: gt-project-id
in: header
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RuntimeTranslationRequest'
responses:
'200':
description: All translations were served from cache
content:
application/json:
schema:
$ref: '#/components/schemas/RuntimeTranslationResponse'
'201':
description: Translations completed
content:
application/json:
schema:
$ref: '#/components/schemas/RuntimeTranslationResponse'
'400':
description: The request is malformed or failed validation.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'401':
description: Authentication is missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'402':
description: The organization's billing account is blocked, or its plan usage limit, monthly spend limit, or credit balance does not cover this request.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'403':
description: The caller is authenticated but not allowed to perform this operation or access the requested resource.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'404':
description: The requested resource was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'413':
description: The request, or the data it would return, exceeds a size or item limit.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'415':
description: The request body's Content-Type is missing or not supported. Send the body as application/json.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'429':
description: Too many requests. The rate limit was exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
'500':
description: An unexpected server error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
text/html:
schema:
type: string
tags:
- Translation
x-docs-slug: translation/translate-runtime
components:
schemas:
ApiVersion:
type: string
enum:
- 2025-01-01.v0
- 2025-11-03.v1
- 2026-02-18.v1
- 2026-03-06.v1
description: API contract version. Defaults to the oldest supported version.
ModelProvider:
type: string
enum:
- ANTHROPIC
- OPENAI
- XAI
- GOOGLE
- HYPERCLOVA
RuntimeFileFormat:
type: string
enum:
- MD
- MDX
ErrorResponse:
type: object
properties:
error:
type: string
required:
- error
RuntimeTranslationResponse:
type: object
additionalProperties:
oneOf:
- type: object
properties:
success:
type: boolean
enum:
- true
translation:
$ref: '#/components/schemas/JsonValue'
dataFormat:
$ref: '#/components/schemas/DataFormat'
locale:
type: string
required:
- success
- dataFormat
- locale
- type: object
properties:
success:
type: boolean
enum:
- false
error:
type: string
code:
type: number
required:
- success
- error
- code
JsonValue:
anyOf:
- type: string
- type: number
- type: boolean
- type: 'null'
- type: array
items:
oneOf:
- $ref: '#/components/schemas/JsonValue'
- type: 'null'
- type: object
additionalProperties:
oneOf:
- $ref: '#/components/schemas/JsonValue'
- type: 'null'
FileFormat:
type: string
enum:
- GTJSON
- MDX
- JSON
- YAML
- MD
- TS
- JS
- HTML
- TXT
- PO
- POT
- TWILIO_CONTENT_JSON
- LOTTIE
- SVG
- XCSTRINGS
- DOT_STRINGS
- DOT_STRINGSDICT
- ANDROID_STRINGS
- SRT
- RESX
RuntimeTranslationRequest:
type: object
properties:
requests:
type: object
additionalProperties:
type: object
properties:
source: {}
metadata:
type: object
properties:
id:
type: string
hash:
type: string
context:
type: string
maxChars:
type: number
dataFormat:
$ref: '#/components/schemas/DataFormat'
fileFormat:
$ref: '#/components/schemas/RuntimeFileFormat'
actionType:
type: string
enum:
- fast
- standard
default: fast
sourceCode:
type: object
additionalProperties:
type: array
items:
type: object
properties:
before:
type: string
target:
type: string
after:
type: string
required:
- before
- target
- after
default:
dataFormat: STRING
actionType: fast
targetLocale:
type: string
minLength: 1
sourceLocale:
type: string
minLength: 1
metadata:
type: object
properties:
modelProvider:
$ref: '#/components/schemas/ModelProvider'
required:
- requests
- targetLocale
- sourceLocale
- metadata
DataFormat:
type: string
enum:
- JSX
- ICU
- I18NEXT
- STRING
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: Project or organization API key.
x-docs-nav:
- group: files
title: Files
pages:
- files/upload-source
- files/upload-translations
- files/submit-diffs
- files/download-many
- files/download
- files/publish-files
- files/file-info
- files/translation-status
- files/move-files
- files/orphaned-files
- group: context
title: Context
pages:
- context/generate-context
- group: context-management
title: Context Management
pages:
- context-management/list-groups
- context-management/create-group
- context-management/get-group
- context-management/update-group
- context-management/delete-group
- context-management/list-project-groups
- context-management/get-project-group
- context-management/assign-group
- context-management/unassign-group
- context-management/reorder-group
- context-management/list-glossary
- context-management/upsert-glossary
- context-management/get-glossary-entry
- context-management/update-glossary-entry
- context-management/delete-glossary-entry
- context-management/list-glossary-translations
- context-management/set-glossary-translation
- context-management/delete-glossary-translation
- context-management/list-custom-prompts
- context-management/upsert-custom-prompts
- context-management/update-custom-prompt
- context-management/delete-custom-prompt
- context-management/import-content
- context-management/export-content
- group: translation
title: Translation
pages:
- translation/translate-runtime
- translation/queue
- translation/job-status
- group: project
title: Project
pages:
- project/list-projects
- project/list-orgs
- project/create-project
- project/create-api-key
- project/project-info
- project/update-project
- project/upload-assets
- project/branch-info
- project/create-branch
- project/upsert-tag
x-provenance:
method: harvested
publisher: General Translation
source: https://generaltranslation.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)