Versions Compared

Key

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

...

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: 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/limitMax100'
        - $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'
    patch:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: Update a corpus
      description: |
        Required permissions:
        `MANAGE_CORPORA` in all the groups the corpus belongs to,
        or `SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/UpdateCorpus'
      responses:
        200:
          description: OK
          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'
    delete:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: Delete a corpus
      description: |
        Delete a corpus.

        Required permissions:
        `MANAGE_CORPORA` in all the groups the corpus 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'
  /corpora/{corpusId}/content:
    parameters:
      - $ref: '#/components/parameters/corpusIdInPath'
    get:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: Corpus content
      description: |
        Returns segments of a corpus.

        Required permissions:
        `MANAGE_CORPORA` in any of the groupgroups the corpus belongs to,
        or `SYSTEM_ADMINISTRATOR`
      parameters:
        - $ref: '#/components/parameters/limitMax100'
        - $ref: '#/components/parameters/offset'
      responses:
        200:
          description: OK
          content:
            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}/events:
    parameters:
      - $ref: '#/components/parameters/corpusIdInPath'
    get:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: Show the event log of a corpus
      description: |
        Returns a list of events from the corpus log.

        Required permissions:
        `MANAGE_CORPORA` in any of the groupgroups the corpus 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/CorpusEventCollection'
        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'
    get:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: List all versions of a corpus
      description: |
        Returns details about each version of a corpus:
        * corpus counts
        * engine IDs that used the currentcorpus corpusversion for training

       * engineRequired IDspermissions:
that used the current corpus for tuning  `MANAGE_CORPORA`        Required permissions: or `MANAGE_CORPORA`ENGINES` in any of the groupgroups the corpus belongs to,
        or `SYSTEM_ADMINISTRATOR`
      parameters:
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - counts.segment_count:asc
              - counts.segment_count:desc
              - version:asc
              - version:desc
        - $ref: '#/components/parameters/limitMax100'
        - $ref: '#/components/parameters/offset'
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CorpusVersionCollection'
        401:
          $ref: '#/components/responses/401Unauthorized'
        403:
          $ref: '#/components/responses/403Forbidden'
        404:
          $ref: '#/components/responses/404NotFound'
        500:
          $ref: '#/components/responses/500InternalServerError'
    post:
      tags:
        - Corpora
      security:
        - bearer: [ ]
      summary: Update corpus content
      description: |
        Update the contents of a corpus, creating a new version thereof.

        The format of the uploaded content must be the same as the format of the original content.

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

        Required permissions:
        `MANAGE_CORPORA` in any of the groupgroups the corpus belongs to,
        or `SYSTEM_ADMINISTRATOR`
      requestBody:
        $ref: '#/components/requestBodies/UpdateCorpusContent'
      responses:
        201:
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CorpusVersion'
        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:
    get:
      tags:
        - 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'
        - $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's resources.

        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/translation:
    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'
  /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_id` is required.

        Required permissions: `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`
      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: query
      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
    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
    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
    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'
    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
        - enginescurrent_version
        - formatengines
        - groupsformat
        - metadatagroups
        - namemetadata
        - source_languagename
        - targetsource_language
        - versiontarget_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'
        version:
          $ref: '#/components/schemas/corpusVersion'
    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:
        versioncorpus_id:
          $ref: '#/components/schemas/corpusVersioncorpusId'
        countsversion:
          $ref: '#/components/schemas/CorpusCountscorpusVersion'
        engine_idscounts:
          $ref: '#/components/schemas/CorpusVersionEngineIdsCorpusCounts'
        timestampsengine_ids:
          $ref: '#/components/schemas/CorpusVersionTimestampsCorpusVersionEngineIds'
        corpusVersiontimestamps:
      description: The version of the corpus    $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: objectarray
      requireditems:
        -type: trainedinteger
      example: [ -2, tuned8, 14 ]
    propertiesCorpusVersionTimestamps:
      type: object
trained:      required:
    type: array   - created_at
      itemsproperties:
            typecreated_at:
integer           example: [ 2, 8, 14 ]
        tuned:
          type: array
          items:
            type: integer
          example: [ 2, 8, 14 ]
    CorpusVersionTimestamps:
      type: object
      required:
        - created_at
      properties:
        created_at:
          $ref: $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_id:
          $ref: '#/components/schemas/nullableStockEngineId'
    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
          example: Project 1
        source_language:
          $ref: '#/components/schemas/sourceLanguage'
        target_language:
          $ref: '#/components/schemas/targetLanguage'
        group_id:
          $ref: '#/components/schemas/groupId'
        engine_id:
          $ref: '#/components/schemas/nullableEngineId'
        stock_engine_id:
          $ref: '#/components/schemas/nullableStockEngineId'
        cat:
          $ref: '#/components/schemas/CreateProjectCat'
    CreateProjectCat:
      type: object
      required:
        - server
        - project
      properties:
        server:
          $ref: '#/components/schemas/CreateProjectCatServer'
        project:
          $ref: '#/components/schemas/CreateProjectCatProject'
    CreateProjectCatServer:
      type: object
      required:
        - id
      properties:
        id:
          type: integer
          description: CAT tool server connection ID as stored in Globalese.
          example: 2
    CreateProjectCatProject:
      type: object
      required:
        - id
      properties:
        id:
          oneOf:
            - type: integer
            - type: string
          description: CAT tool project ID as stored on the CAT tool server.
          example: 5987c27a-da1e-4060-b08d-00aa6dbd0bba
    CreateTranslationJob:
      type: object
      required:
        - file_id
      properties:
        file_id:
          $ref: '#/components/schemas/fileId'
    dispatcherId:
      description: Segment-based translation dispatcher ID
      type: integer
      example: 1
    dispatcherRegion:
      type: string
      example: "europe-west1"
    dispatcherUrl:
      type: string
      example: "https://dispatcher-europe-west1-ja6vheawuq-ew.a.run.app"
    Engine:
      type: object
      required:
        - id
        - actions
        - counts
        - group_id
        - health
        - instance_ids
        - name
        - published
        - source_language
        - status
        - stock_corpora
        - stock_engine_id
        - target_language
        - uuid
        - version
      properties:
        id:
          $ref: '#/components/schemas/engineId'
        actions:
          $ref: '#/components/schemas/EngineActions'
        counts:
          $ref: '#/components/schemas/EngineCounts'
        group_id:
          $ref: '#/components/schemas/groupId'
        health:
          type$ref: string'#/components/schemas/engineHealth'
          nullableinstance_ids:
true           enumtype: array
          items:
- current             - deprecated
            - supported
        instance_ids:
          type: array
          items:
            $ref: $ref: '#/components/schemas/numericalId'
        name:
          type: string
          example: Engine 1
        published:
          type: boolean
          example: true
        source_language:
          $ref: '#/components/schemas/sourceLanguage'
        status:
          $ref: '#/components/schemas/engineStatus'
        stock_corpora:
          type: boolean
          example: true
        stock_engine_id:
          $ref: '#/components/schemas/nullableStockEngineId'
        target_language:
          $ref: '#/components/schemas/targetLanguage'
        uuid:
          $ref: '#/components/schemas/uuid'
        version:
          type: string
          nullable: true
          example: 3.5.5
    EngineActions:
      type: object
      description: An object describing the actions possible against an engine.
      required:
        - delete
        - deploy
        - train
        - translate
        - tune
        - update
      properties:
        delete:
          type: boolean
        deploy:
          type: boolean
        train:
          type: boolean
        translate:
          type: boolean
        tune:
          type: boolean
        update:
          type: boolean
    EngineCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Engine'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    EngineCorporaEngineCorpusIdWithVersion:
      type: object
      description: An engine cannot contain more than 500 corpora in total.
      required:
        - coreid
        - auxiliaryversion
        - stock
      properties:
        auxiliaryid:
          type$ref: array'#/components/schemas/corpusId'
          itemsversion:
 
          $ref: '#/components/schemas/EngineCorpusIdWithVersioncorpusVersion'
        coreEngineCounts:

         type: arrayobject
      required:
   items:     - corpora
      $ref: '#/components/schemas/EngineCorpusIdWithVersion'properties:
        stockcorpora:
          type: booleanobject
    EngineCorpusIdWithVersion:       typerequired:
object       required:     - core
  - id         - versionauxiliary
      properties:    properties:
    id:           $ref: '#/components/schemas/corpusId'
        version:
          $ref: '#/components/schemas/corpusVersion'
    EngineCounts:
      type: object
      required:
        - corpora
      properties:
        corpora:
          type: object
          required:
            - core
            - auxiliary
          properties:
            core:
              type: object
              properties:
                segment_count:
                  type: number
            auxiliary:
              type: object
              properties:
                segment_count:
                  type: number
    EngineEvent:
      allOf:
        - $ref: '#/components/schemas/Event'
        - type: object
          properties:
            error_code:
              $ref: '#/components/schemas/errorCode'
            resource_id:
              $ref: '#/components/schemas/engineId'
            type:
              type: string
              enum:
                - created
                - deleted
                - instance_deployment_failed
                - instance_deployment_finished
                - instance_deployment_started
                - instance_removal_failed
                - instance_removal_finished
                - instance_removal_started
                - instance_removal_started_by_billing
                - published
                - stock_engine_removed
                - training_cancelled
                - training_failed
                - training_finished
                - training_started
                - tuning_failed
                - tuning_finished
                - tuning_started
                - unpublished
                - updated
    EngineEventCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/EngineEvent'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    engineIdengineHealth:
      descriptiontype: Enginestring
ID      nullable: true
      enum:
        - current
        - deprecated
        - supported
        - unsupported
    engineId:
      description: Engine ID
      type: integer
      example: 10
    EngineInstance:
      type: object
      required:
        - id
        - engine_id
        - dispatcher_url
        - status
      properties:
        id:
          $ref: '#/components/schemas/numericalId'
        engine_id:
          $ref: '#/components/schemas/engineId'
        dispatcher_url:
          $ref: '#/components/schemas/dispatcherUrl'
        status:
          $ref: '#/components/schemas/engineInstanceStatus'
    EngineInstanceCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/EngineInstance'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    engineInstanceStatus:
      type: string
      enum:
        - deploying
        - error_removal_engine_manager_internal_error
        - error_removal_engine_manager_rejected_request
        - error_removal
        - on
        - queued
        - removing
    EngineResources:
      type: object
      required:
        - corpora
        - stock_corpora
        - stock_engine
      properties:
        corpora:
          $ref: '#/components/schemas/EngineResourcesCorpora'
        stock_corpora:
          type: boolean
        stock_engine:
          $ref: '#/components/schemas/StockEngineEngineResourcesStockEngine'
    EngineResourcesCorpora:
      type: object
      description: An engine cannot contain more than 500 corpora in total.
      required:
        - currentcore
        - trained auxiliary
      properties:
        auxiliary:
  - tuned       propertiestype: array
          currentitems:
            $ref: '#/components/schemas/EngineCorpora'EngineCorpusIdWithVersion'
        core:
          type: array
          traineditems:
            $ref: '#/components/schemas/EngineCorporaEngineCorpusIdWithVersion'
    EngineResourcesStockEngine:
      tunedtype: object
      required:
    type: array   - id
      items:properties:
        id:
          $ref: '#/components/schemas/EngineCorpusIdWithVersionuuid'
    engineStatus:
      type: string
      enum:
        - changed
        - error
        - queued
        - trained
        - training
        - tuned
        - tuning
        - untrained
    Error:
      type: object
      properties:
        error:
          type: string
          example: "Error message."
      required:
        - error
    errorCode:
      type: integer
      nullable: true
      example: 104
    Event:
      type: object
      required:
        - id
        - resource_id
        - timestamp
        - type
        - user
      properties:
        id:
          $ref: '#/components/schemas/numericalId'
        timestamp:
          $ref: '#/components/schemas/timestamp'
        user:
          $ref: '#/components/schemas/EventUser'
    EventUser:
      type: object
      nullable: true
      required:
        - id
        - name
      properties:
        id:
          $ref: '#/components/schemas/userId'
        name:
          $ref: '#/components/schemas/userName'
    File:
      type: object
      required:
        - id
        - actions
        - counts
        - format
        - group_id
        - name
        - project_id
        - source_language
        - status
        - target_language
        - timestamps
      properties:
        id:
          $ref: '#/components/schemas/fileId'
        actions:
          $ref: '#/components/schemas/FileActions'
        cat:
          $ref: '#/components/schemas/FileCat'
        counts:
          $ref: '#/components/schemas/FileCounts'
        format:
          $ref: '#/components/schemas/fileFormat'
        group_id:
          $ref: '#/components/schemas/groupId'
        name:
          type: string
          example: Chapter 1.xliff
        project_id:
          $ref: '#/components/schemas/projectId'
        source_language:
          $ref: '#/components/schemas/sourceLanguage'
        status:
          $ref: '#/components/schemas/fileStatus'
        target_language:
          $ref: '#/components/schemas/targetLanguage'
        timestamps:
          $ref: '#/components/schemas/FileTimestamps'
    FileActions:
      type: object
      description: An object describing the actions possible against a project file.
      required:
        - delete
        - deliver
        - translate
      properties:
        delete:
          type: boolean
        deliver:
          type: boolean
        translate:
          type: boolean
    FileCat:
      type: object
      nullable: true
      description: An object describing the links to a CAT tool file.
      required:
        - file
      properties:
        file:
          $ref: '#/components/schemas/FileCatFile'
    FileCatFile:
      type: object
      required:
        - id
        - type
        - created_at
        - updated_at
        - retrieved_at
        - delivered_at
      properties:
        id:
          oneOf:
            - type: integer
            - type: string
          example: 5678
        type:
          $ref: '#/components/schemas/catToolServerType'
        created_at:
          $ref: '#/components/schemas/timestamp'
        updated_at:
          $ref: '#/components/schemas/nullableTimestamp'
        retrieved_at:
          $ref: '#/components/schemas/nullableTimestamp'
        delivered_at:
          $ref: '#/components/schemas/nullableTimestamp'
    FileCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/File'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    FileCounts:
      type: object
      required:
        - total
        - new
      properties:
        total:
          $ref: '#/components/schemas/SegmentableCounts'
        new:
          $ref: '#/components/schemas/SegmentableCounts'
    fileFormat:
      type: string
      enum:
        - xliff
        - xliff-idiom
        - xliff-memoq
        - xliff-memsource
        - xliff-sap
        - xliff-sdl
        - xliff-smartcat
        - xliff-translate5
        - xliff-wordbee
        - xliff-wordfast
        - xliff-xtm
    fileId:
      description: File ID
      type: string
      example: 51fc7ea3fa889.a0027797
    fileStatus:
      type: string
      enum:
        - empty
        - new
        - queued
        - queueing
        - translated
        - translating
    FileTimestamps:
      type: object
      required:
        - uploaded_at
        - translated_at
      properties:
        uploaded_at:
          $ref: '#/components/schemas/timestamp'
        translated_at:
          $ref: '#/components/schemas/nullableTimestamp'
    Group:
      type: object
      required:
        - id
        - name
      properties:
        id:
          $ref: '#/components/schemas/groupId'
        name:
          type: string
          example: Default
    GroupCollection:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Group'
    groupId:
      description: Group ID
      type: integer
      example: 2
    JobTimestamps:
      type: object
      required:
        - created_at
        - started_at
        - finishing_at
      properties:
        created_at:
          $ref: '#/components/schemas/createdAt'
        started_at:
          description: Timestamp of when the job started in ISO 8601 format
          type: string
          nullable: true
          example: "2017-08-30T04:34:26+00:00"
        finishing_at:
          description: Timestamp of when the job is estimated to finish in ISO 8601 format
          type: string
          nullable: true
          example: "2043-11-03T07:53:10+00:00"
    Language:
      type: object
      required:
        - id
      properties:
        id:
          type: string
          example: en-us
    LanguageCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Language'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    nullableEngineId:
      description: Engine ID
      type: integer
      nullable: true
      example: 10
    nullableStockEngineId:
      description: Stock engine ID
      nullable: true
      type: integer
      example: 23
    nullableTimestamp:
      type: string
      nullable: true
      example: "2020-06-06T10:45:00+00:00"
    numericalId:
      description: ID
      type: integer
      example: 10
    Project:
      type: object
      required:
        - id
        - actions
        - engine_id
        - group_id
        - name
        - source_language
        - status
        - stock_engine_id
        - target_language
        - timestamps
      properties:
        id:
          $ref: '#/components/schemas/projectId'
        actions:
          $ref: '#/components/schemas/ProjectActions'
        cat:
          $ref: '#/components/schemas/ProjectCat'
        counts:
          $ref: '#/components/schemas/ProjectCounts'
        engine_id:
          $ref: '#/components/schemas/nullableEngineId'
        group_id:
          $ref: '#/components/schemas/groupId'
        name:
          type: string
          example: Project 1
        source_language:
          $ref: '#/components/schemas/sourceLanguage'
        status:
          $ref: '#/components/schemas/ProjectStatus'
        stock_engine_id:
          $ref: '#/components/schemas/nullableStockEngineId'
        target_language:
          $ref: '#/components/schemas/targetLanguage'
        timestamps:
          $ref: '#/components/schemas/ProjectTimestamps'
    ProjectActions:
      type: object
      description: An object describing the actions possible against a project.
      required:
        - delete
        - translate
        - update
      properties:
        delete:
          type: boolean
        translate:
          type: boolean
        update:
          type: boolean
    ProjectCat:
      type: object
      nullable: true
      description: An object describing the links to a CAT tool server and project.
      required:
        - project
        - server
      properties:
        project:
          $ref: '#/components/schemas/ProjectCatProject'
        server:
          $ref: '#/components/schemas/ProjectCatServer'
    ProjectCatProject:
      type: object
      required:
        - id
        - name
      properties:
        id:
          oneOf:
            - type: integer
            - type: string
          example: 849660f2-d081-4d7f-b266-f526ad073521
        name:
          type: string
          example: My CAT server project
    ProjectCatServer:
      type: object
      required:
        - id
        - name
        - type
      properties:
        id:
          type: integer
          example: 5
        name:
          type: string
          example: My CAT server connection
        type:
          $ref: '#/components/schemas/catToolServerType'
    ProjectCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Project'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    ProjectCounts:
      type: object
      required:
        - files
      properties:
        files:
          type: number
          example: 5
    projectId:
      description: Project ID
      type: integer
      example: 30
    projectName:
      type: string
      example: My Project
    ProjectStatus:
      type: string
      enum:
        - empty
        - new
        - queued
        - started
        - translated
        - translating
    ProjectTimestamps:
      type: object
      required:
        - created_at
        - updated_at
      properties:
        created_at:
          $ref: '#/components/schemas/createdAt'
        updated_at:
          $ref: '#/components/schemas/updatedAt'
    remoteCorpusId:
      description: The ID of the corpus on the CAT tool server.
      oneOf:
        - type: number
        - type: string
      example: "a6fd0c40-7b5c-48bf-89c2-629417b398cd"
    RemoteDispatcherCollection:
      type: object
      required:
        - data
        - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/RemoteDispatcher'
        meta:
          $ref: '#/components/schemas/CollectionMetadata'
    RemoteDispatcher:
      type: object
      required:
        - id
        - region
        - url
        - timestamps
      properties:
        id:
          $ref: '#/components/schemas/dispatcherId'
        region:
          $ref: '#/components/schemas/dispatcherRegion'
        url:
          $ref: '#/components/schemas/dispatcherUrl'
        timestamps:
          $ref: '#/components/schemas/RemoteDispatcherTimestamps'
    RemoteDispatcherTimestamps:
      type: object
      required:
        - created_at
        - updated_at
      properties:
        created_at:
          $ref: '#/components/schemas/createdAt'
        updated_at:
          $ref: '#/components/schemas/updatedAt'
    sourceLanguage:
      description: Source language code
      type: string
      example: en-us
    StockEngine:
      type: object
      required:
        - id
        - source_language
        - target_language
        - version
        - timestamps
      properties:
        id:
          $ref: '#/components/schemas/stockEngineId'
        source_language:
          $ref: '#/components/schemas/sourceLanguage'
        target_language:
          $ref: '#/components/schemas/targetLanguage'
        version:
          type: string
          example: 4.1.0
        timestamps:
          $ref: '#/components/schemas/StockEngineTimestamps'
    stockEngineId:
      description: Stock engine ID
      type: integer
      example: 5
    StockEngineTimestamps:
      type: object
      required:
        - created_at
      properties:
        created_at:
          $ref: '#/components/schemas/createdAt'
        updated_at:
          $ref: '#/components/schemas/updatedAt'
    targetLanguage:
      description: Target language code
      type: string
      example: it
    timestamp:
      description: Timestamp in ISO 8601 format
      type: string
      example: "2020-06-06T10:45:00+00:00"
    TranslationJob:
      type: object
      required:
        - id
        - file_id
        - project_id
        - timestamps
      properties:
        id:
          $ref: '#/components/schemas/numericalId'
        file_id:
          $ref: '#/components/schemas/fileId'
        project_id:
          $ref: '#/components/schemas/projectId'
        timestamps:
          $ref: '#/components/schemas/JobTimestamps'
    UpdateCorpus:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/corpusName'
        group_ids:
          $ref: '#/components/schemas/corpusGroupIds'
        metadata:
          $ref: '#/components/schemas/CorpusMetadata'
    UpdateCorpusContent:
      type: object
      required:
        - file
      properties:
        file:
          type: object
    updatedAt:
      description: Updated timestamp in ISO 8601 format
      type: string
      nullable: true
      example: "2017-08-30T04:34:26+00:00"
    UpdateProject:
      type: object
      properties:
        name:
          $ref: '#/components/schemas/projectName'
        engine_id:
          $ref: '#/components/schemas/nullableEngineId'
        stock_engine_id:
          $ref: '#/components/schemas/nullableStockEngineId'
    UpdateEngine:
      type: object
      properties:
        name:
          type: string
          example: Engine 1
        published:
          type: boolean
          example: true
        resources:
          $ref: '#/components/schemas/UpdateEngineResources'
    UpdateEngineResources:
      type: object
      properties:
        corpus_ids:
          $ref: '#/components/schemas/UpdateEngineResourcesCorpusIds'
        stock_corpora:
          type: boolean
          description: Whether or not to use available stock corpora for training the engine.
    UpdateEngineResourcesCorpusIds:
      type: object
      properties:
        core:
          type: array
          items:
            type: string
          example: [ '51fc7ea3fa889.b0027797', '54018363fa5c1.044227af' ]
        auxiliary:
          type: array
          items:
            type: string
          example: [ '5b04a7263fa509.77444794', '5b0412363fa5c1.c4354792' ]
    userId:
      type: integer
      example: 5
    userName:
      type: string
      example: John Doe
    uuid:
      type: string
      example: "21cfda50-1944-46fc-901c-04a168ea6fee"