> ## Documentation Index
> Fetch the complete documentation index at: https://developers.deepl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Upload and translate a document



## OpenAPI

````yaml post /v2/document
openapi: 3.0.3
info:
  title: DeepL API Documentation
  description: >-
    The DeepL API provides programmatic access to DeepL’s language AI
    technology.


    Note: this OpenAPI spec is embedded into our API documentation and has
    shortened descriptions.
  termsOfService: https://www.deepl.com/pro-license
  contact:
    name: DeepL - Contact us
    url: https://www.deepl.com/contact-us
  version: 3.9.0
servers:
  - url: https://api.deepl.com
    description: DeepL API Pro
  - url: https://api-free.deepl.com
    description: DeepL API Free
security: []
tags:
  - name: beta
    description: >-
      Experimental features that are under testing and not yet intended for
      production use.
  - name: TranslateText
    description: >-
      The text-translation API currently consists of a single endpoint,
      `translate`, which is described below.
  - name: TranslateDocuments
    description: >-
      The document translation API allows you to translate whole documents and
      supports the following file types and extensions:
        * `docx` - Microsoft Word Document
        * `pptx` - Microsoft PowerPoint Document
        * `xlsx` - Microsoft Excel Document
        * `pdf` - Portable Document Format
        * `htm / html` - HTML Document
        * `txt` - Plain Text Document
        * `xlf / xliff` - XLIFF Document, version 2.1
        * `srt` - SRT Document
        * `jpeg` / `jpg` / `png` - Image (currently in beta)
  - name: RephraseText
    description: >-
      The `rephrase` endpoint  is used to make corrections and adjustments to
      texts based on style or tone.
  - name: ManageMultilingualGlossaries
    description: >-
      The *glossary* functions allow you to create, inspect, edit and delete
      glossaries.

      Glossaries created with the glossary function can be used in translate
      requests by specifying the

      `glossary_id` parameter. A glossary contains (several) dictionaries.

      A dictionary is a mapping of source phrases to target phrases for a single
      language pair.

      If you encounter issues, please let us know at support@DeepL.com.


      Currently you can create glossaries with any of the languages DeepL
      supports (with the exception of Thai).


      The maximum size limit for a glossary is 10 MiB = 10485760 bytes and each
      source/target text,

      as well as the name of the glossary, is limited to 1024 UTF-8 bytes.

      A total of 1000 glossaries are allowed per account.


      When creating a dictionary with target language `EN`, `PT`, or `ZH`, it's
      not necessary to specify a variant

      (e.g. `EN-US`, `EN-GB`, `PT-PT`, `PT-BR`, or `ZH-HANS`).

      Dictionaries with target language `EN` can be used in translations with
      either English variant.

      Similarly `PT`, and `ZH` dictionaries can be used in translations with
      their corresponding variants.

      (When you provide the ID of a glossary to a translation, the appropriate
      dictionary is automatically applied. Currently glossaries can not yet be
      used with source language detection.)


      Glossaries created via the DeepL API are now unified with glossaries
      created via the DeepL website and DeepL apps.

      Please only use the v3 glossary API in conjunction with multilingual or
      edited glossaries from the website.
  - name: ManageGlossaries
    description: >-
      Please note that this is the spec for the (old) v2 glossary endpoint.

      We recommend users switch to the newer v3 glossary endpoints, which
      support editability and multilinguality.


      The *glossary* functions allow you to create, inspect, and delete
      glossaries.

      Glossaries created with the glossary function can be used in translate
      requests by specifying the

      `glossary_id` parameter.

      If you encounter issues, please let us know at support@DeepL.com.


      Currently you can create glossaries with any of the languages DeepL
      supports (with the exception of Thai).
  - name: MetaInformation
    description: Information about API usage and value ranges
  - name: TranslationMemories
    description: >-
      The translation memory endpoints allow you to interact with your account's
      translation memories, used to store

      and reuse previously created translations. Translation memories can be
      used in text translation requests by

      specifying the `translation_memory_id` parameter to denote a specific
      translation memory and the

      `translation_memory_threshold` which defines the minimum matching
      percentage required for a translation memory

      segment to be applied (recommended to be 75% or higher).
  - name: VoiceAPI
    description: >-
      The Voice API provides real-time voice transcription and translation
      services.

      Use a two-step flow: first request a streaming URL via REST, then
      establish a WebSocket connection for streaming audio and receiving
      transcriptions.
  - name: VoiceTranslateJob
    description: >-
      **Alpha.** Async voice translation jobs. This API may change without
      notice.
externalDocs:
  description: DeepL Pro - Plans and pricing
  url: https://www.deepl.com/pro#developer
paths:
  /v2/document:
    post:
      tags:
        - TranslateDocuments
      summary: Upload and Translate a Document
      operationId: translateDocument
      requestBody:
        required: true
        content:
          multipart/form-data:
            examples:
              Basic:
                summary: Basic Document Translation
                value:
                  target_lang: DE
                  file: '@document.docx'
              Glossary:
                summary: Using a Glossary
                value:
                  source_lang: EN
                  target_lang: DE
                  file: '@document.docx'
                  glossary_id: '[yourGlossaryId]'
            schema:
              type: object
              required:
                - target_lang
                - file
              properties:
                source_lang:
                  $ref: '#/components/schemas/SourceLanguage'
                target_lang:
                  $ref: '#/components/schemas/TargetLanguage'
                file:
                  type: string
                  format: binary
                  description: >-
                    The document file to be translated. The file name should be
                    included in this part's content disposition. As an
                    alternative, the filename parameter can be used. The
                    following file types and extensions are supported:
                      * `docx` - Microsoft Word Document
                      * `pptx` - Microsoft PowerPoint Document
                      * `xlsx` - Microsoft Excel Document
                      * `pdf` - Portable Document Format
                      * `htm / html` - HTML Document
                      * `txt` - Plain Text Document
                      * `xlf / xliff` - XLIFF Document, version 2.1
                      * `srt` - SRT Document
                      * `jpeg` / `jpg` / `png` - Image (currently in beta)
                filename:
                  type: string
                  description: >-
                    The name of the uploaded file. Can be used as an alternative
                    to including the file name in the file part's content
                    disposition.
                output_format:
                  type: string
                  description: >
                    File extension of desired format of translated file, for
                    example: `docx`. If unspecified, by default the translated
                    file will be in the same format as the input file.
                formality:
                  $ref: '#/components/schemas/Formality'
                glossary_id:
                  $ref: '#/components/schemas/GlossaryId'
                enable_beta_languages:
                  description: >-
                    This parameter is maintained for backward compatibility and
                    has no effect.
                  type: boolean
                  default: false
                  deprecated: true
      responses:
        '200':
          description: >-
            The document function returns a JSON object containing the ID and
            encryption key assigned to the uploaded document. Once received by
            the server, uploaded documents are immediately encrypted using a
            uniquely generated encryption key. This key is not persistently
            stored on the server. Therefore, it must be stored by the client and
            sent back to the server with every subsequent request that refers to
            this particular document.
          headers:
            X-Trace-ID:
              $ref: '#/components/headers/X-Trace-ID'
          content:
            application/json:
              schema:
                type: object
                properties:
                  document_id:
                    description: >-
                      A unique ID assigned to the uploaded document and the
                      translation process. Must be used when referring to this
                      particular document in subsequent API requests.
                    type: string
                    example: 04DE5AD98A02647D83285A36021911C6
                  document_key:
                    description: >-
                      A unique key that is used to encrypt the uploaded document
                      as well as the resulting translation on the server side.
                      Must be provided with every subsequent API request
                      regarding this particular document.
                    type: string
                    example: >-
                      0CB0054F1C132C1625B392EADDA41CB754A742822F6877173029A6C487E7F60A
              example:
                document_id: 04DE5AD98A02647D83285A36021911C6
                document_key: >-
                  0CB0054F1C132C1625B392EADDA41CB754A742822F6877173029A6C487E7F60A
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '456':
          $ref: '#/components/responses/QuotaExceeded'
        '500':
          $ref: '#/components/responses/InternalServerError'
        '504':
          $ref: '#/components/responses/ServiceUnavailable'
        '529':
          $ref: '#/components/responses/TooManyRequests'
      security:
        - auth_header: []
components:
  schemas:
    SourceLanguage:
      type: string
      description: >-
        Language of the text to be translated. If this parameter is omitted, the
        API will attempt to

        detect the language of the text and translate it.


        For the full list of supported source languages, see [supported
        languages](https://developers.deepl.com/docs/getting-started/supported-languages)
        or query the [`GET /v3/languages`
        endpoint](https://developers.deepl.com/api-reference/languages/retrieve-supported-languages-by-resource)
        (beta).
      example: EN
    TargetLanguage:
      type: string
      description: >-
        The language into which the text should be translated.


        For the full list of supported target languages, see [supported
        languages](https://developers.deepl.com/docs/getting-started/supported-languages)
        or query the [`GET /v3/languages`
        endpoint](https://developers.deepl.com/api-reference/languages/retrieve-supported-languages-by-resource)
        (beta).
      example: DE
    Formality:
      description: >-
        Sets whether the translated text should lean towards formal or informal
        language.

        This feature is only available for certain target languages. Setting
        this parameter 

        with a target language that does not support formality will fail, unless
        one of the 

        `prefer_...` options are used.

        Possible options are:
          * `default` (default)
          * `more` - for a more formal language
          * `less` - for a more informal language
          * `prefer_more` - for a more formal language if available, otherwise fallback to default formality
          * `prefer_less` - for a more informal language if available, otherwise fallback to default formality
      type: string
      enum:
        - default
        - more
        - less
        - prefer_more
        - prefer_less
      default: default
      example: prefer_more
    GlossaryId:
      type: string
      description: A unique ID assigned to a glossary.
      example: def3a26b-3e84-45b3-84ae-0c0aaf3525f7
  headers:
    X-Trace-ID:
      description: >-
        A unique identifier for the request that can be included in bug reports
        to DeepL support.
      schema:
        type: string
      example: 501c3d93cc0c4f11ae2f60a226c2f0f0
  responses:
    BadRequest:
      description: Bad request. Please check error message and your parameters.
    Forbidden:
      description: >-
        Authorization failed. Please supply a valid `DeepL-Auth-Key` via the
        `Authorization` header.
    NotFound:
      description: The requested resource could not be found.
    PayloadTooLarge:
      description: The request size exceeds the limit.
    TooManyRequests:
      description: Too many requests. Please wait and resend your request.
    QuotaExceeded:
      description: Quota exceeded. The character limit has been reached.
    InternalServerError:
      description: Internal error.
    ServiceUnavailable:
      description: Resource currently unavailable. Try again later.
  securitySchemes:
    auth_header:
      type: apiKey
      description: >
        Authentication with `Authorization` header and  `DeepL-Auth-Key`
        authentication scheme. Example:  `DeepL-Auth-Key <api-key>`
      name: Authorization
      in: header
      x-default: 'DeepL-Auth-Key '

````