General Translation API

Translate content at runtime and queue files for translation.

Operations 3

POST /v2/project/jobs/info Get translation job status #
POST /v2/project/translations/enqueue Queue files for translation #
POST /v2/translate Translate content at runtime #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/general-translation:general-translation-translation-api"
All apis
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.

Get an API 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 Specification

general-translation-translation-api-openapi.yml Raw ↑
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)