Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Info

This documentation is incomplete. New endpoints will continue to be published from time to time.

...

The following parameters are required (and should never be hardcoded) to make requests:

Parameter

Usage

Globalese base URL

Your Globalese instance URL, e.g. https://acme.globalese.ai.

Requests must be sent to this base URL + /api/v3 + the endpoint.

API key

Must be sent in the request header as Authorization: Bearer <API key>

A valid API key can be:

Endpoints

Open api
filternone
supportedSubmitMethodsnone
showUrlfalse
openapi: 3.0.2
servers: []
info:
  title: Globalese
  version: 3
  description: Globalese API v3
tags:
  - name: Corpora
  - name: Engines
  - name: Engine instances
  - name: Groups
  - name: Languages
  - name: Projects
  - name: Project files
  - name: Segment translation dispatchers
  - name: Training jobs
  - name: Translation jobs
paths:
  /corpora:
    get:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: List corpora
      description: Returns a collection of corpora.
      parameters:
        - $ref: '#/components/parameters/stringIds'
        - $ref: '#/components/parameters/limitmax100limitMax100'
        - $ref: '#/components/parameters/offset'
        - $ref: '#/components/parameters/sourceLanguage'
        - $ref: '#/components/parameters/targetLanguage'
        - $ref: '#/components/parameters/groupIds'
        - $ref: '#/components/parameters/engineId'
        - $ref: '#/components/parameters/metadataDomain'
        - $ref: '#/components/parameters/metadataSubject'
        - $ref: '#/components/parameters/metadataClient'
        - $ref: '#/components/parameters/metadataProject'
        - $ref: '#/components/parameters/metadataDescription'
        - $ref: '#/components/parameters/corpusCatServerId'
        - name: name
          in: query
          description: Full or partial corpus name for filtering.
          schema:
            type: string
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - name:asc
              - name:desc
              - counts.segment_count:asc
              - counts.segment_count:desc
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CorpusCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
    post:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: Upload a new corpus
      description: |
        The `source_language` and `target_language` are required for these formats:
        * `csv-comma`
        * `csv-memoq`
        * `csv-semicolon`
        * `tsv`

        Only a single file may be uploaded in one request. Maximum file size: 600 MB.

        A file can be uploaded as a zip archive.
        The zip archive may only contain one file, and the file format must be provided in the `format` field.

        The `Content-Disposition` header must contain the `filename` directive.
        This is taken care of by most libraries in general.

        E.g. `Content-Disposition: form-data; name="Example TM"; filename="example.xliff"`

        Required permissions:
        `MANAGE_CORPORA` in all the groups the corpus is uploaded to,
        or `SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/CreateCorpus'
      responses:
        201:
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Corpus'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /corpora/{corpusId}:
    parameters:
      - $ref: '#/components/parameters/corpusIdInPath'
    get:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: Show the details of a corpus
      description: |
        Returns a single corpus.

        Required permissions:
        `MANAGE_CORPORA` in any of the groupgroups the corpus belongs to,
        or `SYSTEM_ADMINISTRATOR`
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Corpus'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
    deletepatch:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: DeleteUpdate a corpus
      description: |
        Delete a corpus.
Required permissions:
        Required permissions: `MANAGE_CORPORA` in all the groups the corpus belongs to,
or `SYSTEM_ADMINISTRATOR`       responses:or `SYSTEM_ADMINISTRATOR`
       204requestBody:
 
        $ref: '#/components/responsesrequestBodies/204NoContentUpdateCorpus'
        400responses:
         200:
$ref: '#/components/responses/400BadRequest'         401description: OK
         $ref: ' content:
            application/json:
              schema:
                $ref: '#/components/responsesschemas/401UnauthorizedCorpus'
        403400:
          $ref: '#/components/responses/403Forbidden400BadRequest'
        404401:
          $ref: '#/components/responses/404NotFound401Unauthorized'
        500403:
          $ref: '#/components/responses/500InternalServerError403Forbidden'
  /corpora/{corpusId}/content:      parameters500:
        -  $ref: '#/components/parametersresponses/corpusIdInPath500InternalServerError'
    getdelete:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: Delete Corpusa contentcorpus
      description: |
        Returns segmentsDelete of a corpus.

        Required permissions:
        `MANAGE_CORPORA` in all the groupgroups the corpus belongs to,
        or `SYSTEM_ADMINISTRATOR`
      parametersresponses:
        - $ref204:
'#/components/parameters/limitmax100'         - $ref: '#/components/parametersresponses/offset204NoContent'
        responses400:
        200  $ref: '#/components/responses/400BadRequest'
         description401:
OK           content:$ref: '#/components/responses/401Unauthorized'
        403:
   application/json:
              schema:
                $ref: '#/components/schemas/CorpusContent'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /corpora/{corpusId}/eventscontent:
    parameters:
      - $ref: '#/components/parameters/corpusIdInPath'
    get:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: ShowCorpus thecontent
event log of a corpus       description: |
        Returns a listsegments of events from thea corpus log.

        Required permissions:
        `MANAGE_CORPORA` in any of the groupgroups the corpus belongs to,
        or `SYSTEM_ADMINISTRATOR`
      parameters:
        - name$ref: sort'#/components/parameters/limitMax100'
        -  in$ref: query'#/components/parameters/offset'
      responses:
   schema:     200:
       type: string
            enum:
              - timestamp:asc
              - timestamp:desc
        - $ref: '#/components/parameters/limitmax100'
        - $ref: '#/components/parameters/offset'
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CorpusEventCollectionCorpusContent'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /corpora/{corpusId}/versionsevents:
    parameters:
      - $ref: '#/components/parameters/corpusIdInPath'
    get:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: Show Listthe allevent versionslog of a corpus
      description: |
        Returns detailsa aboutlist eachof versionevents offrom athe corpus: log.

      * corpus countsRequired permissions:
       * engine`MANAGE_CORPORA` IDsin thatany usedof the current corpus for training
        * engine IDs that used the current corpus for tuning

        Required permissions: `MANAGE_CORPORA` in the group the corpus belongs to,groups the corpus belongs to,
        or `SYSTEM_ADMINISTRATOR`
      parameters:
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - counts.segment_counttimestamp:asc
              - counts.segment_count:desc
              - version:asc
              - versiontimestamp:desc
        - $ref: '#/components/parameters/limitmax100limitMax100'
        - $ref: '#/components/parameters/offset'
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CorpusVersionCollectionCorpusEventCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /corpora/{corpusId}/versions:
    parameters:
      - $ref: '#/components/parameters/corpusIdInPath'
    postget:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: UpdateList all versions of a corpus
content       description: |
        Returns details Updateabout theeach contentsversion of a corpus,:
creating a new version thereof.    * corpus counts
   The format of the uploaded content* mustengine beIDs thethat sameused as the formatcorpus ofversion the original content.for training

        The language codes of the uploaded content must be the same as the original ones.

        Required permissions: `MANAGE_CORPORA` in the group the corpus belongs to,Required permissions:
        `MANAGE_CORPORA` or `MANAGE_ENGINES` in any of the groups the corpus belongs to,
        or `SYSTEM_ADMINISTRATOR`
      requestBodyparameters:
        - $refname: '#/components/requestBodies/UpdateCorpus'sort
      responses:    in: query
   201:       schema:
   description: Created        type: string
 content:           enum:
 application/json:               schema:- counts.segment_count:asc
              -  $ref: '#/components/schemas/CorpusVersion'counts.segment_count:desc
          400:    - version:asc
     $ref: '#/components/responses/400BadRequest'        - 401version:desc
        -  $ref: '#/components/responsesparameters/401UnauthorizedlimitMax100'
        403:
          - $ref: '#/components/responsesparameters/403Forbiddenoffset'
        404responses:
        200:
 $ref: '#/components/responses/404NotFound'         500description: OK
         $ref content:
'#/components/responses/500InternalServerError'   /engines:     get:       tagsapplication/json:
        - Engines     schema:
 security:         - bearer: [ ]   $ref: '#/components/schemas/CorpusVersionCollection'
  summary: List engines     401:
 description: |         Returns a collection of engines.$ref: '#/components/responses/401Unauthorized'
        403:
    A translation API key can also be used for authentication.$ref: '#/components/responses/403Forbidden'
        parameters404:
         - $ref: '#/components/parametersresponses/limitmax100404NotFound'
        - $ref500:
'#/components/parameters/offset'         - $ref: '#/components/parametersresponses/sourceLanguage500InternalServerError'
    post:
     - $reftags: '#/components/parameters/targetLanguage'
  
         - $ref: '#/components/parameters/groupIds'Corpora
         - namesecurity:
sort        -   inbearer: query[ ]
         schemasummary: Update corpus content
         typedescription: string|
        Update the contents of enum:a corpus, creating a new version thereof.

       - name:ascThe format of the uploaded content must be the same as the format of the - name:descoriginal content.

     responses:   The language codes of the uploaded 200:content must be the same as the original ones.

 description: OK      Required     contentpermissions:
        `MANAGE_CORPORA` in any of application/json:the groups the corpus belongs to,
        or schema:`SYSTEM_ADMINISTRATOR`
      requestBody:
         $ref: '#/components/schemasrequestBodies/EngineCollectionUpdateCorpusContent'
      responses:
 401       201:
          $refdescription: '#/components/responses/401Unauthorized'Created
          500content:
          $ref:  '#/components/responses/500InternalServerError'application/json:
  /engine-instances:     get:       tagsschema:
        - Engine instances       security$ref: '#/components/schemas/CorpusVersion'
       - bearer400:
[   ]       summary$ref: List engine instances'#/components/responses/400BadRequest'
        description401:
|         Returns a collection of engine instances (being) deployed.$ref: '#/components/responses/401Unauthorized'
            Required permissions403:
`MANAGE_ENGINES|TRANSLATE|SYSTEM_ADMINISTRATOR`          A translation API key can also be used for authentication.$ref: '#/components/responses/403Forbidden'
        404:
parameters:         - $ref: '#/components/parametersresponses/numericalIds404NotFound'
        - $ref500:
'#/components/parameters/engineIds'         - $ref: '#/components/parametersresponses/groupIds500InternalServerError'
  /engines:
    get:
  - $ref: '#/components/parameters/limitmax100'  tags:
      - $ref:  - Engines
      security:
        - bearer: [ ]
      summary: List engines
      description: |
        Returns a collection of engines.

        A translation API key can also be used for authentication.
      parameters:
        - $ref: '#/components/parameters/numericalIds'
        - $ref: '#/components/parameters/limitMax100'
        - $ref: '#/components/parameters/offset'
        responses:  - $ref: '#/components/parameters/sourceLanguage'
        - $ref: '#/components/parameters/targetLanguage'
        - $ref: '#/components/parameters/engineStatuses'
        - $ref: '#/components/parameters/groupIds'
        - name: name
          in: query
          description: Full or partial engine name for filtering.
          schema:
            type: string
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - name:asc
              - name:desc
              - status:asc
              - status:desc
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EngineCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        500:
          $ref: '#/components/responses/500InternalServerError'
    post:
      tags:
        - Engines
      security:
        - bearer: [ ]
      summary: Create a new engine
      description: |
        Restrictions:

        * Using stock corpora and stock engines are mutually exclusive options.
        * Stock+ engines (i.e. engines based on a stock engine) can only have core corpora.

        Required permissions: `MANAGE_ENGINES` in the group the engine belongs to, or `SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/CreateEngine'
      responses:
        201:
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Engine'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        402:
          description: |
            Maximum number of allowed engines reached.
            Only applies to legacy subscriptions.
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
        502:
          $ref: '#/components/responses/502BadGateway'
  /engines/{engineId}:
    parameters:
      - $ref: '#/components/parameters/engineIdInPath'
    get:
      tags:
        - Engines
      security:
        - bearer: [ ]
      summary: Show the details of an engine
      description: |
        Returns a single engine.

        Required permissions: `MANAGE_ENGINES`, `MANAGE_PROJECTS` or `TRANSLATE` in the group the engine belongs to, or `SYSTEM_ADMINISTRATOR`

        A translation API key can also be used for authentication.
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Engine'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
    patch:
      tags:
        - Engines
      security:
        - bearer: [ ]
      summary: Update an engine
      description: |
        Required permissions: `MANAGE_ENGINES` in the group the engine belongs to, or `SYSTEM_ADMINISTRATOR`

        The `published` property can only be changed if the engine has been trained or tuned before.
      requestBody:
        $ref: '#/components/requestBodies/UpdateEngine'
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Engine'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
    delete:
      tags:
        - Engines
      security:
        - bearer: [ ]
      summary: Delete an engine
      description: |
        Delete an engine.

        Required permissions: `MANAGE_ENGINES|SYSTEM_ADMINISTRATOR`
      responses:
        204:
          $ref: '#/components/responses/204NoContent'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /engines/{engineId}/events:
    parameters:
      - $ref: '#/components/parameters/engineIdInPath'
    get:
      tags:
        - Engines
      security:
        - bearer: [ ]
      summary: Show the event log of an engine
      description: |
        Returns a list of events from the engine log.

        Required permissions: `MANAGE_ENGINES` in the group the engine belongs to, or `SYSTEM_ADMINISTRATOR`
      parameters:
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - timestamp:asc
              - timestamp:desc
        - $ref: '#/components/parameters/limitMax100'
        - $ref: '#/components/parameters/offset'
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EngineEventCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /engines/{engineId}/resources:
    parameters:
      - $ref: '#/components/parameters/engineIdInPath'
    get:
      tags:
        - Engines
      security:
        - bearer: [ ]
      summary: Show the resources of an engine
      description: |
        Returns the resources of a single engine.

        Required permissions: `MANAGE_ENGINES` or `MANAGE_PROJECTS` in the group the engine belongs to, or `SYSTEM_ADMINISTRATOR`
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EngineResources'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /engine-instances:
    get:
      tags:
        - Engine instances
      security:
        - bearer: [ ]
      summary: List engine instances
      description: |
        Returns a collection of engine instances (being) deployed.

        Required permissions: `MANAGE_ENGINES|TRANSLATE|SYSTEM_ADMINISTRATOR`

        A translation API key can also be used for authentication.
      parameters:
        - $ref: '#/components/parameters/numericalIds'
        - $ref: '#/components/parameters/engineIds'
        - $ref: '#/components/parameters/groupIds'
        - $ref: '#/components/parameters/limitMax100'
        - $ref: '#/components/parameters/offset'
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EngineInstanceCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
    post:
      tags:
        - Engine instances
      security:
        - bearer: [ ]
      summary: Create a new engine instance
      description: |
        Starts deploying an engine in the background.

        Required permissions: `MANAGE_ENGINES|SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/CreateEngineInstance'
      responses:
        202:
          description: The newly created engine instance entity in the database.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EngineInstance'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /engine-instances/{id}:
    parameters:
      - name: id
        description: Engine instance ID
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Engine instances
      security:
        - bearer: [ ]
      summary: Show the details of an engine instance
      description: |
        Returns a single engine instance.

        Required permissions: `MANAGE_ENGINES|TRANSLATE|SYSTEM_ADMINISTRATOR`

        A translation API key can also be used for authentication.
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EngineInstance'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
        502:
          $ref: '#/components/responses/502BadGateway'
    delete:
      tags:
        - Engine instances
      security:
        - bearer: [ ]
      summary: Delete an engine instance
      description: |
        Removes a deployed engine instance.

        Required permissions: `MANAGE_ENGINES|SYSTEM_ADMINISTRATOR`
      responses:
        204:
          $ref: '#/components/responses/204NoContent'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
        502:
          $ref: '#/components/responses/502BadGateway'
  /groups:
    get:
      tags:
        - Groups
      security:
        - bearer: [ ]
      summary: List groups
      description: Returns a collection of groups the authenticated user is a member of.
      parameters:
        - $ref: '#/components/parameters/limitMax100'
        - $ref: '#/components/parameters/offset'
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - name:asc
              - name:desc
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /jobs/training:
    get:
      tags:
        - Training jobs
      summary: List training jobs
      description: |
        Required permission: `MANAGE_ENGINES|SYSTEM_ADMINISTRATOR`
      security:
        - bearer: [ ]
      parameters:
        - $ref: '#/components/parameters/engineIds'
        - $ref: '#/components/parameters/groupIds'
        - $ref: '#/components/parameters/limitMax100'
        - $ref: '#/components/parameters/offset'
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - timestamps.created_at:asc
              - timestamps.created_at:desc
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrainingJobCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
    post:
      tags:
        - Training jobs
      security:
        - bearer: [ ]
      summary: Create a training job
      description: |
        Required permission: `MANAGE_ENGINES` in the group the engine belongs to, or `SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/CreateTrainingJob'
      responses:
        201:
          description: Training job created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrainingJob'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        402:
          description: License does not allow new training jobs to be created
        403:
          $ref: '#/components/responses/403Forbidden'
        409:
          description: Engine is already being trained
        500:
          $ref: '#/components/responses/500InternalServerError'
        502:
          $ref: '#/components/responses/502BadGateway'
        504:
          $ref: '#/components/responses/504GatewayTimeout'
  /jobs/training/{id}:
    parameters:
      - name: id
        description: Training job ID
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Training jobs
      security:
        - bearer: []
      summary: Show the details of a training job
      description: |
        Required permission: `MANAGE_ENGINES|SYSTEM_ADMINISTRATOR`
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TrainingJob'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /jobs/translation:
    get:
      tags:
        - Translation jobs
      summary: List translation jobs
      description: |
        Required permission: `MANAGE_PROJECTS|SYSTEM_ADMINISTRATOR`
      security:
        - bearer: [ ]
      parameters:
        - $ref: '#/components/parameters/fileIds'
        - $ref: '#/components/parameters/groupIds'
        - $ref: '#/components/parameters/limitMax100'
        - $ref: '#/components/parameters/offset'
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - timestamps.created_at:asc
              - timestamps.created_at:desc
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationJobCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
    post:
      tags:
        - Translation jobs
      security:
        - bearer: [ ]
      summary: Create a translation job
      description: |
        Required permission: `MANAGE_PROJECTS` in the group the file (and project) belongs to, or `SYSTEM_ADMINISTRATOR`

        If the engine is not published, it can be used for document translation only by users with at least one of the following permissions:
          - `MANAGE_ENGINES` for the group the engine belongs to
          - `SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/CreateTranslationJob'
      responses:
        201:
          description: Translation job created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationJob'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        402:
          description: License does not allow new translation jobs to be created
        403:
          $ref: '#/components/responses/403Forbidden'
        409:
          description: File is already being translated
        500:
          $ref: '#/components/responses/500InternalServerError'
        502:
          $ref: '#/components/responses/502BadGateway'
        504:
          $ref: '#/components/responses/504GatewayTimeout'
  /jobs/translation/{id}:
    parameters:
      - name: id
        description: Translation job ID
        in: path
        required: true
        schema:
          type: integer
    get:
      tags:
        - Translation jobs
      security:
        - bearer: []
      summary: Show the details of a translation job
      description: |
        Required permission: `MANAGE_PROJECTS|SYSTEM_ADMINISTRATOR`
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationJob'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /languages:
    get:
      tags:
        - Languages
      security:
        - bearer: [ ]
      summary: List languages
      description: |
        Returns a collection of languages used in Globalese.

        A translation API key can also be used for authentication.
      parameters:
        - $ref: '#/components/parameters/languageUsage'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/offset'
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LanguageCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /projects:
    post:
      tags:
        - Projects
      security:
        - bearer: [ ]
      summary: Create a new project
      description: |
        One of either `engine_id` or `stock_engine_uuid` is required.

        Required permissions: `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`

        Required permissions to set engine version: `MANAGE_ENGINES` and `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/CreateProject'
      responses:
        201:
          description: Project created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /projects/{projectId}:
    parameters:
      - $ref: '#/components/parameters/projectIdInPath'
    get:
      tags:
        - Projects
      security:
        - bearer: [ ]
      summary: Show the details of a project
      description: |
        Returns a single project.

        Required permissions: `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
    patch:
      tags:
        - Projects
      security:
        - bearer: [ ]
      summary: Update a project
      description: |
        Required permissions: `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`

        Required permissions to change engine version: `MANAGE_ENGINES` and `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/UpdateProject'
      responses:
        200:
          description: Project updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
    delete:
      tags:
        - Projects
      security:
        - bearer: [ ]
      summary: Delete a project
      description: |
        Deletes a project as well as all the project files contained within.

        Required permission: `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`
      responses:
        204:
          $ref: '#/components/responses/204NoContent'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /projects/{projectId}/files:
    parameters:
      - $ref: '#/components/parameters/projectIdInPath'
    get:
      tags:
        - Project files
      security:
        - bearer: [ ]
      summary: List project files
      description: |
        Returns a collection of project files.

        Required permissions: `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`
      parameters:
        - $ref: '#/components/parameters/stringIds'
        - $ref: '#/components/parameters/fileStatuses'
        - $ref: '#/components/parameters/limitMax100'
        - $ref: '#/components/parameters/offset'
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - name:asc
              - name:desc
              - latest_events.translation_finished.timestamp:asc
              - latest_events.translation_finished.timestamp:desc
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
    post:
      tags:
        - Project files
      security:
        - bearer: [ ]
      summary: Upload new project files
      description: |
        Only one file can be uploaded at the same time.
        A file can be uploaded as a ZIP. The ZIP may contain more files, but the formats of these files must be the same.

        The HTTP Content-Disposition header must contain the `filename` directive. Most often it happens automatically.
        E.g. `Content-Disposition: form-data; name="file"; filename="example.xliff"`

        Required permissions: `MANAGE_PROJECTS` in the groups the project belongs to, or `SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/CreateFile'
      responses:
        201:
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                  - files
                properties:
                  files:
                    type: array
                    items:
                      $ref: '#/components/schemas/File'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /projects/{projectId}/files/{fileId}:
    parameters:
      - $ref: '#/components/parameters/projectIdInPath'
      - $ref: '#/components/parameters/fileIdInPath'
    get:
      tags:
        - Project files
      security:
        - bearer: [ ]
      summary: Show the details of a project file
      description: |
        Returns a single project file.

        Required permissions: `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/File'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
    delete:
      tags:
        - Project files
      security:
        - bearer: [ ]
      summary: Delete a project file
      description: |
        Delete a project file.

        Required permission: `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`
      responses:
        204:
          $ref: '#/components/responses/204NoContent'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /projects/{projectId}/translated-files:
    parameters:
      - $ref: '#/components/parameters/projectIdInPath'
      - name: files
        in: query
        schema:
          type: string
        description: |
          One or more file IDs to include in the downloaded zip file.

          Examples: `5b04a7263fa509.a4444794`, `5b04a7263fa509.a4444794,5b0412363fa5c1.a4354792`
    get:
      tags:
        - Project files
      security:
        - bearer: [ ]
      summary: Download translated project files
      description: |
        Returns a zip file containing all or the specified translated files.
        Untranslated files are not returned, even if their IDs are specified in the request.

        Required permissions: `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`
      responses:
        200:
          $ref: '#/components/responses/200OctetStream'
        400:
          $ref: '#/components/responses/400BadRequest'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /projects/{projectId}/files/{fileId}/translated-file:
    parameters:
      - $ref: '#/components/parameters/projectIdInPath'
      - $ref: '#/components/parameters/fileIdInPath'
    get:
      tags:
        - Project files
      security:
        - bearer: [ ]
      summary: Download a translated project file
      description: |
        Required permissions: `MANAGE_PROJECTS` in the group the project belongs to, or `SYSTEM_ADMINISTRATOR`
      responses:
        200:
          description: OK
          content:
            application/octet-stream:
              schema:
                type: string
                example: >-
                  <?xml version='1.0'?><xliff>[file content]</xliff>
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
  /segment-translation-dispatchers:
    get:
      tags:
        - Segment translation dispatchers
      security:
        - bearer: [ ]
      summary: List segment translation dispatchers
      description: |
        Required permissions: `MANAGE_ENGINES|SYSTEM_ADMINISTRATOR`
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RemoteDispatcherCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        500:
          $ref: '#/components/responses/500InternalServerError'
        502:
          $ref: '#/components/responses/502BadGateway'
components:
  parameters:
    corpusCatServerId:
      name: cat.server.id
      in: query
      description: |
        The ID of the CAT server the corpus is associated with.
      schema:
        type: number
        example: 10
    corpusIdInPath:
      name: corpusId
      description: Corpus ID
      in: path
      required: true
      schema:
        type: string
        example: 5b04a7263fa509.a4444794
    engineId:
      name: engine_id
      in: query
      description: |
        Engine ID for filtering.

        Examples: `1`, `2`
      schema:
        $ref: '#/components/schemas/engineId'
    engineIdInPath:
      name: engineId
      in: path
      required: true
      schema:
        type: integer
        example:
          5
    engineIds:
      name: engine_ids
      in: query
      description: |
        One or more engine ID(s) for filtering, comma-separated.

        Examples: `1`, `1,3,5`
      schema:
        oneOf:
          - type: integer
          - type: string
    engineStatuses:
      name: statuses
      in: query
      description: |
        One or more engine statuses for filtering, comma-separated.

        Examples: `trained`, `queued,training`
      schema:
        type: string
        enum:
          - changed
          - error
          - queued
          - trained
          - training
          - tuned
          - tuning
          - untrained
    fileIdInPath:
      name: fileId
      description: Project file ID
      in: path
      required: true
      schema:
        type: string
        example: 5b04a7263fa509.a4444794
    fileIds:
      name: file_ids
      in: query
      description: |
        One or more file ID(s) for filtering, comma-separated.

        Examples: `5b04a7263fa509.a4444794`, `5b04a7263fa509.a4444794,5b04a7199fa509.a4444401`
      schema:
        - type: string
    fileStatuses:
      name: statuses
      in: query
      description: |
        One or more file statuses for filtering, comma-separated.

        Examples: `new`, `translating,translated`
      schema:
        type: string
        enum:
          - empty
          - new
          - queued
          - translated
          - translating
    groupIds:
      name: group_ids
      in: query
      description: |
        One or more group ID(s) for filtering, comma-separated.

        Examples: `1`, `1,3,5`
      schema:
        oneOf:
          - type: integer
          - type: string
      style: form
      explode: false
    languageUsage:
      name: usage
      in: query
      description: |
        Filter for languages used in Globalese.

        Optionally, the `:source` or `:target` modifier may be appended to the parameter value to filter for languages used on the source or target language side only.

        `usage=engines:source` will return a list of languages used as engine source languages.

        `usage=engines` will return a list of languages used as engine languages, either source or target.
      schema:
        type: string
        enum:
          - engines
    limit:
      name: limit
      in: query
      description: |
        Limit for results. *May* be used together with `offset`.

        Examples: `25`, `50`
      schema:
        type: integer
    limitMax100:
      name: limit
      in: query
      description: |
        Limit for results. It cannot be greater than 100. *May* be used together with `offset`.

        Examples: `25`, `50`

        If not provided, it will automatically be set to 100.
      schema:
        type: integer
        example: 25
    metadataClient:
      name: metadata.client
      in: query
      description: |
        Client metadata descriptor.

        Examples: `Very Important Client`
      schema:
        type: string
    metadataDescription:
      name: metadata.description
      in: query
      description: |
        Description metadata descriptor.

        Examples: `used for 2018 campaign`
      schema:
        type: string
    metadataDomain:
      name: metadata.domain
      in: query
      description: |
        Domain metadata descriptor.

        Examples: `legal`
      schema:
        type: string
    metadataProject:
      name: metadata.project
      in: query
      description: |
        Project metadata descriptor.

        Examples: `0192 EC Project`
      schema:
        type: string
    metadataSubject:
      name: metadata.subject
      in: query
      description: |
        Subject metadata descriptor.

        Examples: `EU treaties`
      schema:
        type: string
    numericalIds:
      name: ids
      in: query
      description: |
        One or more ID(s) for filtering, comma-separated.

        Examples: `3`, `3,4`
      schema:
        type: string
      style: form
      explode: false
    offset:
      name: offset
      in: query
      description: |
        Offset to start query from. **Must** be used together with `limit`.

        Examples: `50`, `100`
      schema:
        type: integer
        example: 0
    projectIdInPath:
      name: projectId
      description: Project ID
      in: path
      required: true
      schema:
        type: integer
        example: 5
    sourceLanguage:
      name: source_language
      in: query
      description: |
        Source language.

        Examples: `en`, `fr`
      schema:
        type: string
    stringIds:
      name: ids
      in: query
      description: |
        One or more ID(s) for filtering, comma-separated.

        Examples: `5b04a7263fa509.a4444794`, `5b04a7263fa509.a4444794,5b0412363fa5c1.a4354792`
      schema:
        type: string
      style: form
      explode: false
    targetLanguage:
      name: target_language
      in: query
      description: |
        Target language.

        Examples: `en`, `fr`
      schema:
        type: string
  requestBodies:
    CreateCorpus:
      content:
        multipart/form-data:
          schema:
            $ref: '#/components/schemas/CreateCorpus'
    CreateEngine:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateEngine'
      required: true
    CreateEngineInstance:
      required: true
      content:
        application/json:
          schema:
            type: object
            required:
              - engine_id
              - dispatcher_id
            properties:
              engine_id:
                $ref: '#/components/schemas/engineId'
              dispatcher_id:
                $ref: '#/components/schemas/dispatcherId'
    CreateFile:
      content:
        multipart/form-data:
          schema:
            $ref: '#/components/schemas/CreateFile'
    CreateProject:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateProject'
    CreateTrainingJob:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateTrainingJob'
    CreateTranslationJob:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateTranslationJob'
    UpdateCorpus:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UpdateCorpus'
    UpdateCorpusContent:
      content:
        multipart/form-data:
          schema:
            $ref: '#/components/schemas/UpdateCorpusContent'
    UpdateEngine:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UpdateEngine'
    UpdateProject:
      required: true
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UpdateProject'
  responses:
    200OctetStream:
      description: OK
      content:
        application/octet-stream:
          schema:
            type: string
            format: binary
    204NoContent:
      description: No Content
    400BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    401Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    403Forbidden:
      description: Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    404NotFound:
      description: Resource not found
    422UnprocessableEntity:
      description: Unprocessable entity
    500InternalServerError:
      description: Internal server error while processing the request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    502BadGateway:
      description: Bad Gateway
    504GatewayTimeout:
      description: Gateway Timeout
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
      description: API key
  schemas:
    catToolServerId:
      description: CAT tool server ID in Globalese
      type: integer
      example: 10
    catToolServerType:
      type: string
      enum:
        - memoq
        - memsource
        - smartcat
        - xtm
    CollectionMetadata:
      type: object
      required:
        - counts
      properties:
        counts:
          type: object
          required:
            - total
            - filtered
          properties:
            total:
              description: The total number of resources in the system, irrespective of any filters.
              type: integer
              example: 100
            filtered:
              description: The number of resources in the system matching the filters.
              type: integer
              example: 40
    Corpus:
      type: object
      required:
        - id
        - actions
        - cat
        - counts
        - current_version
        - engines
        - format
        - groups
        - metadata
        - name
        - source_language
        - target_language
      properties:
        id:
          $ref: '#/components/schemas/corpusId'
        actions:
          $ref: '#/components/schemas/CorpusActions'
        cat:
          $ref: '#/components/schemas/CorpusCat'
        counts:
          $ref: '#/components/schemas/CorpusCounts'
        current_version:
          $ref: '#/components/schemas/corpusVersion'
        engine_ids:
          type: array
          items:
            type: integer
          example: [ 2, 8, 14 ]
        format:
          $ref: '#/components/schemas/corpusFormat'
        group_ids:
          $ref: '#/components/schemas/corpusGroupIds'
        metadata:
          $ref: '#/components/schemas/CorpusMetadata'
        name:
          $ref: '#/components/schemas/corpusName'
        source_language:
          $ref: '#/components/schemas/sourceLanguage'
        target_language:
          $ref: '#/components/schemas/targetLanguage'
    CorpusActions:
      type: object
      description: An object describing the actions possible against a corpus.
      required:
        - delete
        - update
      properties:
        delete:
          type: boolean
        update:
          type: boolean
    CorpusCat:
      type: object
      nullable: true
      description: |
        If the corpus was created by retrieving a CAT tool server corpus, this object contains relevant information.
      required:
        - corpus
        - server
      properties:
        corpus:
          $ref: '#/components/schemas/CorpusCatCorpus'
        server:
          $ref: '#/components/schemas/CorpusCatServer'
    CorpusCatCorpus:
      type: object
      required:
        - id
      properties:
        id:
          $ref: '#/components/schemas/remoteCorpusId'
    CorpusCatServer:
      type: object
      required:
        - id
        - type
      properties:
        id:
          $ref: '#/components/schemas/catToolServerId'
        type:
          $ref: '#/components/schemas/catToolServerType'
    CorpusCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Corpus'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    CorpusContent:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            type: object
            required:
              - id
              - content
            properties:
              id:
                type: string
                example: "1"
                nullable: true
              content:
                type: object
                required:
                  - source
                  - target
                properties:
                  source:
                    type: string
                  target:
                    type: string
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    CorpusCounts:
      type: object
      required:
        - segment_count
        - source_word_count
        - target_word_count
        - source_character_count
        - target_character_count
      properties:
        segment_count:
          type: integer
          example: 145952
        source_word_count:
          type: integer
          example: 2819806
        target_word_count:
          type: integer
          example: 3120176
        source_character_count:
          type: integer
          example: 24235334
        target_character_count:
          type: integer
          example: 29194748
    CorpusEvent:
      allOf:
        - $ref: '#/components/schemas/Event'
        - type: object
          properties:
            resource_id:
              $ref: '#/components/schemas/corpusId'
            type:
              type: string
              enum:
                - uploaded
                - updated
                - new_version_uploaded
    CorpusEventCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/CorpusEvent'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    corpusFormat:
      type: string
      enum:
        - csv-comma
        - csv-memoq
        - csv-semicolon
        - tmx
        - tbx
        - tsv
        - xliff
        - xliff-memoq
        - xliff-memsource
        - xliff-sdl
        - xliff-smartcat
        - xliff-translate5
        - xliff-wordbee
        - xliff-xtm
    corpusGroupIds:
      type: array
      description: |
        Cannot be empty.
        A corpus must always be assigned to at least one group.
      items:
        type: integer
      example: [ 1, 3 ]
    corpusId:
      description: Corpus ID
      type: string
      example: 5a0ba1267f0571.04642701
    CorpusMetadata:
      type: object
      properties:
        domain:
          type: string
          nullable: true
          example: legal
        subject:
          type: string
          nullable: true
          example: EU treaties
        client:
          type: string
          nullable: true
          example: Very Important Client
        project:
          type: string
          nullable: true
          example: 0192 EC Project
        description:
          type: string
          nullable: true
          example: created by DGT
    corpusName:
      type: string
      example: English to German DGT.tmx
    CorpusVersion:
      type: object
      required:
        - corpus_id
        - version
        - counts
        - engine_ids
        - timestamps
      properties:
        corpus_id:
          $ref: '#/components/schemas/corpusId'
        version:
          $ref: '#/components/schemas/corpusVersion'
        counts:
          $ref: '#/components/schemas/CorpusCounts'
        engine_ids:
          $ref: '#/components/schemas/CorpusVersionEngineIds'
        timestamps:
          $ref: '#/components/schemas/CorpusVersionTimestamps'
    corpusVersion:
      type: integer
      example: 1
    CorpusVersionCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/CorpusVersion'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    CorpusVersionEngineIds:
      type: array
      items:
        type: integer
      example: [ 2, 8, 14 ]
    CorpusVersionTimestamps:
      type: object
      required:
        - created_at
      properties:
        created_at:
          $ref: '#/components/schemas/createdAt'
    CreateCorpus:
      type: object
      required:
        - file
        - format
        - group_ids[]
      properties:
        file:
          type: object
        format:
          $ref: '#/components/schemas/corpusFormat'
        group_ids[]:
          $ref: '#/components/schemas/groupId'
        source_language:
          $ref: '#/components/schemas/sourceLanguage'
        target_language:
          $ref: '#/components/schemas/targetLanguage'
        metadata[domain]:
          type: string
          example: legal
        metadata[subject]:
          type: string
          example: EU treaties
        metadata[client]:
          type: string
          example: Very Important Client
        metadata[project]:
          type: string
          example: 0192 EC Project
        metadata[description]:
          type: string
          example: created by DGT
    CreateEngine:
      type: object
      required:
        - name
        - source_language
        - target_language
        - group_id
        - resources
      properties:
        name:
          type: string
          example: Engine 1
        source_language:
          $ref: '#/components/schemas/sourceLanguage'
        target_language:
          $ref: '#/components/schemas/targetLanguage'
        group_id:
          $ref: '#/components/schemas/groupId'
        resources:
          $ref: '#/components/schemas/CreateEngineResources'
    CreateEngineResources:
      type: object
      required:
        - corpus_ids
      properties:
        corpus_ids:
          $ref: '#/components/schemas/CreateEngineResourcesCorpusIds'
        stock_corpora:
          type: boolean
          description: Whether or not to use available stock corpora for training the engine.
        stock_engine_uuid:
          $ref: '#/components/schemas/nullableStockEngineUuid'
    CreateEngineResourcesCorpusIds:
      type: object
      required:
        - core
      properties:
        core:
          type: array
          items:
            type: string
          example: [ '51fc7ea3fa889.b0027797', '54018363fa5c1.044227af' ]
        auxiliary:
          type: array
          items:
            type: string
          example: [ '5b04a7263fa509.77444794', '5b0412363fa5c1.c4354792' ]
    createdAt:
      description: Created timestamp in ISO 8601 format
      type: string
      example: "2017-08-30T04:34:26+00:00"
    CreateFile:
      type: object
      required:
        - file
        - format
      properties:
        file:
          type: object
        format:
          $ref: '#/components/schemas/fileFormat'
    CreateProject:
      type: object
      required:
        - name
        - source_language
        - target_language
        - group_id
      properties:
        name:
          type: string
          200example: Project 1
        descriptionsource_language:
OK           content$ref: '#/components/schemas/sourceLanguage'
           application/jsontarget_language:
          $ref: '#/components/schemas/targetLanguage'
  schema:      group_id:
          $ref: '#/components/schemas/EngineInstanceCollectiongroupId'
        401engine_id:
          $ref: '#/components/responsesschemas/401UnauthorizednullableEngineId'
        403engine_version:
          $ref: '#/components/responsesschemas/403ForbiddennullableEngineVersion'
        500stock_engine_id:
          allOf:
            - $ref: '#/components/responsesschemas/500InternalServerError'nullableStockEngineUuid'
          post  - deprecated: true
     tags:   stock_engine_uuid:
         - Engine instances $ref: '#/components/schemas/nullableStockEngineUuid'
        securitycat:
         - bearer$ref: [ ]'#/components/schemas/CreateProjectCat'
    CreateProjectCat:
  summary: Create a new enginetype: instanceobject
      descriptionrequired:
|        - server
  Starts deploying an engine in the background.- project
      properties:
 Required permissions: `MANAGE_ENGINES|SYSTEM_ADMINISTRATOR`     server:
 requestBody:         $ref: '#/components/requestBodiesschemas/CreateEngineInstanceCreateProjectCatServer'
      responses  project:
          202:$ref: '#/components/schemas/CreateProjectCatProject'
    CreateProjectCatServer:
     description type: object
The newly created engine instance entity inrequired:
the database.       - id
  content:    properties:
        application/jsonid:
          type: integer
  schema:        description: CAT tool server connection ID as stored in Globalese.
$ref: '#/components/schemas/EngineInstance'         400example: 2
    CreateProjectCatProject:
    $ref: '#/components/responses/400BadRequest'
  type: object
      401required:
        - id
$ref: '#/components/responses/401Unauthorized'     properties:
   403:     id:
     $ref: '#/components/responses/403Forbidden'    oneOf:
    500:        -   $reftype: '#/components/responses/500InternalServerError'integer
  /engine-instances/{id}:     parameters:     - type: -string
name: id         description: CAT Enginetool instanceproject ID as stored on the CAT tool server.
 in:   path      example: 5987c27a-da1e-4060-b08d-00aa6dbd0bba
 required: true  CreateTrainingJob:
      schematype: object
      required:
    type: integer   - engine_id
get:       tags: - mode
      -properties:
Engine instances       securityengine_id:
        -  bearer: [ ]$ref: '#/components/schemas/engineId'
        summary: Show the details of an engine instancemode:
          descriptiontype: |string
        Returns a singleenum:
engine instance.          Required permissions: `MANAGE_ENGINES|TRANSLATE|SYSTEM_ADMINISTRATOR`- training
         A translation API key- cantuning
also be used for authentication.CreateTranslationJob:
      responsestype: object
       200required:
        -  description: OKfile_id
      properties:
        contentfile_id:
            application/json:$ref: '#/components/schemas/fileId'
    dispatcherId:
      description: Segment-based translation schema:dispatcher ID
      type: integer
       $refexample: '#/components/schemas/EngineInstance'1
    dispatcherRegion:
   401:   type: string
      $refexample: '#/components/responses/401Unauthorized'"europe-west1"
    dispatcherUrl:
   403:   type: string
      $refexample: '#"https:/components/responses/403Forbidden'/dispatcher-europe-west1-ja6vheawuq-ew.a.run.app"
    Engine:
   404:   type: object
      $refrequired: '#/components/responses/404NotFound'
        - id
500:        - actions
 $ref: '#/components/responses/500InternalServerError'      - counts
 502:       - group_id
  $ref: '#/components/responses/502BadGateway'     delete:- health
     tags:   - instance_ids
    - Engine instances  - name
   security:     - published
  - bearer: [ ]   - source_language
  summary: Delete an engine instance  - status
   description: |    - stock_corpora
   Removes a deployed engine instance. - stock_engine_id
       Required permissions:- `MANAGEstock_ENGINES|SYSTEMengine_ADMINISTRATOR`uuid
      responses:  - target_language
     204:   - timestamps
      $ref: '#/components/responses/204NoContent'
  - uuid
      400:  - version
       $refproperties:
'#/components/responses/400BadRequest'         401id:
          $ref: '#/components/responsesschemas/401UnauthorizedengineId'
        403actions:
          $ref: '#/components/responsesschemas/403ForbiddenEngineActions'
        404counts:
          $ref: '#/components/responsesschemas/404NotFoundEngineCounts'
        500group_id:
          $ref: '#/components/responsesschemas/500InternalServerErrorgroupId'
        502health:
          $ref: '#/components/responsesschemas/502BadGatewayengineHealth'
  /groups:     get:
      tags instance_ids:
        - Groups type:   array
  security:         - bearer: [ ]items:
       summary: List groups       description$ref: Returns a collection of groups the authenticated user is a member of.
'#/components/schemas/numericalId'
        name:
       parameters:         - $ref: '#/components/parameters/limitmax100'type: string
         - $refexample: '#/components/parameters/offset'
Engine 1
       - namepublished:
sort           intype: queryboolean
          schemaexample: true
        source_language:
  type: string       $ref: '#/components/schemas/sourceLanguage'
    enum:    status:
          - name:asc$ref: '#/components/schemas/engineStatus'
        stock_corpora:
     - name:desc    type: boolean
 responses:         200example: true
         descriptionstock_engine_id:
OK          allOf:
content:            - application/json$ref: '#/components/schemas/nullableStockEngineUuid'
            - schemadeprecated: true
        stock_engine_uuid:
          $ref: '#/components/schemas/GroupCollectionnullableStockEngineUuid'
        401target_language:
          $ref: '#/components/responsesschemas/401UnauthorizedtargetLanguage'
        403timestamps:
          $ref: '#/components/responsesschemas/403ForbiddenEngineTimestamps'
        500uuid:
          $ref: '#/components/responsesschemas/500InternalServerErroruuid'
  /languages:      getversion:
      tags    type: string
       - Languages  nullable: true
   security:       example: 3.5.5
 - bearer: [ ]EngineActions:
      summarytype: List languagesobject
      description: An |object describing the actions possible against an engine.
  Returns  a collection ofrequired:
languages used in Globalese.     - delete
   A translation API key can also- bedeploy
used for authentication.      - parameters:train
        - $ref: '#/components/parameters/languageUsage'translate
         - $ref: '#/components/parameters/limit'tune
         - $ref: '#/components/parameters/offset'update
      responsesproperties:
        200delete:
          descriptiontype: OK boolean
        deploy:
       content:   type: boolean
        application/jsontrain:
          type: boolean
  schema:      translate:
          $reftype: '#/components/schemas/LanguageCollection'boolean
        401tune:
          $reftype: '#/components/responses/401Unauthorized'boolean
        500update:
          $reftype: '#/components/responses/500InternalServerError'boolean
    /segment-translation-dispatchers:EngineCollection:
     get type: object
     tags required:
        - Segmentdata
translation dispatchers       security:- meta
       - bearerproperties:
[ ]       summarydata:
List segment translation dispatchers       descriptiontype: |array
         Required permissionsitems:
`MANAGE_ENGINES|SYSTEM_ADMINISTRATOR`       responses:     $ref: '#/components/schemas/Engine'
  200:      meta:
    description: OK     $ref: '#/components/schemas/CollectionMetadata'
    contentEngineCorpusIdWithVersion:
      type: object
    application/json:  required:
        - id
  schema:      - version
         $ref: '#/components/schemas/RemoteDispatcherCollection'properties:
        401id:
          $ref: '#/components/responsesschemas/401UnauthorizedcorpusId'
        403version:
          $ref: '#/components/responsesschemas/403ForbiddencorpusVersion'
    EngineCounts:
   500   type: object
      required:
      $ref: '#/components/responses/500InternalServerError'
  - corpora
      502properties:
        corpora:
     $ref: '#/components/responses/502BadGateway' components:   parameterstype: object
   corpusCatServerId:       namerequired:
cat.server.id       in: query    - core
 description: |         The ID- ofauxiliary
the CAT server the corpus is associated with.   properties:
   schema:         typecore:
number         example: 10    type: corpusIdInPath:object
      name: corpusId       descriptionproperties:
Corpus ID       in: path       requiredsegment_count:
true         schema:         type: stringnumber
        example: 5b04a7263fa509.a4444794   auxiliary:
 engineId:       name: engine_id     type: object
in: query       description: |     properties:
   Engine ID for filtering.          Examplessegment_count:
`1`,  `2`       schema:         $reftype: '#/components/schemas/engineId'number
    engineIdsEngineEvent:
      nameallOf:
engine_ids       in: query-   $ref: '#/components/schemas/Event'
   description: |    - type: object
  One or more engine ID(s) for filtering, comma-separated. required:
        Examples: `1`, `1,3,5`  - note
   schema:         oneOf:- error_code
         - typeproperties:
integer           - typeerror_code:
string       groupIds:       name$ref: group_ids'#/components/schemas/errorCode'
      in: query     note:
 description: |         One or more group ID(s) for filtering, comma-separated.$ref: '#/components/schemas/engineEventNote'
            Examplesresource_id:
`1`, `1,3,5`       schema:      $ref: '#/components/schemas/engineId'
 oneOf:           - type:
  integer           - type: string
      style: form       explode: false
    languageUsageenum:
      name: usage       in: query - created
    description: |         Filter for languages- useddeleted
in Globalese.          Optionally, the `:source` or `:target` modifier may be appended to the parameter value to filter for languages used on the source or target language side only.- instance_deployment_failed
                - instance_deployment_finished
         `usage=engines:source` will return a list of languages used as engine source languages.- instance_deployment_started
            `usage=engines` will return a list of languages used as engine languages, either source or target.- instance_removal_failed
               schema: - instance_removal_finished
      type: string         enum:
- instance_removal_started
         - engines     limit: - instance_removal_started_by_billing
    name: limit       in: query   - published
  description: |         Limit for results. *May* be used together with `offset`.- stock_engine_removed
            Examples: `25`, `50`  - training_cancelled
   schema:         type: integer   - training_failed
limitmax100:       name: limit       in: query- training_finished
     description: |         Limit for results. It cannot be greater than 100. *May* be used together with `offset`.- training_started
                - tuning_failed
   Examples: `25`, `50`          If not provided, it will automatically be set to 100.- tuning_finished
             schema:   - tuning_started
    type: integer     metadataClient:      - name:unpublished
metadata.client       in: query       description: |- updated
    EngineEventCollection:
  Client metadata descriptor.  type: object
      Examplesrequired:
`Very   Important Client`    - data
 schema:       - meta
type: string     metadataDescriptionproperties:
      name: metadata.description data:
     in: query    type: array
 description: |        items:
Description metadata descriptor.          Examples: `used for 2018 campaign`$ref: '#/components/schemas/EngineEvent'
        meta:
 schema:         type$ref: string'#/components/schemas/CollectionMetadata'
    metadataDomainengineHealth:
      nametype: metadata.domainstring
      innullable: querytrue
      descriptionenum:
|        - Domaincurrent
metadata descriptor.       - deprecated
 Examples: `legal`      - schema:supported
        type:- stringunsupported
    metadataProjectengineId:
      namedescription: Engine metadata.projectID
      intype: queryinteger
      descriptionexample: |10
    EngineInstance:
   Project metadata descriptor. type: object
       Examplesrequired:
`0192 EC Project`      - schema:id
        type: string
- engine_id
   metadataSubject:     - dispatcher_url
name: metadata.subject       in:- querystatus
      descriptionproperties:
|        id:
Subject  metadata descriptor.       $ref: '#/components/schemas/numericalId'
 Examples: `EU treaties`     engine_id:
 schema:         type$ref: string'#/components/schemas/engineId'
    numericalIds:    dispatcher_url:
  name: ids       in$ref: query'#/components/schemas/dispatcherUrl'
      description: | status:
       One or more ID(s) for filtering, comma-separated. $ref: '#/components/schemas/engineInstanceStatus'
    EngineInstanceCollection:
      Examplestype: object
`3`, `3,4`     required:
 schema:       - data
type: string       style:- formmeta
      explodeproperties:
  false      offsetdata:
      name: offset   type: array
  in: query       descriptionitems:
|         Offset to start query from. **Must** be used together with `limit`.$ref: '#/components/schemas/EngineInstance'
        meta:
     Examples: `50`, `100`   $ref: '#/components/schemas/CollectionMetadata'
  schema:  engineInstanceStatus:
      type: string
integer      sourceLanguageenum:
      name: source_language - deploying
    in: query   - error_removal_engine_manager_internal_error
  description: |     - error_removal_engine_manager_rejected_request
  Source language.     - error_removal
   Examples: `en`, `fr`   - on
  schema:      - queued
 type: string     stringIds: - removing
    nameEngineResources:
ids       intype: queryobject
      descriptionrequired:
 |       - corpora
One   or more ID(s) for filtering, comma-separated. stock_corpora
        Examples: `5b04a7263fa509.a4444794`, `5b04a7263fa509.a4444794,5b0412363fa5c1.a4354792`- stock_engine
      schemaproperties:
        typecorpora:
string       style: form  $ref: '#/components/schemas/EngineResourcesCorpora'
   explode: false    stock_corpora:
targetLanguage:       name: target_language  type: boolean
   in: query    stock_engine:
  description: |       $ref:  Target language.'#/components/schemas/EngineResourcesStockEngine'
    EngineResourcesCorpora:
      Examplestype: `en`,object
`fr`       schemadescription: An engine cannot contain more than 500 corpora type:in stringtotal.
  requestBodies:     CreateCorpusrequired:
      content:  - core
     multipart/form-data:   - auxiliary
      schemaproperties:
        auxiliary:
    $ref: '#/components/schemas/CreateCorpus'     CreateEngineInstancetype: array
     required:  true   items:
   content:         application/json$ref: '#/components/schemas/EngineCorpusIdWithVersion'
         schemacore:
            type: objectarray
            requireditems:
            $ref:  - engine_id'#/components/schemas/EngineCorpusIdWithVersion'
    EngineResourcesStockEngine:
      type: object
   - dispatcher_id  required:
        - id
properties:      properties:
        engine_id:
                $ref: '#/components/schemas/engineIduuid'
    engineStatus:
      type: string
 dispatcher_id:     enum:
        - changed
  $ref: '#/components/schemas/dispatcherId'      - error
 UpdateCorpus:       content:- queued
        multipart/form-data: trained
        - schema:training
        - tuned
  $ref: '#/components/schemas/UpdateCorpus'   responses:   - tuning
204NoContent:       description: No- Contentuntrained
    400BadRequestError:
      descriptiontype: Badobject
Request       contentproperties:
        application/jsonerror:
          schematype: string
           $refexample: '#/components/schemas/Error'"Error message."
      401Unauthorizedrequired:
      description: Unauthorized - error
    contenterrorCode:
      type: integer
   application/json:   nullable: true
      schemaexample: 104
    engineEventNote:
      $reftype: '#/components/schemas/Error' string
      403Forbiddennullable: true
     description example: InsufficientUpdated permissionsto include proofread corpus from latest project.
content:    EngineTimestamps:
    application/json:  type: object
       schemarequired:
        - deprecated_at
  $ref: '#/components/schemas/Error'     404NotFoundproperties:
 
    description: Resource not found deprecated_at:
   422UnprocessableEntity:       description$ref: Unprocessable entity'#/components/schemas/nullableTimestamp'
     500InternalServerErrorEvent:
      descriptiontype: Internalobject
server error while processing the request required:
     content:   - id
    application/json:    - resource_id
     schema:   - timestamp
        $ref: '#/components/schemas/Error'- type
    502BadGateway:    - user
 description: Bad Gateway   securitySchemesproperties:
    bearer:    id:
  type: http       scheme$ref: bearer'#/components/schemas/numericalId'
      description: API key
  schemastimestamp:
    catToolServerId:       description$ref: CAT tool server ID in Globalese'#/components/schemas/timestamp'
        user:
  type: integer       example$ref: 10'#/components/schemas/EventUser'
    catToolServerTypeEventUser:
      type: stringobject
      enumnullable: true
      required:
- memoq         - memsourceid
        - smartcatname
      properties:
 - xtm     CollectionMetadata:
      type id:
object       required:       $ref:  - counts'#/components/schemas/userId'
        propertiesname:
        counts  $ref: '#/components/schemas/userName'
    File:
      type: object
      required:
    required:    - id
        - totalactions
        - counts
   - filtered    - format
     properties:   - group_id
        total:- name
        - project_id
   description: The total number of resources- insource_language
the system, irrespective of any filters.   - status
        - target_language
type: integer       - timestamps
      exampleproperties:
100        id:
    filtered:      $ref: '#/components/schemas/fileId'
       description actions:
 The number of resources in the system matching the filters.
$ref: '#/components/schemas/FileActions'
        cat:
    type: integer     $ref: '#/components/schemas/FileCat'
        examplecounts:
40     Corpus:     $ref:  type: object'#/components/schemas/FileCounts'
        requiredformat:
        - id    $ref: '#/components/schemas/fileFormat'
   - actions    group_id:
    - cat     $ref: '#/components/schemas/groupId'
  - counts     name:
   - engines      type: string
 - format        example: -Chapter groups1.xliff
        -project_id:
metadata         - name
$ref: '#/components/schemas/projectId'
       - source_language:
          $ref: '#/components/schemas/sourceLanguage'
 - target_language      status:
  - version       properties$ref: '#/components/schemas/fileStatus'
       id target_language:
          $ref: '#/components/schemas/corpusIdtargetLanguage'
        actionstimestamps:
          $ref: '#/components/schemas/CorpusActionsFileTimestamps'
    FileActions:
   cat:   type: object
      description: An object describing the actions possible $ref: '#/components/schemas/CorpusCat'
 against a project file.
      countsrequired:
        -  $ref: '#/components/schemas/CorpusCounts'
  delete
        - deliver
     engine_ids:   - translate
      typeproperties:
array        delete:
  items:        type: boolean
   type: integer    deliver:
      example: [ 2, 8, 14type: ]boolean
        formattranslate:
          $reftype: '#/components/schemas/corpusFormat'boolean
    FileCat:
   group_ids:   type: object
      typenullable: arraytrue
      description: An object describing items:the links to a CAT tool file.
      typerequired:
integer        - file
 example:  [ 1, 3 ]properties:
        metadatafile:
          $ref: '#/components/schemas/CorpusMetadataFileCatFile'
    FileCatFile:
      nametype: object
      required:
    type: string   - id
      example: English to- Germantype
DGT.tmx        - source_language:
created_at
        - updated_at
        - $ref: '#/components/schemas/sourceLanguage'retrieved_at
        - target_language:delivered_at
      properties:
        $refid:
'#/components/schemas/targetLanguage'          versiononeOf:
            - $reftype: '#/components/schemas/corpusVersion' integer
      CorpusActions:      - type: objectstring
          descriptionexample: An5678
object describing the actions possible against a corpus. type:
     required:     $ref: '#/components/schemas/catToolServerType'
  - delete     created_at:
   - update       properties:$ref: '#/components/schemas/timestamp'
        deleteupdated_at:
          type$ref: boolean'#/components/schemas/nullableTimestamp'
        updateretrieved_at:
          type$ref: boolean'#/components/schemas/nullableTimestamp'
        CorpusCatdelivered_at:
      type:  object  $ref: '#/components/schemas/nullableTimestamp'
    nullableFileCollection:
true       descriptiontype: |object
      required:
 If the corpus was created by retrieving a- CATdata
tool server corpus, this object contains relevant information. - meta
    required:  properties:
      - corpus data:
       - server  type: array
   properties:       items:
 corpus:           $ref: '#/components/schemas/CorpusCatCorpusFile'
        servermeta:
          $ref: '#/components/schemas/CorpusCatServerCollectionMetadata'
    CorpusCatCorpusFileCounts:
      type: object
      required:
        - id total
        - new
      properties:
        idtotal:
          $ref: '#/components/schemas/remoteCorpusIdSegmentableCounts'
    CorpusCatServer:    new:
  type: object       required:$ref: '#/components/schemas/SegmentableCounts'
    fileFormat:
    - id type: string
      -enum:
type       properties: - xliff
      id:  - xliff-idiom
       $ref: '#/components/schemas/catToolServerId' - xliff-memoq
        type:- xliff-memsource
        - $ref: '#/components/schemas/catToolServerType'xliff-sap
     CorpusCollection:   - xliff-sdl
  type: object     - xliff-smartcat
required:        - xliff-translate5
data        - xliff-wordbee
 meta       properties:- xliff-wordfast
       data: - xliff-xtm
    fileId:
   type: array  description: File ID
      itemstype: string
      example: 51fc7ea3fa889.a0027797
   $ref fileStatus: '#/components/schemas/Corpus'
      type: string
    meta:  enum:
        $ref: '#/components/schemas/CollectionMetadata'- empty
    CorpusContent:    - new
 type: object      - required:queued
        - dataqueueing
        - metatranslated
      properties:  - translating
    FileTimestamps:
data:      type: object
   type: array  required:
        items:- uploaded_at
        - translated_at
 type: object    properties:
        requireduploaded_at:
          $ref: '#/components/schemas/timestamp'
  - id     translated_at:
         - content
$ref: '#/components/schemas/nullableTimestamp'
    Group:
      propertiestype: object
      required:
      id:  - id
        - name
   type: string  properties:
        id:
     example: "1"    $ref: '#/components/schemas/groupId'
        name:
  nullable: true       type: string
      content:    example: Default
    GroupCollection:
      type: object
      required:
        - required:data
      properties:
        data:
  - source       type: array
          -items:
target            $ref: '#/components/schemas/Group'
    propertiesgroupId:
  
      description: Group ID
      sourcetype: integer
      example: 2
    JobTimestamps:
      type: stringobject
      required:
        - created_at
 target:       - started_at
        - finishing_at
      typeproperties:
string         metacreated_at:
          $ref: '#/components/schemas/CollectionMetadatacreatedAt'

   CorpusCounts:       typestarted_at:
object       required:   description: Timestamp of when the job -started segment_countin ISO 8601 format
     - source_word_count    type: string
   - target_word_count      nullable: true
 - source_character_count        example: - target_character_count
      properties:"2017-08-30T04:34:26+00:00"
        segmentfinishing_countat:
          typedescription: Timestamp of integerwhen the job is estimated to finish in ISO 8601 format
example: 145952         source_word_counttype: string
         type nullable: integertrue
          example: "2043-11-03T07:53: 281980610+00:00"
    Language:
      target_word_counttype: object
      required:
  type:  integer    - id
     example properties:
3120176         source_character_countid:
          type: integerstring
          example: 24235334en-us
    LanguageCollection:
   target_character_count:   type: object
      typerequired:
 integer       - data
   example: 29194748    - CorpusEvent:meta
      allOfproperties:
        - $refdata:
'#/components/schemas/Event'         - type: objectarray
          propertiesitems:
            resource_id:$ref: '#/components/schemas/Language'
        meta:
          $ref: '#/components/schemas/corpusIdCollectionMetadata'
    nullableEngineId:
       typedescription: Engine ID
      type: integer
    type: string nullable: true
      example: 10
    enumnullableEngineVersion:
      description: Engine version
      type: -integer
 uploaded     nullable: true
      example: 4
  - updated nullableStockEngineId:
      description: Stock engine ID
     - new_version_uploaded
 nullable: true
   CorpusEventCollection:   type: integer
  type: object   example: 23
  required:  nullableStockEngineUuid:
      -description: dataStock engine UUID
      -nullable: metatrue
      propertiestype: string
       data:example: 77d3a117-43bd-401c-ab8b-75552118b2c5
    nullableTimestamp:
      type: arraystring
      nullable: true
  items:    example: "2020-06-06T10:45:00+00:00"
    numericalId:
  $ref: '#/components/schemas/CorpusEvent'   description: ID
    meta:  type: integer
       $refexample: '#/components/schemas/CollectionMetadata'10
    corpusFormatProject:
      type: stringobject
      enumrequired:
        - csv-commaid
        - csv-memoqactions
        - csv-semicolonengine_id
        - tmxengine_version
        - tbxgroup_id
        - tsvname
        - xliffsource_language
        - xliff-memoqstatus
        - xliff-memsourcestock_engine_id
        - xliff-sdlstock_engine_uuid
        - xliff-smartcattarget_language
        - xliff-translate5timestamps
      properties:
 - xliff-wordbee      id:
  - xliff-xtm     corpusId:  $ref: '#/components/schemas/projectId'
   description: Corpus ID   actions:
   type: string       example$ref: 5a0ba1267f0571.04642701'#/components/schemas/ProjectActions'
    CorpusMetadata:    cat:
  type: object       properties:$ref: '#/components/schemas/ProjectCat'
        domaincounts:
          type$ref: string'#/components/schemas/ProjectCounts'
          nullableengine_id:
true           example$ref: legal'#/components/schemas/nullableEngineId'
        subjectengine_version:
          type$ref: string'#/components/schemas/nullableEngineVersion'
          nullablegroup_id:
true           example$ref: EU treaties'#/components/schemas/groupId'
        clientname:
          type: string
          nullableexample: trueProject 1
        source_language:
example: Very Important Client       $ref:  project:'#/components/schemas/sourceLanguage'
        status:
  type: string       $ref: '#/components/schemas/ProjectStatus'
  nullable: true     stock_engine_id:
     example: 0192 EC Project  allOf:
      description:      - $ref: '#/components/schemas/nullableStockEngineUuid'
  type: string         -  nullabledeprecated: true
        stock_engine_uuid:
  example: created by DGT     CorpusVersion$ref: '#/components/schemas/nullableStockEngineUuid'
     type:  object target_language:
     required:     $ref: '#/components/schemas/targetLanguage'
  - version     timestamps:
   - counts      $ref: '#/components/schemas/ProjectTimestamps'
 - engine_ids  ProjectActions:
      -type: timestampsobject
      propertiesdescription: An object describing the actions possible against a version:project.
      required:
   $ref: '#/components/schemas/corpusVersion'    - delete
   counts:     - translate
    $ref: '#/components/schemas/CorpusCounts'   - update
    engine_ids:  properties:
        $refdelete: '#/components/schemas/CorpusVersionEngineIds'
          timestampstype: boolean
         $reftranslate:
'#/components/schemas/CorpusVersionTimestamps'     corpusVersion:     type: boolean
description: The version of the corpus    update:
  type: integer       exampletype: 1boolean
    CorpusVersionCollectionProjectCat:
      type: object
      requirednullable: true
      description: -An dataobject describing the links to a CAT tool server -and metaproject.
      propertiesrequired:
        data:- project
        - server
 type: array    properties:
      items:  project:
          $ref: '#/components/schemas/CorpusVersionProjectCatProject'
        metaserver:
          $ref: '#/components/schemas/CollectionMetadataProjectCatServer'
    CorpusVersionEngineIdsProjectCatProject:
      type: object
      required:
        - trainedid
        - tunedname
      properties:
        trained:id:
          oneOf:
            - type: integer
            - type: arraystring
          itemsexample: 849660f2-d081-4d7f-b266-f526ad073521
        name:
          type: integerstring
          example: My CAT server project
    ProjectCatServer:
 [ 2, 8, 14 ] type: object
      tunedrequired:
        - id
  type: array
      - name
        - type
      properties:
         itemsid:

           type: integer
          example: [5
2, 8, 14 ]     CorpusVersionTimestampsname:
      type: object       requiredtype: string
       - created_at  example: My CAT server  properties:connection
        created_attype:
          $ref: '#/components/schemas/createdAtcatToolServerType'
    CreateCorpusProjectCollection:
      type: object
      required:
        - filedata
        - format
 meta
      - group_ids[]
      properties:
        filedata:
          type: objectarray
          formatitems:
            $ref: '#/components/schemas/corpusFormatProject'
        group_ids[]meta:
          $ref: '#/components/schemas/groupIdCollectionMetadata'
    ProjectCounts:
   source_language:   type: object
      $refrequired:
'#/components/schemas/sourceLanguage'        - target_language:files
          $ref: '#/components/schemas/targetLanguage'properties:
        metadata[domain]files:
          type: stringnumber
          example: legal5
    projectId:
   metadata[subject]:   description: Project ID
      type: stringinteger
          example: EU30
treaties    projectName:
    metadata[client]:  type: string
       typeexample: stringMy Project
    ProjectStatus:
    example: Very Important Client type: string
      metadata[project]enum:
        - empty
type: string       - new
  example: 0192 EC Project   - queued
    metadata[description]:    - started
     type: string  - translated
       example: created- bytranslating
DGT     createdAtProjectTimestamps:
      descriptiontype: Createdobject
timestamp in ISO 8601 format  required:
    type: string   - created_at
  example: "2017-08-30T04:34:26+00:00"      - dispatcherId:updated_at
      descriptionproperties:
Segment-based  translation dispatcher ID    created_at:
  type: integer       example$ref: 1'#/components/schemas/createdAt'
    dispatcherRegion:    updated_at:
  type: string       example$ref: "europe-west1"'#/components/schemas/updatedAt'
    dispatcherUrlremoteCorpusId:
      typedescription: stringThe ID of the corpus on the example: "https://dispatcher-europe-west1-ja6vheawuq-ew.a.run.app"CAT tool server.
      EngineoneOf:
        - type: number
object        - requiredtype: string
      example: "a6fd0c40- id7b5c-48bf-89c2-629417b398cd"
    RemoteDispatcherCollection:
    - group_id  type: object
     - instance_idsrequired:
        - namedata
        - source_languagemeta
      properties:
 - target_language      data:
  - uuid       propertiestype: array
       id:   items:
            $ref: '#/components/schemas/engineIdRemoteDispatcher'
        group_idmeta:
          $ref: '#/components/schemas/groupIdCollectionMetadata'
        instance_ids:
  RemoteDispatcher:
       type: arrayobject
      required:
   items:     - id
      $ref: '#/components/schemas/numericalId'
  - region
      name:  - url
       type: string- timestamps
         exampleproperties:
Engine 1         source_languageid:
          $ref: '#/components/schemas/sourceLanguagedispatcherId'
        target_languageregion:
          $ref: '#/components/schemas/targetLanguagedispatcherRegion'
        uuidurl:
          $ref: '#/components/schemas/engineUuiddispatcherUrl'
    EngineCollection:    timestamps:
  type: object       required$ref: '#/components/schemas/RemoteDispatcherTimestamps'
      RemoteDispatcherTimestamps:
- data         - metatype: object
      propertiesrequired:
        data:- created_at
        - type:updated_at
array      properties:
    items:    created_at:
          $ref: '#/components/schemas/EnginecreatedAt'
        metaupdated_at:
          $ref: '#/components/schemas/CollectionMetadataupdatedAt'
    engineIdsourceLanguage:
      description: Source Enginelanguage IDcode
      type: integerstring
      example: 10en-us
    EngineInstanceStockEngine:
      type: object
      required:
        - id
        - enginesource_idlanguage
        - dispatchertarget_urllanguage
        - statusversion
      properties:  - timestamps
     id:
          $ref: '#/components/schemas/numericalId' properties:
        engine_id:
          $ref: '#/components/schemas/engineId'
        dispatcher_url:
          $ref: '#/components/schemas/dispatcherUrl'
        status:
          $ref: '#/components/schemas/engineInstanceStatus'
    EngineInstanceCollection:
      type: objectstockEngineId'
      required:  source_language:
      - data   $ref: '#/components/schemas/sourceLanguage'
    - meta   target_language:
   properties:         data$ref: '#/components/schemas/targetLanguage'
         typeversion: array
          itemstype: string
           $ref: '#/components/schemas/EngineInstance'example: 4.1.0
        metatimestamps:
          $ref: '#/components/schemas/CollectionMetadataStockEngineTimestamps'
    engineInstanceStatusstockEngineId:
      typedescription: stringStock engine ID
      enumtype: integer
      example: -5
deploying    StockEngineTimestamps:
    - error_removal_engine_manager_internal_error
  type: object
      - error_removal_engine_manager_rejected_requestrequired:
         - errorcreated_removalat
      properties:
 - on      created_at:
  - queued       $ref:  - removing'#/components/schemas/createdAt'
      engineUuid:  updated_at:
    type: string       example: "21cfda50-1944-46fc-901c-04a168ea6fee"$ref: '#/components/schemas/updatedAt'
    ErrortargetLanguage:
      typedescription: Target language objectcode
      propertiestype: string
       errorexample: it
         typetimestamp:
string      description: Timestamp in ISO 8601 example:format
"Error message."       requiredtype: string
      example: "2020-06- error06T10:45:00+00:00"
     EventTrainingJob:
      type: object
      required:
        - id
        - resourceengine_id
        - timestamppercentage
        - type
        - usertimestamps
      properties:
        id:
          $ref: '#/components/schemas/numericalId'
        timestampengine_id:
          $ref: '#/components/schemas/timestampengineId'
        userprogress:
          $refdescription: '#/components/schemas/EventUser'
 Training progress as percentage.
   EventUser:       type: objectinteger
          nullable: true
      required:    example: 60
   - id    timestamps:
    - name     $ref:  properties:'#/components/schemas/JobTimestamps'
    TrainingJobCollection:
    id:  type: object
       $refrequired:
'#/components/schemas/userId'        - name:data
        - meta
$ref: '#/components/schemas/userName'     Groupproperties:
        typedata:
object       required:   type: array
    - id     items:
   -  name       properties$ref: '#/components/schemas/TrainingJob'
        idmeta:
          $ref: '#/components/schemas/groupIdCollectionMetadata'
    TranslationJob:
   name:   type: object
      typerequired:
string        -   example:id
Default     GroupCollection:   - file_id
  type: object     - project_id
required:         - datatimestamps
      properties:
        dataid:
          type$ref: array'#/components/schemas/numericalId'
          itemsfile_id:
            $ref: '#/components/schemas/GroupfileId'
        groupIdproject_id:
        description  $ref: Group ID'#/components/schemas/projectId'
        typetimestamps:
integer          example$ref: 2'#/components/schemas/JobTimestamps'
    LanguageTranslationJobCollection:
      type: object
      required:
        - id data
        - meta
      properties:
        iddata:
          type: stringarray
          exampleitems:
en-us            $ref: '#/components/schemas/TranslationJob'
 LanguageCollection:       typemeta:
object       required:   $ref: '#/components/schemas/CollectionMetadata'
    -UpdateCorpus:
data      type:  object
- meta       properties:
        dataname:
          type$ref: array'#/components/schemas/corpusName'
          items:
 group_ids:
          $ref: '#/components/schemas/LanguagecorpusGroupIds'
        metametadata:
          $ref: '#/components/schemas/CollectionMetadataCorpusMetadata'
    numericalIdUpdateCorpusContent:
      descriptiontype: IDobject
      typerequired:
integer        - file
example: 10     remoteCorpusIdproperties:
        descriptionfile:
The ID of the corpus on the CAT tool server. type: object
    oneOfupdatedAt:
      description: Updated -timestamp type:in numberISO 8601 format
      - type: string
      nullable: true
      example: "a6fd0c402017-7b5c-48bf-89c2-629417b398cd08-30T04:34:26+00:00"
    RemoteDispatcherCollectionUpdateProject:
      type: object
      requiredproperties:
        -name:
data         - meta
$ref: '#/components/schemas/projectName'
     properties:         dataengine_id:
          type: array   $ref: '#/components/schemas/nullableEngineId'
      items:  engine_version:
          $ref: '#/components/schemas/RemoteDispatchernullableEngineVersion'
        metastock_engine_id:
          $ref: '#/components/schemas/CollectionMetadatanullableStockEngineId'
    RemoteDispatcherUpdateEngine:
      type: object
      requiredproperties:
        -name:
id         - regiontype: string
       - url  example: Engine   1
  - timestamps       propertiesnote:
        id:           $ref: '#/components/schemas/dispatcherIdengineEventNote'
        regionpublished:
          $reftype: '#/components/schemas/dispatcherRegion'
boolean
       url:           $ref: '#/components/schemas/dispatcherUrl'example: true
        timestampsresources:
          $ref: '#/components/schemas/RemoteDispatcherTimestampsUpdateEngineResources'
    RemoteDispatcherTimestampsUpdateEngineResources:
      type: object
      required:
        - created_at
        - updated_at
      properties:
        createdcorpus_atids:
          $ref: '#/components/schemas/createdAtUpdateEngineResourcesCorpusIds'
        updatedstock_atcorpora:
          $reftype: '#/components/schemas/updatedAt'
boolean
   sourceLanguage:       description: SourceWhether languageor codenot  to use available stock corpora type:for stringtraining the engine.
    exampleUpdateEngineResourcesCorpusIds:
 en-us     targetLanguagetype: object
     description properties:
Target language code      core:
type:   string       exampletype: itarray
    timestamp:      items:
description: Timestamp in ISO 8601 format       type: string
      example: "2020-06-06T10:45:00+00:00"     UpdateCorpusexample: [ '51fc7ea3fa889.b0027797', '54018363fa5c1.044227af' ]
  type: object       requiredauxiliary:
        - file type:  array
   properties:       items:
 file:           type: object
string
   updatedAt:       descriptionexample: Updated timestamp in ISO 8601 format[ '5b04a7263fa509.77444794', '5b0412363fa5c1.c4354792' ]
       type: stringuserId:
      nullabletype: trueinteger
      example: "2017-08-30T04:34:26+00:00"5
    userIduserName:
      type: integerstring
      example: John 5Doe
    userNameuuid:
      type: string
      example: John Doe"21cfda50-1944-46fc-901c-04a168ea6fee"