openapi: 3.0.0
info:
  title: 'Crowdin API v2'
  description: "\n# Introduction\nWelcome to Crowdin API v2 documentation.\n\nOur API is a full-featured RESTful API that helps you to integrate localization into your development process. The endpoints that we use allow you to easily make calls to retrieve information and to execute actions needed.\n\nMost of the functionality of Crowdin is available through the API. It allows you to create projects for translations, add and update files, download translations, and much more. In this way, you can script the complex actions that your situation requires.\n\n## Authorization\nTo work with Crowdin API v2 use one of the following access tokens:\n * [_Personal Access Token_](https://support.crowdin.com/account-settings/#personal-access-tokens)\n * [_OAuth Access Token_](https://developer.crowdin.com/authorizing-oauth-apps/#make-requests-to-the-api-with-the-access-token-returned)\n\nMake sure to use the following __header__ in your requests:\n\n`Authorization: Bearer <ACCESS_TOKEN>`\n\nResponses in case authorization fail:\n\n__401 Unauthorized__\n```\n{\n  \"error\": {\n    \"message\": \"Unauthorized\",\n    \"code\": 401\n  }\n}\n```\n\n__403 Forbidden__\n```\n{\n  \"error\": {\n    \"message\": \"Not allowed space for your token\",\n    \"code\": 403\n  }\n}\n```\n\n## Scopes\nSome endpoints may require specific scopes to be granted to your access token. Each endpoint's documentation indicates the required scope (e.g., `project` or `project.settings`). Learn more: [_Understanding Scopes_](https://support.crowdin.com/developer/understanding-scopes/)\n\nIf you attempt to access an endpoint without the required scope, you will receive the following response:\n\n__403 Forbidden__\n```\n{\n  \"error\": {\n    \"message\": \"Not allowed endpoint for token scopes\",\n    \"code\": 403\n  }\n}\n```\n\n## Making Requests\nAll requests should be made using the HTTPS protocol so that traffic is encrypted. The interface responds to different methods depending on the action required.\n\nWhen a request is successful, a response will typically be sent back in the form of a JSON object. If you specify `Accept` header response will be `application/json`. It's not required to specify `Accept` header so you can leave it empty.\n\nThe API expects all writing requests (_POST_, _PUT_, _PATCH_) in JSON format with the `Content-Type: application/json` header. This ensures that your request is interpreted correctly.\n\n__Note:__ `Content-Type` header can be different (e.g. `image/jpeg`, `text/csv`) if you upload the file using _POST_ methods with a specified content type.\n\nRESTful APIs enable you to call individual API endpoints to perform the following requests:\n\n<span class='http-method method-list get'>GET</span> - for simple retrieval of information about source files, translations, or projects. The information you request will be returned to you as a JSON object. The attributes defined by the JSON object can be used to form additional requests.\\\n<span class='http-method method-list post'>POST</span> - to create or add a new element. This request includes all of the attributes necessary to create a new object.\\\n<span class='http-method method-list put'>PUT</span> - to update or replace the specific element. This request sets the state of the target using the provided values, regardless of their current values.\\\n<span class='http-method method-list patch'>PATCH</span> - to edit some specific fields of an entity. With these requests, you only need to provide the data you want to change.\\\n<span class='http-method method-list delete'>DELETE</span> - to remove element from your account. Request works if specified object is found. If it is not found, the operation will return a response indicating that the object was not found.\n\nFor example, to edit the name and description of a project, where the requested resource is the project with `id` = 1, the request is the following:\n\n__Example Endpoint__\n<div class='well well-sm'>\n<span class='http-method patch'>PATCH</span> https://api.crowdin.com/api/v2/<span class='api-section-block-highlighted'>projects/1</span>\n</div>\n\nwhere <span class='api-section-block-highlighted'>projects/1</span> is the requested resource.\n\n__Content-Type header:__ `application/json`\n\n__Request body__\n```\n[\n  {\"op\":\"replace\", \"path\":\"/name\", \"value\":\"Project new name\"},\n  {\"op\":\"replace\", \"path\":\"/description\", \"value\":\"New description for the project\"}\n]\n```\n\n## File Upload\nWith Crowdin API v2 all files such as files for localization, screenshots, Glossaries, and Translation Memories should be first uploaded to the [Storage](#tag/Storage). After you upload file to the Storage it will have a unique storage id using which you can then add the file to the project.\n\nFor example, to upload a localization file to your project, you need to run the following sequence of API methods:\n * [_Add Storage_](#operation/api.storages.post) – upload localization file body to storage at Crowdin server\n * [_Add File_](#operation/api.projects.files.post) – define where to add the localization file with specific `storageId`\n\n## Asynchronous Operations\nMethods such as report generation, project build, and file download need some time to be completed and are finalized in several steps. It is what we call asynchronous operations. This  approach allows the application to work without interruptions while the method is running at the background.\n\nTo run asynchronous operations, 3 subsequent API methods are used:\n * Method to start operation – returns the status __Found__ if the resource you're requesting is already generated. Typically, __202 Accepted__ status is returned along with the operation identifier. The operation status is then checked with the help of this identifier.\n * Method to check the status of operation – returns  the completion percentage.\n * Method to get the temporary link for resource download – mostly used for export operations. When the operation is completed, you can run this method to get a temporary link for resource download.\n\n__Note:__ Download link is active for a few minutes.\n\nFor example, to download a Translation Memory (TM), you need to run following sequence of API methods:\n * [_Export TM_](#operation/api.tms.exports.post)\n * [_Check TM Export Status_](#operation/api.tms.exports.get)\n * [_Download TM_](#operation/api.tms.exports.getMany)\n\n## Sorting\nThe Crowdin API allows you to sort the endpoint results using the `orderBy` field (if available for the current endpoint).\nTo sort by multiple fields, add them separated by commas. To specify the sorting order, use `asc` or `desc` followed by a space after the sort field. If no sorting order is specified, ascending order (`asc`) is used by default.\n\nExample: `orderBy=createdAt desc,name,priority asc,title desc`\n\n## Rate Limits\nThe number of simultaneous API requests per account is 20 requests. This includes requests from all tokens created under a single account (e.g., 20 requests from one token, 10 requests from two separate tokens, or 1 request from 20 separate tokens).\n\nResponse code __429 Too Many Requests__ is returned when the limit is exceeded.\n\n## Crowdin API Clients\nThe Crowdin API clients are the lightweight interfaces developed for the Crowdin API v2. They provide common services for making API requests.\n\nYou may find detailed information on each client in its respective GitHub repository:\n\n[_Crowdin JavaScript client_](https://github.com/crowdin/crowdin-api-client-js)\\\n[_Crowdin PHP client_](https://github.com/crowdin/crowdin-api-client-php)\\\n[_Crowdin Java client_](https://github.com/crowdin/crowdin-api-client-java)\\\n[_Crowdin Python client_](https://github.com/crowdin/crowdin-api-client-python)\\\n[_Crowdin Ruby client_](https://github.com/crowdin/crowdin-api-client-ruby)\\\n[_Crowdin .NET client_](https://github.com/crowdin/crowdin-api-client-dotnet)\\\n[_Crowdin Go client_](https://github.com/crowdin/crowdin-api-client-go)\n\n"
  termsOfService: 'https://support.crowdin.com/terms/'
  contact:
    email: support@crowdin.com
  version: '2.0'
  x-logo:
    url: 'https://support.crowdin.com/assets/crowdin-logo.svg'
servers:
  -
    url: '{protocol}://{host}/api/v2'
    variables:
      protocol:
        enum:
          - https
          - http
        default: https
      host:
        default: api.crowdin.com
paths:
  '/projects/{projectId}/applications/{applicationIdentifier}/modules/{moduleKey}/advisors/insights':
    put:
      tags:
        - Advisor
      summary: 'Create or Update Application Advisor Insight'
      description: "**Required scopes:** `project.advisor` (Read and Write).\n\nCalled by an installed application's `advisor-inspector` module to publish the result of its own check against a string. Subsequent calls for the same string overwrite the previous insight from this module."
      operationId: api.projects.applications.modules.advisors.insights.put
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: applicationIdentifier
          in: path
          required: true
          schema:
            type: string
        -
          name: moduleKey
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdvisorAppInsightForm'
      responses:
        '200':
          description: 'Advisor insight updated'
        '201':
          description: 'Advisor insight created'
        '400':
          description: 'Invalid Request'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or app module not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/projects/{projectId}/advisors/checks':
    post:
      tags:
        - Advisor
      summary: 'Create Advisor Check'
      description: "**Required scopes:** `project.advisor` (Read and Write).\n\nTriggers an asynchronous re-check of advisor inspectors for the project. At most one of `category` or `inspectors` may be present; if neither is supplied, every inspector is re-checked. Supplying `category` re-checks all inspectors in that category. Supplying `inspectors` re-checks only the listed inspectors; pass `options` on an entry to opt into AI validation for that inspector. Returns a job-progress descriptor — distinct from PATCH `/insights/{insightId}` (user-facing Insight mutation) and PUT `/applications/.../insight` (app-pushed upsert)."
      operationId: api.projects.advisors.checks.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdvisorCheckCollectionForm'
      responses:
        '202':
          description: 'Advisor check job created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvisorCheckResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '409':
          description: 'Another advisor check is in progress for this project'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/projects/{projectId}/advisors/checks/{checkId}':
    get:
      tags:
        - Advisor
      summary: 'Get Advisor Check Status'
      description: "**Required scopes:** `project.advisor` (Read only).\n\nReturns the status of an advisor check job"
      operationId: api.projects.advisors.checks.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: checkId
          in: path
          description: 'Advisor Check Identifier, consists of 36 characters'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Advisor check status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvisorCheckResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or check with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/projects/{projectId}/advisors/insights':
    get:
      tags:
        - Advisor
      summary: 'List Advisor Insights'
      description: '**Required scopes:** `project.advisor` (Read only).'
      operationId: api.projects.advisors.insights.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          name: isDismissed
          in: query
          description: 'Filter insights by dismissal flag. Omit to return both dismissed and active insights.'
          schema:
            type: boolean
        -
          name: status
          in: query
          description: 'Filter insights by status (comma-separated)'
          schema:
            type: string
            example: 'pending,checking,outdated,done'
        -
          name: outcome
          in: query
          description: 'Filter insights by outcome (comma-separated). `flagged` — issue detected; `clear` — on target; `not_applicable` — does not apply. Omit to return all checked insights (never-checked ones are excluded).'
          schema:
            type: string
            example: 'flagged,clear'
      responses:
        '200':
          description: 'Advisor insights list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvisorInsightCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/projects/{projectId}/advisors/insights/{insightId}':
    patch:
      tags:
        - Advisor
      summary: 'Edit Advisor Insight'
      description: "**Required scopes:** `project.advisor` (Read and Write).\n\nUser-facing mutation of a single Advisor Insight row. Currently only `/isDismissed` is patchable (dismiss ↔ reactivate). For dispatching a fresh check, see POST `/advisors/checks`. For app-pushed insight updates, see PUT `/applications/.../insight`."
      operationId: api.projects.advisors.insights.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: insightId
          in: path
          description: 'Insight Identifier'
          required: true
          schema:
            type: integer
            example: 10
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AdvisorInsightPatch'
      responses:
        '200':
          description: 'Advisor insight was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AdvisorInsightResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or insight with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/users/{userId}/ai/settings/custom-placeholders':
    get:
      tags:
        - AI
      summary: 'List AI Custom Placeholders'
      description: "**Required scopes:** `ai.prompt` (Read only).\n\nUse [List AI Snippets](#operation/api.ai.prompts.snippets.getMany) instead."
      operationId: api.ai.prompt.custom.placeholders.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'AI Custom Placeholders list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiCustomPlaceholderCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      deprecated: true
    post:
      tags:
        - AI
      summary: 'Add AI Custom Placeholder'
      description: "**Required scopes:** `ai.prompt` (Read and Write).\n\nUse [Add AI Snippet](#operation/api.ai.prompts.snippets.post) instead."
      operationId: api.users.ai.settings.custom-placeholders.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiCustomPlaceholderCreateForm'
      responses:
        '201':
          description: 'AI Custom Placeholder was added successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiCustomPlaceholderResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      deprecated: true
  '/users/{userId}/ai/settings/snippets':
    get:
      tags:
        - AI
      summary: 'List AI Snippets'
      description: '**Required scopes:** `ai.prompt` (Read only).'
      operationId: api.ai.prompts.snippets.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'AI Snippets list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiCustomPlaceholderCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - AI
      summary: 'Add AI Snippet'
      description: '**Required scopes:** `ai.prompt` (Read and Write).'
      operationId: api.ai.prompts.snippets.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiCustomPlaceholderCreateForm'
      responses:
        '201':
          description: 'AI Snippet was added successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiCustomPlaceholderResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/settings/custom-placeholders/{aiCustomPlaceholderId}':
    get:
      tags:
        - AI
      summary: 'Get AI Custom Placeholder'
      description: "**Required scopes:** `ai.prompt` (Read only).\n\nUse [Get AI Snippet](#operation/api.ai.prompts.snippets.get) instead."
      operationId: api.users.ai.settings.custom-placeholders.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiCustomPlaceholderId'
      responses:
        '200':
          description: 'AI Custom Placeholder data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiCustomPlaceholderResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI Custom Placeholder with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      deprecated: true
    delete:
      tags:
        - AI
      summary: 'Delete AI Custom Placeholder'
      description: "**Required scopes:** `ai.prompt` (Read and Write).\n\nUse [Delete AI Snippet](#operation/api.ai.prompts.snippets.delete) instead."
      operationId: api.users.ai.settings.custom-placeholders.delete
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiCustomPlaceholderId'
      responses:
        '204':
          description: 'AI Custom Placeholder was successfully deleted'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI Custom Placeholder with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      deprecated: true
    patch:
      tags:
        - AI
      summary: 'Edit AI Custom Placeholder'
      description: "**Required scopes:** `ai.prompt` (Read and Write).\n\nUse [Edit AI Snippet](#operation/api.ai.prompts.snippets.patch) instead."
      operationId: api.users.ai.settings.custom-placeholders.patch
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiCustomPlaceholderId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiCustomPlaceholderPatchForm'
      responses:
        '200':
          description: 'AI Custom Placeholder was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiCustomPlaceholderResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI Custom Placeholder with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      deprecated: true
  '/users/{userId}/ai/settings/snippets/{aiSnippetId}':
    get:
      tags:
        - AI
      summary: 'Get AI Snippet'
      description: '**Required scopes:** `ai.prompt` (Read only).'
      operationId: api.ai.prompts.snippets.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiSnippetId'
      responses:
        '200':
          description: 'AI Snippet data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiCustomPlaceholderResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI Snippet with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - AI
      summary: 'Delete AI Snippet'
      description: '**Required scopes:** `ai.prompt` (Read and Write).'
      operationId: api.ai.prompts.snippets.delete
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiSnippetId'
      responses:
        '204':
          description: 'AI Snippet was successfully deleted'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI Snippet with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - AI
      summary: 'Edit AI Snippet'
      description: '**Required scopes:** `ai.prompt` (Read and Write).'
      operationId: api.ai.prompts.snippets.patch
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiSnippetId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiCustomPlaceholderPatchForm'
      responses:
        '200':
          description: 'AI Snippet was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiCustomPlaceholderResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI Snippet with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/file-translations':
    post:
      tags:
        - AI
      summary: 'AI File Translations'
      description: '**Required scopes:** `ai.translate` (Read and Write).'
      operationId: api.users.ai.file-translations.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiFileTranslationsForm'
      responses:
        '201':
          description: 'AI File Translations job created successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiFileTranslationsJobResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider, AI prompt, TM, glossary, style guide, storage or user with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/users/{userId}/ai/file-translations/{jobIdentifier}':
    get:
      tags:
        - AI
      summary: 'Get File Translations Status'
      description: '**Required scopes:** `ai.translate` (Read and Write).'
      operationId: api.users.ai.file-translations.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          name: jobIdentifier
          in: path
          description: 'AI File Translations job identifier'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'AI File Translations job status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiFileTranslationsJobResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI File Translations job or user with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
    delete:
      tags:
        - AI
      summary: 'Cancel File Translations'
      description: '**Required scopes:** `ai.translate` (Read and Write).'
      operationId: api.users.ai.file-translations.delete
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          name: jobIdentifier
          in: path
          description: 'AI File Translations job identifier'
          required: true
          schema:
            type: string
      responses:
        '204':
          description: 'AI File Translations job canceled successfully'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI File Translations job or user with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/users/{userId}/ai/file-translations/{jobIdentifier}/download':
    get:
      tags:
        - AI
      summary: 'Download Translated File'
      description: '**Required scopes:** `ai.translate` (Read and Write).'
      operationId: api.users.ai.file-translations.download
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          name: jobIdentifier
          in: path
          description: 'AI File Translations job identifier'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Download URL for translated file'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI File Translations job or user with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/users/{userId}/ai/file-translations/{jobIdentifier}/translations':
    get:
      tags:
        - AI
      summary: 'Download Translated File Strings'
      description: '**Required scopes:** `ai.translate` (Read and Write).'
      operationId: api.users.ai.file-translations.download-strings
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          name: jobIdentifier
          in: path
          description: 'AI File Translations job identifier'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Download URL for translated strings (source + target pairs)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI File Translations job or user with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}/fine-tuning/datasets':
    post:
      tags:
        - AI
      summary: 'Generate AI Prompt Fine-Tuning Dataset'
      description: '**Required scopes:** `ai.fine-tuning` (Read only).'
      operationId: api.ai.prompts.fine-tuning.datasets.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiFineTuningDatasetGenerateForm'
      responses:
        '202':
          description: 'AI Prompt Fine-Tuning Dataset generation successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiFineTuningDatasetResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User or AI prompt with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}/fine-tuning/datasets/{jobIdentifier}':
    get:
      tags:
        - AI
      summary: 'Get AI Prompt Fine-Tuning Dataset Generation Status'
      description: '**Required scopes:** `ai.fine-tuning` (Read only).'
      operationId: api.users.ai.prompts.fine-tuning.datasets.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
        -
          $ref: '#/components/parameters/AiPromptFineTuningDatasetGenerationId'
      responses:
        '200':
          description: 'AI Prompt Fine-Tuning Dataset generation status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiFineTuningDatasetResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User, AI prompt or dataset generation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}/fine-tuning/jobs/{jobIdentifier}/events':
    get:
      tags:
        - AI
      summary: 'List AI Prompt Fine-Tuning Events'
      description: '**Required scopes:** `ai.fine-tuning` (Read only).'
      operationId: api.ai.prompts.fine-tuning.jobs.events.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
        -
          $ref: '#/components/parameters/AiPromptFineTuningJobId'
      responses:
        '200':
          description: 'AI Prompt Fine-Tuning Events list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiFineTuningEventCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User, AI prompt or job with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts/fine-tuning/jobs':
    get:
      tags:
        - AI
      summary: 'List AI Prompt Fine-Tuning Jobs'
      description: '**Required scopes:** `ai.fine-tuning` (Read only).'
      operationId: api.ai.prompts.fine-tuning.jobs.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiFineTuningJobCollectionStatuses'
        -
          $ref: '#/components/parameters/AiFineTuningJobCollectionOrderBy'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'AI Prompt Fine-Tuning Jobs list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiFineTuningJobCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User or AI prompt with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}/fine-tuning/jobs':
    post:
      tags:
        - AI
      summary: 'Create AI Prompt Fine-Tuning Job'
      description: '**Required scopes:** `ai.fine-tuning` (Read only).'
      operationId: api.ai.prompts.fine-tuning.jobs.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiFineTuningJobCreateForm'
      responses:
        '202':
          description: 'AI Prompt Fine-Tuning Job created successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiFineTuningJobResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User or AI prompt with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}/fine-tuning/jobs/{jobIdentifier}':
    get:
      tags:
        - AI
      summary: 'Get AI Prompt Fine-Tuning Job Status'
      description: '**Required scopes:** `ai.fine-tuning` (Read only).'
      operationId: api.users.ai.prompts.fine-tuning.jobs.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
        -
          $ref: '#/components/parameters/AiPromptFineTuningJobId'
      responses:
        '200':
          description: 'AI Prompt Fine-Tuning Job status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiFineTuningJobResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User, AI prompt or job with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}/fine-tuning/datasets/{jobIdentifier}/download':
    get:
      tags:
        - AI
      summary: 'Download AI Prompt Fine-Tuning Dataset'
      description: '**Required scopes:** `ai.fine-tuning` (Read only).'
      operationId: api.users.ai.prompts.fine-tuning.datasets.download.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
        -
          $ref: '#/components/parameters/AiPromptFineTuningDatasetGenerationId'
      responses:
        '200':
          description: 'AI Prompt Fine-Tuning Dataset download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User, AI prompt or dataset generation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/providers/{aiProviderId}/gateway/{path}':
    get:
      tags:
        - 'AI Gateway'
      summary: 'AI Gateway GET'
      description: '**Required scopes:** `ai.proxy` (Read only).'
      operationId: api.ai.providers.gateway.crowdin.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
        -
          $ref: '#/components/parameters/AiGatewayPath'
      responses:
        '200':
          $ref: '#/components/responses/AiGatewayProviderResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        default:
          $ref: '#/components/responses/AiGatewayProviderPassthroughResponse'
    put:
      tags:
        - 'AI Gateway'
      summary: 'AI Gateway PUT'
      description: '**Required scopes:** `ai.proxy` (Read and Write).'
      operationId: api.ai.providers.gateway.crowdin.put
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
        -
          $ref: '#/components/parameters/AiGatewayPath'
      requestBody:
        $ref: '#/components/requestBodies/AiGatewayRequestBody'
      responses:
        '200':
          $ref: '#/components/responses/AiGatewayProviderResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        default:
          $ref: '#/components/responses/AiGatewayProviderPassthroughResponse'
    post:
      tags:
        - 'AI Gateway'
      summary: 'AI Gateway POST'
      description: '**Required scopes:** `ai.proxy` (Read and Write).'
      operationId: api.ai.providers.gateway.crowdin.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
        -
          $ref: '#/components/parameters/AiGatewayPath'
      requestBody:
        $ref: '#/components/requestBodies/AiGatewayRequestBody'
      responses:
        '200':
          $ref: '#/components/responses/AiGatewayProviderResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        default:
          $ref: '#/components/responses/AiGatewayProviderPassthroughResponse'
    delete:
      tags:
        - 'AI Gateway'
      summary: 'AI Gateway DELETE'
      description: '**Required scopes:** `ai.proxy` (Read and Write).'
      operationId: api.ai.providers.gateway.crowdin.delete
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
        -
          $ref: '#/components/parameters/AiGatewayPath'
      responses:
        '200':
          $ref: '#/components/responses/AiGatewayProviderResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        default:
          $ref: '#/components/responses/AiGatewayProviderPassthroughResponse'
    patch:
      tags:
        - 'AI Gateway'
      summary: 'AI Gateway PATCH'
      description: '**Required scopes:** `ai.proxy` (Read and Write).'
      operationId: api.ai.providers.gateway.crowdin.patch
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
        -
          $ref: '#/components/parameters/AiGatewayPath'
      requestBody:
        $ref: '#/components/requestBodies/AiGatewayRequestBody'
      responses:
        '200':
          $ref: '#/components/responses/AiGatewayProviderResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        default:
          $ref: '#/components/responses/AiGatewayProviderPassthroughResponse'
  '/users/{userId}/ai/prompts/{aiPromptId}/clones':
    post:
      tags:
        - AI
      summary: 'Clone AI Prompt'
      description: '**Required scopes:** `ai.prompt` (Read and Write).'
      operationId: api.users.ai.prompts.clones.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiPromptCloneForm'
      responses:
        '201':
          description: 'AI prompt was cloned successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiPromptResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI prompt with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts':
    get:
      tags:
        - AI
      summary: 'List AI Prompts'
      description: '**Required scopes:** `ai.prompt` (Read only).'
      operationId: api.ai.prompts.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          name: projectId
          in: query
          description: 'Allows you to filter the prompts available for the specific project. Get via [List Projects](#operation/api.projects.getMany)'
          schema:
            type: integer
        -
          name: action
          in: query
          description: 'Allows you to filter the prompts available for the specific action'
          schema:
            type: string
            enum:
              - pre_translate
              - qa_check
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'AI prompts list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiPromptCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - AI
      summary: 'Add AI Prompt'
      description: '**Required scopes:** `ai.prompt` (Read and Write).'
      operationId: api.users.ai.prompts.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinAiPromptCreateForm'
      responses:
        '201':
          description: 'AI prompt was added successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiPromptResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}/completions':
    post:
      tags:
        - AI
      summary: 'Generate AI Prompt Completion'
      description: '**Required scopes:** `ai.prompt` (Read only).'
      operationId: api.ai.prompts.completions.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinAiPromptCompletionCreateForm'
      responses:
        '201':
          description: 'AI prompt completion job was added successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiPromptCompletionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}/completions/{completionId}':
    get:
      tags:
        - AI
      summary: 'Get AI Prompt Completion Status'
      description: '**Required scopes:** `ai.prompt` (Read only).'
      operationId: api.users.ai.prompts.completions.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
        -
          $ref: '#/components/parameters/CompletionId'
      responses:
        '200':
          description: 'AI prompt completion data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiPromptCompletionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI prompt with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - AI
      summary: 'Cancel AI Prompt Completion'
      description: '**Required scopes:** `ai.prompt` (Read only).'
      operationId: api.users.ai.prompts.completions.delete
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
        -
          $ref: '#/components/parameters/CompletionId'
      responses:
        '204':
          description: 'Concept was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI prompt with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}/completions/{completionId}/download':
    get:
      tags:
        - AI
      summary: 'Download AI Prompt Completion'
      description: '**Required scopes:** `ai.prompt` (Read only).'
      operationId: api.users.ai.prompts.completions.download.download
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
        -
          $ref: '#/components/parameters/CompletionId'
      responses:
        '200':
          description: 'AI prompt completion download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, AI prompt or completion with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/prompts/{aiPromptId}':
    get:
      tags:
        - AI
      summary: 'Get AI Prompt'
      description: '**Required scopes:** `ai.prompt` (Read only).'
      operationId: api.users.ai.prompts.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
      responses:
        '200':
          description: 'AI prompt data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiPromptResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI prompt with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - AI
      summary: 'Delete AI Prompt'
      description: '**Required scopes:** `ai.prompt` (Read and Write).'
      operationId: api.users.ai.prompts.delete
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
      responses:
        '204':
          description: 'AI prompt was successfully deleted'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI prompt with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - AI
      summary: 'Edit AI Prompt'
      description: '**Required scopes:** `ai.prompt` (Read and Write).'
      operationId: api.users.ai.prompts.patch
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiPromptId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiPromptPatch'
      responses:
        '200':
          description: 'AI prompt was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiPromptResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI prompt with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/providers/models':
    get:
      tags:
        - AI
      summary: 'List AI Provider Models'
      description: '**Required scopes:** `ai.provider` (Read only).'
      operationId: api.ai.providers.models.crowdin.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      responses:
        '200':
          description: 'AI models list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiProviderModelCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/providers':
    get:
      tags:
        - AI
      summary: 'List AI Providers'
      description: '**Required scopes:** `ai.provider` (Read only).'
      operationId: api.ai.providers.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'AI providers list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiProviderCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - AI
      summary: 'Add AI Provider'
      description: '**Required scopes:** `ai.provider` (Read and Write).'
      operationId: api.users.ai.providers.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinAiProviderCreateForm'
      responses:
        '201':
          description: 'AI provider was successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiProviderResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/providers/{aiProviderId}':
    get:
      tags:
        - AI
      summary: 'Get AI Provider'
      description: '**Required scopes:** `ai.provider` (Read only).'
      operationId: api.users.ai.providers.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
      responses:
        '200':
          description: 'AI provider data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiProviderResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - AI
      summary: 'Delete AI Provider'
      description: '**Required scopes:** `ai.provider` (Read and Write).'
      operationId: api.users.ai.providers.delete
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
      responses:
        '204':
          description: 'AI provider was successfully deleted'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - AI
      summary: 'Edit AI Provider'
      description: '**Required scopes:** `ai.provider` (Read and Write).'
      operationId: api.users.ai.providers.patch
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiProviderPatch'
      responses:
        '200':
          description: 'AI provider was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiProviderResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/providers/{aiProviderId}/models':
    get:
      tags:
        - AI
      summary: 'List AI Provider Models'
      description: '**Required scopes:** `ai.provider` (Read only).'
      operationId: api.ai.providers.models.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
      responses:
        '200':
          description: 'AI provider models list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiProviderModelCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/providers/supported-models':
    get:
      tags:
        - AI
      summary: 'List Supported AI Provider Models'
      description: '**Required scopes:** `ai.provider` (Read only).'
      operationId: api.ai.providers.supported-models.crowdin.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          name: providerType
          in: query
          description: 'Filter by provider type'
          required: false
          schema:
            type: string
          example: open_ai
        -
          name: enabled
          in: query
          description: 'Filter by enabled providers'
          required: false
          schema:
            type: boolean
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          required: false
          schema:
            type: string
            default: knowledgeCutoff
            enum:
              - knowledgeCutoff
              - releaseDate
          example: 'knowledgeCutoff desc'
      responses:
        '200':
          description: 'Available AI models list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiSupportedModelCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/providers/{aiProviderId}/chat/completions':
    post:
      tags:
        - AI
      summary: 'Create AI Proxy Chat Completion'
      description: "**Required scopes:** `ai.proxy` (Read only).\n\nThis API method serves as an intermediary, forwarding your requests directly to the selected provider.\n\nPlease refer to the documentation for the specific provider you use to determine the required payload format."
      operationId: api.users.ai.providers.chat.completions.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiProviderId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiProxyChatCompletionCreateForm'
      responses:
        '201':
          description: 'AI Proxy Chat Completion was created successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiProxyChatCompletionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/reports':
    post:
      tags:
        - AI
      summary: 'Generate AI Report'
      description: "**Required scopes:** `ai.provider` (Read only).\n\nGeneration is asynchronous and takes three requests. This one starts it and returns the report `identifier`. Then poll [Check AI Report Generation Status](#operation/api.users.ai.reports.get) until its `status` is `finished`; `progress` counts up to 100 meanwhile. Finally [Download AI Report](#operation/api.users.ai.reports.download.download) returns a short-lived `url`. Fetch that url to get the report file itself."
      operationId: api.users.ai.reports.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/TokensUsageRawData'
                -
                  $ref: '#/components/schemas/CostsByUsers'
      responses:
        '201':
          description: 'AI Report generation was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiReportResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI report with specified type was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/reports/{aiReportId}':
    get:
      tags:
        - AI
      summary: 'Check AI Report Generation Status'
      description: '**Required scopes:** `ai.provider` (Read only).'
      operationId: api.users.ai.reports.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiReportId'
      responses:
        '200':
          description: 'AI Report generation status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiReportResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI report with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/reports/{aiReportId}/download':
    get:
      tags:
        - AI
      summary: 'Download AI Report'
      description: '**Required scopes:** `ai.provider` (Read only).'
      operationId: api.users.ai.reports.download.download
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiReportId'
      responses:
        '200':
          description: 'AI Report download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI report with specified user id and id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/users/{userId}/ai/request-logs':
    get:
      tags:
        - AI
      summary: 'List AI Request Logs'
      description: '**Required scopes:** `ai.request-log` (Read only).'
      operationId: api.ai.requestLogs.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionRequestId'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionProjectId'
        -
          name: userId
          in: query
          description: 'Filter by the user attributed to the AI request (not the `userId` path parameter). Get via [List Users](#operation/api.users.getMany)'
          required: false
          schema:
            type: integer
        -
          $ref: '#/components/parameters/AiRequestLogCollectionAiProviderId'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionModel'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionSourceAction'
        -
          name: promptAction
          in: query
          description: 'Filter by prompt action, e.g. `pre_translate`, `qa_check`, `advisor_context_review`, or a `custom:`-prefixed value'
          required: false
          schema:
            type: string
          example: qa_check
        -
          $ref: '#/components/parameters/AiRequestLogCollectionStatuses'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionSystemCredentials'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionIsAutoTriggered'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionTokenName'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionOauthClientId'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionCreatedAfter'
        -
          $ref: '#/components/parameters/AiRequestLogCollectionCreatedBefore'
      responses:
        '200':
          description: 'AI request logs list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiRequestLogCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/request-logs/exports':
    post:
      tags:
        - AI
      summary: 'Export AI Request Logs'
      description: "**Required scopes:** `ai.request-log` (Read only).\n\nStarts an [asynchronous operation](#section/Introduction/Asynchronous-Operations) that builds a file with the AI request logs matching the filters, and returns its `identifier`. Poll [Check AI Request Logs Export Status](#operation/api.ai.requestLogs.exports.get) until `status` is `finished`, then call [Download AI Request Logs Export](#operation/api.ai.requestLogs.exports.download) for a link to the file.\n\nPassing no filters exports every log entry of the organization, newest first. Columns and value formatting are identical to [List AI Request Logs](#operation/api.ai.requestLogs.getMany)."
      operationId: api.ai.requestLogs.exports.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiRequestLogExportForm'
      responses:
        '201':
          description: 'Export was queued'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiRequestLogExportResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/request-logs/exports/{exportId}':
    get:
      tags:
        - AI
      summary: 'Check AI Request Logs Export Status'
      description: "**Required scopes:** `ai.request-log` (Read only).\n\nReturns the status of an export started by [Export AI Request Logs](#operation/api.ai.requestLogs.exports.post). The file can be downloaded once `status` is `finished`."
      operationId: api.ai.requestLogs.exports.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiRequestLogExportId'
      responses:
        '200':
          description: 'Export status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiRequestLogExportResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found, or the export does not exist'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/request-logs/exports/{exportId}/download':
    get:
      tags:
        - AI
      summary: 'Download AI Request Logs Export'
      description: "**Required scopes:** `ai.request-log` (Read only).\n\nReturns a link to the exported file, which expires one hour after this call. The export has to be `finished`; until it is, this operation answers 404."
      operationId: api.ai.requestLogs.exports.download
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/AiRequestLogExportId'
      responses:
        '200':
          description: 'Link to the exported file'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found, or the export does not exist or has not finished yet'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/settings':
    get:
      tags:
        - AI
      summary: 'Get AI Settings'
      description: '**Required scopes:** `ai` (Read only).'
      operationId: api.users.ai.settings.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      responses:
        '200':
          description: 'AI settings'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiSettingsResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - AI
      summary: 'Edit AI Settings'
      description: '**Required scopes:** `ai` (Read and Write).'
      operationId: api.users.ai.settings.patch
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiSettingsPatch'
      responses:
        '200':
          description: 'AI settings was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAiSettingsResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/translate':
    post:
      tags:
        - AI
      summary: 'AI Translate Strings'
      description: '**Required scopes:** `ai.translate` (Read and Write).'
      operationId: api.users.ai.translate.strings.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AiTranslateForm'
      responses:
        '200':
          description: 'Strings translated successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiTranslateResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'AI provider, AI prompt or user with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/usage/members':
    get:
      tags:
        - AI
      summary: 'List AI Usage Members'
      description: '**Required scopes:** `ai` (Read only).'
      operationId: api.ai.usage.members.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/CrowdinAiUsageMemberCollectionUserIds'
        -
          $ref: '#/components/parameters/AiUsageMemberCollectionOrderBy'
      responses:
        '200':
          description: 'AI usage members list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiUsageMemberCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/ai/usage/members/{memberId}':
    get:
      tags:
        - AI
      summary: 'Get AI Usage Member'
      description: '**Required scopes:** `ai` (Read only).'
      operationId: api.ai.usage.members.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          name: memberId
          in: path
          description: 'User Identifier. Get via [List Project Members](#operation/api.projects.members.getMany) or via [Get Authenticated User](#operation/api.user.get) for own usage'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'AI usage member data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AiUsageMemberResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  /applications/consents:
    get:
      tags:
        - Applications
      summary: 'List Application Consent Decisions'
      description: "**Required scopes:** `application.consent` (Read only).\n\nList the current user's consent decisions - which applications the user allowed (`granted`) or refused (`denied`) to call the Crowdin API on their behalf."
      operationId: api.applications.consents.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          name: identifier
          in: query
          description: 'Filter by application identifier'
          schema:
            type: string
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            enum:
              - id
              - createdAt
          example: 'createdAt desc'
      responses:
        '200':
          description: 'Application Consent Decision list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationConsentCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '404':
          description: 'Organization not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
    post:
      tags:
        - Applications
      summary: 'Create Application Consent Decision'
      description: "**Required scopes:** `application.consent` (Read and Write).\n\nRecord the current user's consent decision (`granted` or `denied`) for an application installed by another user. In the normal flow Crowdin records the decision itself when the user responds to the consent prompt shown for the application - use this endpoint to record a decision programmatically. A user has at most one decision per installation - creating a second one returns `409`; use [Edit Application Consent Decision](#operation/api.applications.consents.patch) to change an existing decision."
      operationId: api.applications.consents.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationConsentCreateForm'
      responses:
        '201':
          description: 'Application Consent Decision was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationConsentResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '404':
          description: 'Organization not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '409':
          description: 'A consent decision for this application already exists'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/applications/consents/{consentId}':
    delete:
      tags:
        - Applications
      summary: 'Delete Application Consent Decision'
      description: "**Required scopes:** `application.consent` (Read and Write).\n\nForget the current user's consent decision for an application. The next call from that application will prompt for consent again."
      operationId: api.applications.consents.delete
      parameters:
        -
          name: consentId
          in: path
          description: 'Consent Decision Identifier'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Application Consent Decision was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '404':
          description: 'Organization or consent decision with specified identifier was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
    patch:
      tags:
        - Applications
      summary: 'Edit Application Consent Decision'
      description: "**Required scopes:** `application.consent` (Read and Write).\n\nChange an existing consent decision: switch its `status` between `granted` and `denied`, or update the `scopes` snapshot."
      operationId: api.applications.consents.patch
      parameters:
        -
          name: consentId
          in: path
          description: 'Consent Decision Identifier'
          required: true
          schema:
            type: integer
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationConsentPatch'
      responses:
        '200':
          description: 'Application consent decision data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationConsentResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '404':
          description: 'Organization or consent decision with specified identifier was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/applications/installations/{identifier}/bundles':
    post:
      tags:
        - Applications
      summary: 'Upload Application Bundle'
      description: "**Required scopes:** `application.installation` (Read and Write).\n\nUpload a bundle archive for a serverless app installed from manifest content. The bundle must be a ZIP archive that contains a non-empty `app.js` entry point at its root."
      operationId: api.applications.installations.bundles.post
      parameters:
        -
          $ref: '#/components/parameters/Identifier'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationInstallationBundleCreateForm'
      responses:
        '201':
          description: 'Application Bundle was successfully uploaded'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstallationResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Application installation with specified identifier was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  /applications/installations:
    get:
      tags:
        - Applications
      summary: 'List Application Installations'
      description: '**Required scopes:** `application.installation` (Read only).'
      operationId: api.applications.installations.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          name: installedBy
          in: query
          description: 'User Identifier'
          schema:
            type: integer
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            enum:
              - id
              - createdAt
          example: 'createdAt desc'
      responses:
        '200':
          description: 'Application Installation list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstallationCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Applications
      summary: 'Install Application'
      description: "**Required scopes:** `application.installation` (Read and Write).\n\nInstall an application either from a hosted manifest URL or from its manifest content.<br><br>**Note:** Any application - with or without a backend, and regardless of whether it is published to the Crowdin Store - can be installed from a manifest URL (the manifest only needs to be reachable at that URL). Installing from manifest content is supported only for serverless apps - apps that run entirely in the browser with no backend (no `baseUrl`)."
      operationId: api.applications.installations.post
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/ApplicationInstallationCreateForm'
                -
                  $ref: '#/components/schemas/ApplicationInstallationCreateFromManifestForm'
      responses:
        '201':
          description: 'Application Installation was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstallationResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/applications/installations/{identifier}':
    get:
      tags:
        - Applications
      summary: 'Get Application Installation'
      description: '**Required scopes:** `application.installation` (Read only).'
      operationId: api.applications.installations.get
      parameters:
        -
          $ref: '#/components/parameters/Identifier'
      responses:
        '200':
          description: 'Application installation data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstallationResource'
        '404':
          description: 'Application installation with specified identifier was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Applications
      summary: 'Delete Application Installation'
      description: '**Required scopes:** `application.installation` (Read and Write).'
      operationId: api.applications.installations.delete
      parameters:
        -
          $ref: '#/components/parameters/Identifier'
        -
          $ref: '#/components/parameters/ForceDelete'
      responses:
        '204':
          description: 'Application Installation was successfully deleted'
        '404':
          description: 'Application Installation with specified identifier was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '424':
          description: 'Application server is unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FailedDependencyExceptionResource'
    patch:
      tags:
        - Applications
      summary: 'Edit Application Installation'
      description: '**Required scopes:** `application.installation` (Read and Write).'
      operationId: api.applications.installations.patch
      parameters:
        -
          $ref: '#/components/parameters/Identifier'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationInstallationPatch'
      responses:
        '200':
          description: 'Application data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstallationResource'
        '404':
          description: 'Application installation with specified identifier was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/applications/installations/{identifier}/update':
    get:
      tags:
        - Applications
      summary: 'Get Application Installation Update'
      description: "**Required scopes:** `application.installation` (Read only).\n\nReturns the diff between the currently installed application and the latest cached manifest, tagged with `manifestHash` for optimistic-locking on apply."
      operationId: api.applications.installations.update.get
      parameters:
        -
          $ref: '#/components/parameters/Identifier'
      responses:
        '200':
          description: 'Application installation update'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstallationUpdateResource'
        '404':
          description: 'Application installation with specified identifier was not found, or no cached manifest is available yet'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Applications
      summary: 'Apply Application Installation Update'
      description: "**Required scopes:** `application.installation` (Read and Write).\n\nApply the latest cached manifest to an installed application. Requires `manifestHash` from a recent GET /update call as an optimistic-locking token. If the cached manifest has changed since, returns 409 with the fresh diff in the response body."
      operationId: api.applications.installations.update.post
      parameters:
        -
          $ref: '#/components/parameters/Identifier'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationInstallationApplyForm'
      responses:
        '200':
          description: 'Application data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstallationResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '404':
          description: 'Application installation not found or no cached manifest available'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '409':
          description: 'manifestHash mismatch — cached manifest changed since diff was fetched. Response body carries the fresh diff so the client can re-render without a round trip.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstallationUpdateResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
  '/applications/{applicationIdentifier}/storage/kv/records':
    get:
      tags:
        - Applications
      summary: 'List Application KV Records'
      description: "**Required scopes:** `application.storage` (Read only).\n\nLists the KV records in the application installation's storage that are visible to the current user. Values of `secret` records are returned decrypted. Expired records are not returned.\n\n__Note:__ Requires the application's own access token - personal access tokens are not supported"
      operationId: api.applications.storage.kv.records.getMany
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          $ref: '#/components/parameters/ApplicationKvPrefix'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            enum:
              - key
              - createdAt
              - updatedAt
              - expiresAt
          example: 'createdAt desc'
      responses:
        '200':
          description: 'Application KV Record list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationKvRecordCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
    post:
      tags:
        - Applications
      summary: 'Add Application KV Record'
      description: "**Required scopes:** `application.storage` (Read and Write).\n\nAdds a new KV record to the application installation's storage. If the key already exists, the request returns `409` - use [Edit Application KV Record](#operation/api.applications.storage.kv.records.patch) to change an existing record.\n\n__Note:__ Requires the application's own access token - personal access tokens are not supported"
      operationId: api.applications.storage.kv.records.post
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationKvRecordCreateForm'
      responses:
        '201':
          description: 'Application KV Record was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationKvRecordResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '409':
          description: 'A KV record for this key already exists'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/applications/{applicationIdentifier}/storage/kv/records/{key}':
    get:
      tags:
        - Applications
      summary: 'Get Application KV Record'
      description: "**Required scopes:** `application.storage` (Read only).\n\nReturns a single KV record. `secret` records are returned decrypted. Expired records and records that are not visible to the current user are reported as not found.\n\n__Note:__ Requires the application's own access token - personal access tokens are not supported"
      operationId: api.applications.storage.kv.records.get
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: key
          in: path
          description: 'Key of the record. URL-encode reserved characters (e.g. `:` as `%3A`)'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Application KV Record'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationKvRecordResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
    delete:
      tags:
        - Applications
      summary: 'Delete Application KV Record'
      description: "**Required scopes:** `application.storage` (Read and Write).\n\nDeletes a KV record.\n\n__Note:__ Requires the application's own access token - personal access tokens are not supported"
      operationId: api.applications.storage.kv.records.delete
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: key
          in: path
          description: 'Key of the record. URL-encode reserved characters (e.g. `:` as `%3A`)'
          required: true
          schema:
            type: string
      responses:
        '204':
          description: 'Application KV Record was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
    patch:
      tags:
        - Applications
      summary: 'Edit Application KV Record'
      description: "**Required scopes:** `application.storage` (Read and Write).\n\nReplaces the value, the TTL, or both on an existing KV record. When you set a new TTL, `expiresAt` is calculated from the time the change is applied. Send `\"value\": null` for the `/ttl` path to remove the TTL and make the record permanent.\n\n__Note:__ Requires the application's own access token - personal access tokens are not supported"
      operationId: api.applications.storage.kv.records.patch
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: key
          in: path
          description: 'Key of the record. URL-encode reserved characters (e.g. `:` as `%3A`)'
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationKvRecordPatch'
      responses:
        '200':
          description: 'Application KV Record'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationKvRecordResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/applications/{applicationIdentifier}/api/{path}':
    get:
      tags:
        - Applications
      summary: 'Get Application Data'
      description: "**Required scopes:** `application.proxy` (Read only).\n\nRetrieves data from the specified application.\n\n__Note__: Query parameters are application-specific and vary depending on the application being accessed."
      operationId: api.applications.api.get
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          $ref: '#/components/parameters/Path'
      responses:
        '200':
          description: 'Application data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationData'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    put:
      tags:
        - Applications
      summary: 'Update or Restore Application Data'
      description: "**Required scopes:** `application.proxy` (Read and Write).\n\nUpdates or restores data in the specified application.\n\n__Note__: Both the query parameters and request body are application-specific and vary depending on the application being accessed."
      operationId: api.applications.api.put
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          $ref: '#/components/parameters/Path'
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: 'Application data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationData'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Applications
      summary: 'Add Application Data'
      description: "**Required scopes:** `application.proxy` (Read and Write).\n\nAdds new data to the specified application.\n\n__Note__: Both the query parameters and request body are application-specific and vary depending on the application being accessed."
      operationId: api.applications.api.post
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          $ref: '#/components/parameters/Path'
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: 'Application data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationData'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Applications
      summary: 'Delete Application Data'
      description: "**Required scopes:** `application.proxy` (Read and Write).\n\nDeletes data from the specified application.\n\n__Note__: Query parameters are application-specific and vary depending on the application being accessed."
      operationId: api.applications.api.delete
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          $ref: '#/components/parameters/Path'
      responses:
        '204':
          description: 'Application Data was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - Applications
      summary: 'Edit Application Data'
      description: "**Required scopes:** `application.proxy` (Read and Write).\n\nEdits existing data in the specified application.\n\n__Note__: Both the query parameters and request body are application-specific and vary depending on the application being accessed."
      operationId: api.applications.api.patch
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          $ref: '#/components/parameters/Path'
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: 'Application data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationData'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/applications/{applicationIdentifier}/api/crowdin-files':
    get:
      tags:
        - Integrations
      summary: 'List Crowdin Files'
      operationId: api.applications.integrations.crowdin.files
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: projectId
          in: query
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          required: true
          schema:
            type: integer
            example: 12
      responses:
        '200':
          description: 'Project files list'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/IntegrationCrowdinFiles' }
                type: object
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/file-progress':
    get:
      tags:
        - Integrations
      summary: 'Get File Progress'
      operationId: api.applications.integrations.file.progress
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: projectId
          in: query
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          required: true
          schema:
            type: integer
            example: 12
        -
          name: fileId
          in: query
          description: 'Get via [List Crowdin Files](#operation/api.applications.integrations.crowdin.files)'
          required: true
          schema:
            type: integer
            example: 102
      responses:
        '200':
          description: 'File translation progress'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/IntegrationFileProgress' }
                type: object
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/integration-files':
    get:
      tags:
        - Integrations
      summary: 'List Integration Files'
      operationId: api.applications.integrations.integration.files
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: projectId
          in: query
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          required: true
          schema:
            type: integer
            example: 12
      responses:
        '200':
          description: 'Integration files list'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/IntegrationIntegrationFiles' }
                type: object
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/crowdin-update':
    post:
      tags:
        - Integrations
      summary: 'Update Crowdin Files'
      operationId: api.applications.integrations.crowdin.update
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IntegrationUpdateCrowdinFiles'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/IntegrationUpdateResponse' }
                type: object
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/integration-update':
    post:
      tags:
        - Integrations
      summary: 'Update Integration Files'
      operationId: api.applications.integrations.integration.update
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IntegrationFileLanguagePair'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/IntegrationUpdateResponse' }
                type: object
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/all-jobs':
    get:
      tags:
        - Integrations
      summary: 'List Jobs'
      operationId: api.applications.integrations.job.list
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: projectId
          in: query
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          required: true
          schema:
            type: integer
            example: 12
        -
          name: limit
          in: query
          description: 'Number of jobs to return'
          required: false
          schema:
            type: integer
            example: 25
        -
          name: offset
          in: query
          description: 'Number of jobs to skip'
          required: false
          schema:
            type: integer
            example: 0
      responses:
        '200':
          description: 'Job information retrieved successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegrationJobResponse'
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/job-info':
    get:
      tags:
        - Integrations
      summary: 'Get Job Info'
      operationId: api.applications.integrations.job.info
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: projectId
          in: query
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          required: true
          schema:
            type: integer
            example: 12
        -
          name: jobId
          in: query
          required: true
          schema:
            type: string
            example: 067da473-fc0b-43e3-b0a2-09d26af130c1
      responses:
        '200':
          description: 'Job information retrieved successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegrationJobResponse'
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/jobs':
    get:
      tags:
        - Integrations
      summary: 'Get Job Info'
      operationId: api.applications.integrations.job.get
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: projectId
          in: query
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          required: true
          schema:
            type: integer
            example: 12
        -
          name: jobId
          in: query
          required: false
          schema:
            type: string
            example: 067da473-fc0b-43e3-b0a2-09d26af130c1
      responses:
        '200':
          description: 'Job information retrieved successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IntegrationJobResponse'
      deprecated: true
      x-doc-sections:
        - file-based
    delete:
      tags:
        - Integrations
      summary: 'Cancel Job'
      operationId: api.applications.integrations.job.cancel
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: projectId
          in: query
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          required: true
          schema:
            type: integer
            example: 12
        -
          name: jobId
          in: query
          required: true
          schema:
            type: string
            example: 067da473-fc0b-43e3-b0a2-09d26af130c1
      responses:
        '204':
          description: 'Job canceled successfully'
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/settings':
    get:
      tags:
        - Integrations
      summary: 'Get Application Settings'
      operationId: api.applications.integrations.settings.get
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: projectId
          in: query
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          required: true
          schema:
            type: integer
            example: 12
      responses:
        '200':
          description: 'File translation progress'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/IntegrationSettingsResponse' }
                type: object
      x-doc-sections:
        - file-based
    post:
      tags:
        - Integrations
      summary: 'Update Application Settings'
      operationId: api.applications.integrations.settings.update
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IntegrationUpdateSettingsData'
      responses:
        '204':
          description: 'Application Settings was successfully update'
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/sync-settings':
    get:
      tags:
        - Integrations
      summary: 'Get Sync Settings'
      operationId: api.applications.integrations.sync.settings.get
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
        -
          name: projectId
          in: query
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          required: true
          schema:
            type: integer
            example: 12
        -
          name: provider
          in: query
          required: true
          schema:
            type: string
            enum:
              - crowdin
              - integration
      responses:
        '200':
          description: 'Application Sync Settings'
          content:
            application/json:
              schema:
                properties:
                  data: { oneOf: [{ $ref: '#/components/schemas/IntegrationCrowdinSyncSettingsResponse' }, { $ref: '#/components/schemas/IntegrationIntegrationSyncSettingsResponse' }] }
                type: object
      x-doc-sections:
        - file-based
    post:
      tags:
        - Integrations
      summary: 'Update Sync Settings'
      operationId: api.applications.integrations.sync.settings.update
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IntegrationUpdateSyncSettingsData'
      responses:
        '204':
          description: 'Application Sync Settings was successfully update'
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/login-fields':
    get:
      tags:
        - Integrations
      summary: 'Integration Login Form Fields'
      operationId: api.applications.integrations.integration.fields
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
      responses:
        '200':
          description: 'Login Form Fields'
          content:
            application/json:
              schema:
                properties:
                  data: { $ref: '#/components/schemas/IntegrationLoginFieldsResponse' }
                type: object
      x-doc-sections:
        - file-based
  '/applications/{applicationIdentifier}/api/login':
    post:
      tags:
        - Integrations
      summary: 'Integration Login'
      operationId: api.applications.integrations.integration.login
      parameters:
        -
          $ref: '#/components/parameters/ApplicationIdentifier'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IntegrationLogin'
      responses:
        '204':
          description: 'Login successful'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/branches':
    get:
      tags:
        - 'Source Files'
      summary: 'List Branches'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.branches.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          required: false
          schema:
            type: string
            default: id
            enum:
              - id
              - name
              - title
              - createdAt
              - updatedAt
              - exportPattern
              - priority
          example: 'createdAt desc,name,priority'
        -
          name: name
          in: query
          description: 'Filter branch by name'
          required: false
          schema:
            type: string
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Project branches list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedBranchCollectionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    post:
      tags:
        - 'Source Files'
      summary: 'Add Branch'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.branches.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BranchCreateForm'
      responses:
        '201':
          description: 'Branch was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedBranchResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/branches/{branchId}':
    get:
      tags:
        - 'Source Files'
      summary: 'Get Branch'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.branches.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BranchId'
      responses:
        '200':
          description: 'Branch data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedBranchResource'
          x-doc-sections:
            - file-based
        '404':
          description: 'Project or branch with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'Source Files'
      summary: 'Delete Branch'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.branches.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BranchId'
        -
          name: Prefer
          in: header
          description: '**[Recommended]** Set to `respond-async` (RFC 7240) to delete asynchronously. The endpoint then returns 202 with a delete operation to poll.'
          required: false
          schema:
            type: string
            example: respond-async
      responses:
        '204':
          description: 'Branch was successfully deleted'
        '202':
          description: 'Accepted for asynchronous processing (when `Prefer: respond-async` is sent)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodeDeleteResource'
        '404':
          description: 'Project or branch with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    patch:
      tags:
        - 'Source Files'
      summary: 'Edit Branch'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.branches.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BranchId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BranchPatch'
      responses:
        '200':
          description: 'Branch was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedBranchResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or branch with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/branches/{branchId}/jobs/{jobIdentifier}':
    get:
      tags:
        - 'Source Files'
      summary: 'Check Delete Branch Job Status'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.branches.jobs.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BranchId'
        -
          name: identifier
          in: path
          description: 'Delete operation identifier (UUID). Returned by the async DELETE (Prefer: respond-async).'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Branch delete status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodeDeleteResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or delete operation with specified identifier was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      x-doc-sections:
        - file-based
  /branches:
    get:
      tags:
        - 'Source Files'
      summary: 'Search Branches'
      description: "**Required scopes:** `project.source.file` (Read only).\n\nSearches branches by name/title. Provide up to 50 `projectIds`, or omit them to search all your own projects — or another owner's accessible projects via `userId`."
      operationId: api.branches.getMany
      parameters:
        -
          name: filter
          in: query
          description: 'Search branches by `name` or `title`'
          required: true
          schema:
            type: string
            maxLength: 128
        -
          name: projectIds
          in: query
          description: 'Project identifiers to search across. Get via [List Projects](#operation/api.projects.getMany). It can be one project or a list of comma-separated ones (max 50). All projects must belong to the same owner. Optional — omit to search all your accessible projects.'
          required: false
          schema:
            type: string
          example: '1,2,3'
        -
          name: userId
          in: query
          description: 'Owner (user) whose projects to search when `projectIds` is omitted. Only projects you own or manage are searched. Defaults to your own account.'
          required: false
          schema:
            type: integer
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Matched branches'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinBranchSearchCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
              example:
                errors:
                  - { error: { key: filter, errors: [{ code: isEmpty, message: "Value is required and can't be empty" }] } }
        '404':
          description: 'One of the requested projects was not found, or you have no projects to search'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
              example:
                error:
                  message: "You don't have any projects to search."
                  code: 404
        '422':
          description: 'The search was too broad to complete within the time limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
              example:
                error:
                  message: 'The search was too broad to complete within the time limit'
                  code: 422
      x-doc-sections:
        - file-based
  '/projects/{projectId}/bundles':
    get:
      tags:
        - Translations
      summary: 'List Bundles'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.bundles.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Bundles list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BundleCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Translations
      summary: 'Add Bundle'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.bundles.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BundleCreateForm'
      responses:
        '201':
          description: 'Bundle was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BundleResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/bundles/{bundleId}':
    get:
      tags:
        - Translations
      summary: 'Get Bundle'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.bundles.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BundleId'
      responses:
        '200':
          description: 'Bundle data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BundleResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or bundle with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Translations
      summary: 'Delete Bundle'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.bundles.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BundleId'
      responses:
        '204':
          description: 'Bundle was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or bundle with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - Translations
      summary: 'Edit Bundle'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.bundles.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BundleId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BundlePatch'
      responses:
        '200':
          description: 'Bundle was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BundleResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or bundle with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/bundles/{bundleId}/exports/{exportId}/download':
    get:
      tags:
        - Translations
      summary: 'Download Bundle'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.bundles.exports.download.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BundleId'
        -
          $ref: '#/components/parameters/ExportBundleId'
      responses:
        '200':
          description: 'Bundle download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, bundle or export with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/bundles/{bundleId}/exports':
    post:
      tags:
        - Translations
      summary: 'Export Bundle'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.bundles.exports.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BundleId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinBundleExportForm'
      responses:
        '202':
          description: 'Bundle export was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinBundleExportResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or bundle with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
  '/projects/{projectId}/bundles/{bundleId}/exports/{exportId}':
    get:
      tags:
        - Translations
      summary: 'Check Bundle Export Status'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.bundles.exports.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BundleId'
        -
          $ref: '#/components/parameters/ExportBundleId'
      responses:
        '200':
          description: 'Bundle export data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinBundleExportResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, bundle or export with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/glossaries/{glossaryId}/concepts':
    get:
      tags:
        - Glossaries
      summary: 'List Concepts'
      description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of concepts in the glossary. A concept groups the terms that mean the same thing in different languages."
      operationId: api.glossaries.concepts.getMany
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - subject
              - definition
              - note
              - createdAt
              - updatedAt
          example: 'createdAt desc,name,priority'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Concepts list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinConceptCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/glossaries/{glossaryId}/concepts/{conceptId}':
    get:
      tags:
        - Glossaries
      summary: 'Get Concept'
      description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single concept of the glossary, with the definition and note stored for each of its languages."
      operationId: api.glossaries.concepts.get
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          $ref: '#/components/parameters/ConceptId'
      responses:
        '200':
          description: 'Concept data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinConceptResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Concept or glossary with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    put:
      tags:
        - Glossaries
      summary: 'Update Concept'
      description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the concept and the definition and note stored for each of its languages.\n\n__Note:__ There is no separate method for concept creation. Concepts are automatically created when adding a term without specifying a `conceptId`."
      operationId: api.glossaries.concepts.put
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          $ref: '#/components/parameters/ConceptId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConceptUpdateForm'
      responses:
        '200':
          description: 'Concept was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinConceptResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary or concept with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Glossaries
      summary: 'Delete Concept'
      description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the concept together with every term that belongs to it."
      operationId: api.glossaries.concepts.delete
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          $ref: '#/components/parameters/ConceptId'
      responses:
        '204':
          description: 'Concept was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary or concept with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/dictionaries':
    get:
      tags:
        - Dictionaries
      summary: 'List Dictionaries'
      description: '**Required scopes:** `project.dictionary` (Read only).'
      operationId: api.projects.dictionaries.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/LanguageIds'
      responses:
        '200':
          description: 'Dictionaries list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DictionaryCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/dictionaries/{languageId}':
    patch:
      tags:
        - Dictionaries
      summary: 'Edit Dictionary'
      description: '**Required scopes:** `project.dictionary` (Read and Write).'
      operationId: api.projects.dictionaries.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/LanguageId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DictionaryPatch'
      responses:
        '200':
          description: 'Dictionary was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DictionaryResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/directories':
    get:
      tags:
        - 'Source Files'
      summary: 'List Directories'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.directories.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - name
              - title
              - createdAt
              - updatedAt
              - exportPattern
              - priority
          example: 'createdAt desc,name,priority'
        -
          name: branchId
          in: query
          description: "Filter directories by `branchId`\n\n__Note:__ Can't be used with `directoryId` in the same request.\n\nTo list the directories from all the nested levels within the branch, ensure to use the `recursion` parameter with the `branchId` parameter."
          schema:
            type: integer
        -
          name: directoryId
          in: query
          description: "Filter directories by `directoryId`\n\n__Note:__ Can't be used with `branchId` in the same request.\n\nTo list the directories from all the nested levels within the directory, ensure to use the `recursion` parameter with the `directoryId` parameter."
          schema:
            type: integer
        -
          name: filter
          in: query
          description: 'Filter directories by `name`'
          schema:
            type: string
        -
          name: recursion
          in: query
          description: "Use to list directories recursively\n\n__Note:__ Works only when `directoryId` or `branchId` parameter is specified"
          schema:
            type: boolean
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'List project directories'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DirectoryCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with the specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    post:
      tags:
        - 'Source Files'
      summary: 'Add Directory'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.directories.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DirectoryCreateForm'
      responses:
        '201':
          description: 'Directory was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DirectoryResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, branch, or parent directory with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/directories/{directoryId}':
    get:
      tags:
        - 'Source Files'
      summary: 'Get Directory'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.directories.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DirectoryId'
      responses:
        '200':
          description: 'Directory data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DirectoryResource'
        '404':
          description: 'Project or directory with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'Source Files'
      summary: 'Delete Directory'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.directories.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DirectoryId'
        -
          name: Prefer
          in: header
          description: '**[Recommended]** Set to `respond-async` (RFC 7240) to delete asynchronously. The endpoint then returns 202 with a delete operation to poll.'
          required: false
          schema:
            type: string
            example: respond-async
      responses:
        '204':
          description: 'Directory was successfully deleted'
        '202':
          description: 'Accepted for asynchronous processing (when `Prefer: respond-async` is sent)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodeDeleteResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or directory with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    patch:
      tags:
        - 'Source Files'
      summary: 'Edit Directory'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.directories.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DirectoryId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DirectoryPatch'
      responses:
        '200':
          description: 'Directory was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DirectoryResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or directory with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/directories/{directoryId}/jobs/{jobIdentifier}':
    get:
      tags:
        - 'Source Files'
      summary: 'Check Delete Directory Job Status'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.directories.jobs.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DirectoryId'
        -
          name: identifier
          in: path
          description: 'Delete operation identifier (UUID). Returned by the async DELETE (Prefer: respond-async).'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'Directory delete status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodeDeleteResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or delete operation with specified identifier was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      x-doc-sections:
        - file-based
  /directories:
    get:
      tags:
        - 'Source Files'
      summary: 'Search Directories'
      description: "**Required scopes:** `project.source.file` (Read only).\n\nSearches directories by name/title. Provide up to 50 `projectIds`, or omit them to search all your own projects — or another owner's accessible projects via `userId`."
      operationId: api.directories.getMany
      parameters:
        -
          name: filter
          in: query
          description: 'Search directories by `name` or `title`'
          required: true
          schema:
            type: string
            maxLength: 128
        -
          name: projectIds
          in: query
          description: 'Project identifiers to search across. Get via [List Projects](#operation/api.projects.getMany). It can be one project or a list of comma-separated ones (max 50). All projects must belong to the same owner. Optional — omit to search all your accessible projects.'
          required: false
          schema:
            type: string
          example: '1,2,3'
        -
          name: userId
          in: query
          description: 'Owner (user) whose projects to search when `projectIds` is omitted. Only projects you own or manage are searched. Defaults to your own account.'
          required: false
          schema:
            type: integer
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Matched directories'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DirectoryCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
              example:
                errors:
                  - { error: { key: filter, errors: [{ code: isEmpty, message: "Value is required and can't be empty" }] } }
        '404':
          description: 'One of the requested projects was not found, or you have no projects to search'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
              example:
                error:
                  message: "You don't have any projects to search."
                  code: 404
        '422':
          description: 'The search was too broad to complete within the time limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
              example:
                error:
                  message: 'The search was too broad to complete within the time limit'
                  code: 422
      x-doc-sections:
        - file-based
  '/projects/{projectId}/distributions':
    get:
      tags:
        - Distributions
      summary: 'List Distributions'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.distributions.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Project distributions list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedDistributionCollectionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Distributions
      summary: 'Add Distribution'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.distributions.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DistributionCreateForm'
      responses:
        '201':
          description: 'Distribution was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedDistributionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/distributions/{hash}':
    get:
      tags:
        - Distributions
      summary: 'Get Distribution'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.distributions.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DistributionHash'
      responses:
        '200':
          description: 'Distribution data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedDistributionResource'
          x-doc-sections:
            - file-based
        '404':
          description: 'Project or distribution with specified id or hash was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Distributions
      summary: 'Delete Distribution'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.distributions.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DistributionHash'
      responses:
        '204':
          description: 'Distribution was successfully deleted'
        '404':
          description: 'Project or distribution was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Distributions
      summary: 'Edit Distribution'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.distributions.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DistributionHash'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DistributionPatch'
      responses:
        '200':
          description: 'Distribution was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedDistributionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or distribution was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/distributions/{hash}/release':
    get:
      tags:
        - Distributions
      summary: 'Get Distribution Release'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.distributions.release.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DistributionHash'
      responses:
        '200':
          description: 'Check Distribution Release Status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedDistributionReleaseResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or distribution was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Distributions
      summary: 'Release Distribution'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.distributions.release.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DistributionHash'
      responses:
        '201':
          description: 'Distribution release was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedDistributionReleaseResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or distribution was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/bundles/{bundleId}/files':
    get:
      tags:
        - Translations
      summary: 'Bundle List Files'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.bundles.files.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BundleId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: "Project Bundle files list\n- Translators and proofreaders – receive the response `File Info Resource`\n- Project owners, organization admins, and managers – receive the response `File Resource`"
          content:
            application/json:
              schema:
                oneOf:
                  - { $ref: '#/components/schemas/CrowdinFileInfoCollectionResource' }
                  - { $ref: '#/components/schemas/CrowdinFileCollectionResource' }
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or bundle with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/files':
    get:
      tags:
        - 'Source Files'
      summary: 'List Files'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.files.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - name
              - title
              - status
              - exportPattern
              - priority
              - createdAt
              - updatedAt
          example: 'createdAt desc,name,priority'
        -
          name: branchId
          in: query
          description: "List branch files\n\n__Note:__ Can't be used with `directoryId` in the same request.\n\nTo list the files from all the nested levels within the branch, ensure to use the `recursion` parameter with the `branchId` parameter."
          schema:
            type: integer
        -
          name: directoryId
          in: query
          description: "List directory files\n\n__Note:__ Can't be used with `branchId` in the same request.\n\nTo list the files from all the nested levels within the directory, ensure to use the `recursion` parameter with the `directoryId` parameter."
          schema:
            type: integer
        -
          name: filter
          in: query
          description: 'Filter files by `name`'
          schema:
            type: string
        -
          name: recursion
          in: query
          description: "Use to list files recursively\n\n__Note:__ Works only when `directoryId` or `branchId` parameter is specified"
          schema:
            type: boolean
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: "Project files list\n- Translators and proofreaders – receive the response `File Info Resource`\n- Project owners, organization admins, and managers – receive the response `File Resource`"
          content:
            application/json:
              schema:
                oneOf:
                  - { $ref: '#/components/schemas/CrowdinFileInfoCollectionResource' }
                  - { $ref: '#/components/schemas/CrowdinFileCollectionResource' }
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, branch, or directory with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    post:
      tags:
        - 'Source Files'
      summary: 'Add File'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.files.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileCreateForm'
      responses:
        '201':
          description: 'File was successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, branch, directory, or storage with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/files/{fileId}':
    get:
      tags:
        - 'Source Files'
      summary: 'Get File'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.files.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
      responses:
        '200':
          description: "File data\n- Translators and proofreaders – receive the response `File Info Resource`\n- Project owners, organization admins, and managers – receive the response `File Resource`"
          content:
            application/json:
              schema:
                oneOf:
                  - { $ref: '#/components/schemas/CrowdinFileInfoResource' }
                  - { $ref: '#/components/schemas/CrowdinFileResource' }
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    put:
      tags:
        - 'Source Files'
      summary: 'Update or Restore File'
      description: "**Required scopes:** `project.source.file` (Read and Write).\n\nUpdate your current file with a new one or restore it to one of the previous revisions"
      operationId: api.projects.files.put
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/FileReplaceFromStorageForm'
                -
                  $ref: '#/components/schemas/FileRestoreForm'
      responses:
        '200':
          description: 'File was successfully restored to defined revision'
          headers:
            Crowdin-API-Content-Status:
              description: 'Shows whether the file content was modified (if `Replace File From Storage` was used)'
              schema:
                type: string
                enum:
                  - modified
                  - not-modified
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project, file, or revision with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'Source Files'
      summary: 'Delete File'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.files.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
        -
          name: Prefer
          in: header
          description: '**[Recommended]** Set to `respond-async` (RFC 7240) to delete asynchronously. The endpoint then returns 202 with a delete operation to poll.'
          required: false
          schema:
            type: string
            example: respond-async
      responses:
        '204':
          description: 'File was successfully deleted'
        '202':
          description: 'Accepted for asynchronous processing (when `Prefer: respond-async` is sent)'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodeDeleteResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    patch:
      tags:
        - 'Source Files'
      summary: 'Edit File'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.files.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FilePatch'
      responses:
        '200':
          description: 'File was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/files/{fileId}/jobs/{jobIdentifier}':
    get:
      tags:
        - 'Source Files'
      summary: 'Check Delete File Job Status'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.files.jobs.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
        -
          name: identifier
          in: path
          description: 'Delete operation identifier (UUID). Returned by the async DELETE (Prefer: respond-async).'
          required: true
          schema:
            type: string
      responses:
        '200':
          description: 'File delete status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NodeDeleteResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or delete operation with specified identifier was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/files/{fileId}/preview':
    get:
      tags:
        - 'Source Files'
      summary: 'Download File Preview'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.files.preview.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
      responses:
        '200':
          description: 'File preview download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, file, or review with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/files/{fileId}/download':
    get:
      tags:
        - 'Source Files'
      summary: 'Download File'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.files.download.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
      responses:
        '200':
          description: 'File download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  /files:
    get:
      tags:
        - 'Source Files'
      summary: 'Search Files'
      description: "**Required scopes:** `project.source.file` (Read only).\n\nSearches source files by name/title. Provide up to 50 `projectIds`, or omit them to search all your own projects — or another owner's accessible projects via `userId`."
      operationId: api.files.getMany
      parameters:
        -
          name: filter
          in: query
          description: 'Search files by `name` or `title`'
          required: true
          schema:
            type: string
            maxLength: 128
        -
          name: projectIds
          in: query
          description: 'Project identifiers to search across. Get via [List Projects](#operation/api.projects.getMany). It can be one project or a list of comma-separated ones (max 50). All projects must belong to the same owner. Optional — omit to search all your accessible projects.'
          required: false
          schema:
            type: string
          example: '1,2,3'
        -
          name: userId
          in: query
          description: 'Owner (user) whose projects to search when `projectIds` is omitted. Only projects you own or manage are searched. Defaults to your own account.'
          required: false
          schema:
            type: integer
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Matched files'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
              example:
                errors:
                  - { error: { key: filter, errors: [{ code: isEmpty, message: "Value is required and can't be empty" }] } }
        '404':
          description: 'One of the requested projects was not found, or you have no projects to search'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
              example:
                error:
                  message: "You don't have any projects to search."
                  code: 404
        '422':
          description: 'The search was too broad to complete within the time limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
              example:
                error:
                  message: 'The search was too broad to complete within the time limit'
                  code: 422
      x-doc-sections:
        - file-based
  /glossaries:
    get:
      tags:
        - Glossaries
      summary: 'List Glossaries'
      description: '**Required scopes:** `glossary` (Read only).'
      operationId: api.glossaries.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: name
            enum:
              - id
              - name
              - userId
              - createdAt
          example: 'createdAt desc,name'
        -
          name: userId
          in: query
          description: 'List user glossaries'
          schema:
            type: integer
        -
          name: filter
          in: query
          description: 'Filter glossaries by `name`'
          schema:
            type: string
      responses:
        '200':
          description: 'List Glossaries'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinGlossaryCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Glossaries
      summary: 'Add Glossary'
      description: '**Required scopes:** `glossary` (Read and Write).'
      operationId: api.glossaries.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinGlossaryCreateForm'
      responses:
        '201':
          description: 'Glossary was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinGlossaryResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/glossaries/{glossaryId}':
    get:
      tags:
        - Glossaries
      summary: 'Get Glossary'
      description: '**Required scopes:** `glossary` (Read only).'
      operationId: api.glossaries.get
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
      responses:
        '200':
          description: 'Glossary data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinGlossaryResource'
        '404':
          description: 'Glossary with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Glossaries
      summary: 'Delete Glossary'
      description: '**Required scopes:** `glossary` (Read and Write).'
      operationId: api.glossaries.delete
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
      responses:
        '204':
          description: 'Glossary was successfully deleted'
        '404':
          description: 'Glossary with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - Glossaries
      summary: 'Edit Glossary'
      description: '**Required scopes:** `glossary` (Read and Write).'
      operationId: api.glossaries.patch
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>. Supported paths: /name, /languageId, /isShared.'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GlossaryPatch'
      responses:
        '200':
          description: 'Glossary was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinGlossaryResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Glossary with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
  '/glossaries/{glossaryId}/exports':
    post:
      tags:
        - Glossaries
      summary: 'Export Glossary'
      description: '**Required scopes:** `glossary` (Read only).'
      operationId: api.glossaries.exports.post
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GlossaryExportForm'
      responses:
        '202':
          description: 'Glossary export was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlossaryExportResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/glossaries/{glossaryId}/exports/{exportId}':
    get:
      tags:
        - Glossaries
      summary: 'Check Glossary Export Status'
      description: '**Required scopes:** `glossary` (Read only).'
      operationId: api.glossaries.exports.get
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          $ref: '#/components/parameters/ExportGlossaryId'
      responses:
        '200':
          description: 'Glossary export data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlossaryExportResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary or export with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/glossaries/{glossaryId}/exports/{exportId}/download':
    get:
      tags:
        - Glossaries
      summary: 'Download Glossary'
      description: '**Required scopes:** `glossary` (Read only).'
      operationId: api.glossaries.exports.download.download
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          $ref: '#/components/parameters/ExportGlossaryId'
      responses:
        '200':
          description: 'Glossary download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary of Job with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/glossaries/{glossaryId}/imports':
    post:
      tags:
        - Glossaries
      summary: 'Import Glossary'
      description: '**Required scopes:** `glossary` (Read and Write).'
      operationId: api.glossaries.imports.post
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GlossaryImportForm'
      responses:
        '202':
          description: 'Glossary import was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlossaryImportResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary or storage with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/glossaries/{glossaryId}/imports/{importId}':
    get:
      tags:
        - Glossaries
      summary: 'Check Glossary Import Status'
      description: '**Required scopes:** `glossary` (Read and Write).'
      operationId: api.glossaries.imports.get
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          $ref: '#/components/parameters/ImportGlossaryId'
      responses:
        '200':
          description: 'Glossary import data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlossaryImportResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary or import with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  /glossaries/concordance:
    post:
      tags:
        - Glossaries
      summary: 'Concordance search in Glossaries'
      description: '**Required scopes:** `glossary` (Read only).'
      operationId: api.glossaries.concordance.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinOrganizationGlossaryConcordanceForm'
      responses:
        '200':
          description: 'Concordance Result Collection'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlossaryConcordanceResultCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Organization was not found, or you have no glossaries to search'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
              example:
                error:
                  message: "You don't have any glossaries to search."
                  code: 404
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/glossaries/concordance':
    post:
      tags:
        - Glossaries
      summary: 'Concordance search in project Glossaries'
      description: '**Required scopes:** `glossary` (Read and Write).'
      operationId: api.projects.glossaries.concordance.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GlossaryConcordanceForm'
      responses:
        '200':
          description: 'Concordance Result Collection'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlossaryConcordanceResultCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/issues':
    get:
      tags:
        - Issues
      summary: 'List Reported Issues.'
      description: "**Required scopes:** `project.status.issue` (Read only).\n\nUse [List String Comments](#operation/api.projects.comments.getMany) instead."
      operationId: api.projects.issues.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/IssueType'
        -
          $ref: '#/components/parameters/IssueStatus'
      responses:
        '200':
          description: 'Reported issues list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      deprecated: true
  '/projects/{projectId}/issues/{issueId}':
    patch:
      tags:
        - Issues
      summary: 'Edit Issue'
      description: "**Required scopes:** `project.status.issue` (Read and Write).\n\nUse [Edit String Comment](#operation/api.projects.comments.patch) instead."
      operationId: api.projects.issues.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/IssueId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IssuePatch'
      responses:
        '200':
          description: 'Issue was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssueResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or issue with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      deprecated: true
  '/projects/{projectId}/labels/{labelId}/strings':
    post:
      tags:
        - Labels
      summary: 'Assign Label to Strings'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.labels.strings.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/LabelId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LabelStringAssignForm'
      responses:
        '200':
          description: 'Label was successfully assigned to Strings'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedStringCollectionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or label with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Labels
      summary: 'Unassign Label from Strings'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.labels.strings.deleteMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/LabelId'
        -
          name: stringIds
          in: query
          description: "String Identifiers. Get via [List Strings](#operation/api.projects.strings.getMany)\n\n__Note:__ You can unassign up to 500 strings at a time."
          required: true
          schema:
            type: string
            example: '1,2,3,4,5'
      responses:
        '200':
          description: 'Label was successfully unassigned from Strings'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedStringCollectionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or label with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/labels':
    get:
      tags:
        - Labels
      summary: 'List Labels'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.labels.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - title
          example: 'title desc,id'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Project labels list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabelCollectionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Labels
      summary: 'Add Label'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.labels.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LabelCreateForm'
      responses:
        '201':
          description: 'Label was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabelResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/labels/{labelId}':
    get:
      tags:
        - Labels
      summary: 'Get Label'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.labels.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/LabelId'
      responses:
        '200':
          description: 'Label data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabelResource'
          x-doc-sections:
            - file-based
        '404':
          description: 'Project or label with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Labels
      summary: 'Delete Label'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.labels.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/LabelId'
      responses:
        '204':
          description: 'Label was successfully deleted'
        '404':
          description: 'Project or label with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Labels
      summary: 'Edit Label'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.labels.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/LabelId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LabelPatch'
      responses:
        '200':
          description: 'Label data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LabelResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or label with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/labels/{labelId}/screenshots':
    post:
      tags:
        - Labels
      summary: 'Assign Label to Screenshots'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.labels.screenshots.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/LabelId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LabelScreenshotAssignForm'
      responses:
        '200':
          description: 'Label was successfully assigned to Screenshots'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenshotCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or label with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Labels
      summary: 'Unassign Label from Screenshots'
      description: '**Required scopes:** `project.source.file` (Read and Write).'
      operationId: api.projects.labels.screenshots.deleteMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/LabelId'
        -
          name: screenshotIds
          in: query
          description: "Screenshots Identifiers. Get via [List Screenshots](#operation/api.projects.screenshots.getMany)\n\n__Note:__ You can unassign up to 500 screenshots at a time."
          required: true
          schema:
            type: string
            example: '1,2,3,4,5'
      responses:
        '200':
          description: 'Label was successfully unassigned from Screenshots'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenshotCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or label with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  /languages:
    get:
      tags:
        - Languages
      summary: 'List Supported Languages'
      operationId: api.languages.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Supported languages list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LanguageCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Languages
      summary: 'Add Custom Language'
      description: '**Required scopes:** `language` (Read and Write).'
      operationId: api.languages.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LanguageCreateForm'
      responses:
        '201':
          description: 'Language was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LanguageResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/languages/{languageId}':
    get:
      tags:
        - Languages
      summary: 'Get Language'
      operationId: api.languages.get
      parameters:
        -
          $ref: '#/components/parameters/LanguageId'
      responses:
        '200':
          description: 'Language data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LanguageResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Languages
      summary: 'Delete Custom Language'
      description: '**Required scopes:** `language` (Read and Write).'
      operationId: api.languages.delete
      parameters:
        -
          $ref: '#/components/parameters/LanguageId'
      responses:
        '204':
          description: 'Language was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
    patch:
      tags:
        - Languages
      summary: 'Edit Custom Language'
      description: '**Required scopes:** `language` (Read and Write).'
      operationId: api.languages.patch
      parameters:
        -
          $ref: '#/components/parameters/LanguageId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomLanguagePatch'
      responses:
        '200':
          description: 'Language was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LanguageResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  /mts:
    get:
      tags:
        - 'Machine Translation Engines'
      summary: 'List MTs'
      description: '**Required scopes:** `mt` (Read only).'
      operationId: api.mts.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'MTs list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinMtCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/mts/{mtId}':
    get:
      tags:
        - 'Machine Translation Engines'
      summary: 'Get MT'
      description: '**Required scopes:** `mt` (Read only).'
      operationId: api.mts.get
      parameters:
        -
          $ref: '#/components/parameters/MtId'
      responses:
        '200':
          description: 'MT data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinMtResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'MT with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/mts/{mtId}/translations':
    post:
      tags:
        - 'Machine Translation Engines'
      summary: 'Translate via MT'
      description: '**Required scopes:** `mt` (Read and Write).'
      operationId: api.mts.translations.post
      parameters:
        -
          $ref: '#/components/parameters/MtId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MtTranslateForm'
      responses:
        '200':
          description: 'String was translated successfully'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MtTranslationResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'MT with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  /notify:
    post:
      tags:
        - Notifications
      summary: 'Send Notification to Authenticated User'
      description: '**Required scopes:** `notification` (Read and Write).'
      operationId: api.notify.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppNotificationForm'
      responses:
        '204':
          description: 'No Content'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/notify':
    post:
      tags:
        - Notifications
      summary: 'Send Notification To Project Members'
      description: '**Required scopes:** `project` (Read and Write).'
      operationId: api.projects.notify.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/NotificationFormById'
                -
                  $ref: '#/components/schemas/NotificationFormByRoleInProject'
      responses:
        '204':
          description: 'No Content'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  /webhooks:
    get:
      tags:
        - 'Organization Webhooks'
      summary: 'List Webhooks'
      description: '**Required scopes:** `webhook` (Read only).'
      operationId: api.webhooks.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Webhooks list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinOrganizationWebhookCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - 'Organization Webhooks'
      summary: 'Add Webhook'
      description: '**Required scopes:** `webhook` (Read and Write).'
      operationId: api.webhooks.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinOrganizationWebhookCreateForm'
      responses:
        '201':
          description: 'Webhook was successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinOrganizationWebhookResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/webhooks/{organizationWebhookId}':
    get:
      tags:
        - 'Organization Webhooks'
      summary: 'Get Webhook'
      description: '**Required scopes:** `webhook` (Read only).'
      operationId: api.webhooks.get
      parameters:
        -
          $ref: '#/components/parameters/OrganizationWebhookId'
      responses:
        '200':
          description: 'Webhook data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinOrganizationWebhookResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Webhook with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - 'Organization Webhooks'
      summary: 'Delete Webhook'
      description: '**Required scopes:** `webhook` (Read and Write).'
      operationId: api.webhooks.delete
      parameters:
        -
          $ref: '#/components/parameters/OrganizationWebhookId'
      responses:
        '204':
          description: 'Webhook was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Webhook with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - 'Organization Webhooks'
      summary: 'Edit Webhook'
      description: '**Required scopes:** `webhook` (Read and Write).'
      operationId: api.webhooks.patch
      parameters:
        -
          $ref: '#/components/parameters/OrganizationWebhookId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrganizationWebhookPatch'
      responses:
        '200':
          description: 'Webhook was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinOrganizationWebhookResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Webhook with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
  '/projects/{projectId}/pre-translations':
    get:
      tags:
        - Translations
      summary: 'List Auto-Translations'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.pre-translations.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            enum:
              - priority
              - status
              - createdAt
          example: 'priority desc,createdAt'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Auto-translation list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinPreTranslationCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Translations
      summary: 'Apply Auto-Translation'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.pre-translations.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PreTranslationForm'
      responses:
        '202':
          description: 'Auto-translation was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinPreTranslationResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Translations
      summary: 'Auto-Translation Batch Operations'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.pre-translations.patchBatch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PreTranslationMassPatch'
      responses:
        '200':
          description: 'Auto-translations were successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinPreTranslationUpdatedCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPatchCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/pre-translations/{jobIdentifier}':
    get:
      tags:
        - Translations
      summary: 'Auto-Translation Status'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.pre-translations.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PreTranslationId'
      responses:
        '200':
          description: 'Auto-translation status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinPreTranslationResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or auto-translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Translations
      summary: 'Edit Auto-Translation'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.pre-translations.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PreTranslationId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PreTranslationPatch'
      responses:
        '200':
          description: 'Auto-translation was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinPreTranslationResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or auto-translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/pre-translations/{jobIdentifier}/report':
    get:
      tags:
        - Translations
      summary: 'Auto-Translation Report'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.pre-translations.report.getReport
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PreTranslationId'
      responses:
        '200':
          description: 'Auto-translation report'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreTranslationReportResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or auto-translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/branches/{branchId}/languages/progress':
    get:
      tags:
        - 'Translation Status'
      summary: 'Get Branch Progress'
      description: '**Required scopes:** `project.status.progress` (Read only).'
      operationId: api.projects.branches.languages.progress.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BranchId'
      responses:
        '200':
          description: 'Branch translation progress'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProgressCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or branch with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/directories/{directoryId}/languages/progress':
    get:
      tags:
        - 'Translation Status'
      summary: 'Get Directory Progress'
      description: '**Required scopes:** `project.status.progress` (Read only).'
      operationId: api.projects.directories.languages.progress.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DirectoryId'
      responses:
        '200':
          description: 'Directory translation progress'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProgressCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or directory with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/files/{fileId}/languages/progress':
    get:
      tags:
        - 'Translation Status'
      summary: 'Get File Progress'
      description: '**Required scopes:** `project.status.progress` (Read only).'
      operationId: api.projects.files.languages.progress.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
      responses:
        '200':
          description: 'File translation progress'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileProgressCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/languages/{languageId}/progress':
    get:
      tags:
        - 'Translation Status'
      summary: 'Get Language Progress'
      description: '**Required scopes:** `project.status.progress` (Read only).'
      operationId: api.projects.languages.files.progress.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ProjectTargetLanguageId'
      responses:
        '200':
          description: 'Language translation progress'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LanguageFilesProgressCollectionResource'
          x-doc-sections:
            - file-based
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/languages/progress':
    get:
      tags:
        - 'Translation Status'
      summary: 'Get Project Progress'
      description: '**Required scopes:** `project.status.progress` (Read only).'
      operationId: api.projects.languages.progress.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ProjectTargetLanguageIds'
      responses:
        '200':
          description: 'Project translation progress'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProgressCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/ai/settings':
    get:
      tags:
        - AI
      summary: 'Get Project AI Settings'
      description: '**Required scopes:** `project` (Read only).'
      operationId: api.projects.ai.settings.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: 'AI settings'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinProjectAiSettingsResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  /projects:
    get:
      tags:
        - Projects
      summary: 'List Projects'
      description: '**Required scopes:** `project.settings` (Read only).'
      operationId: api.projects.getMany
      parameters:
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - name
              - identifier
              - description
              - createdAt
              - updatedAt
              - lastActivity
          example: 'createdAt desc,name,id'
        -
          name: filter
          in: query
          description: 'Filter projects by `name`'
          schema:
            type: string
        -
          name: userId
          in: query
          description: 'User Identifier. Get via [Get Authenticated User](#operation/api.user.get)'
          schema:
            type: integer
        -
          $ref: '#/components/parameters/HasManagerAccess'
        -
          $ref: '#/components/parameters/ProjectType'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Projects list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedProjectCollectionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Projects
      summary: 'Add Project'
      description: '**Required scopes:** `project.settings` (Read and Write).'
      operationId: api.projects.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectCreateForm'
      responses:
        '201':
          description: 'Project was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedProjectResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}':
    get:
      tags:
        - Projects
      summary: 'Get Project'
      description: '**Required scopes:** `project.settings` (Read only).'
      operationId: api.projects.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: "Project data\n * Translators and proofreaders – receive the response `Project Info` (all the project data, that's visible to all the project members within the ui)\n * Project owners, organization admins, managers and developers – receive the response `Project Settings` (all the basic project info plus extended details, including project settings, resources, QA checks, and more)"
          content:
            application/json:
              schema:
                oneOf:
                  - { $ref: '#/components/schemas/CrowdinProjectInfoResource' }
                  - { $ref: '#/components/schemas/CrowdinFileBasedProjectResource' }
          x-doc-sections:
            - file-based
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Projects
      summary: 'Delete Project'
      description: '**Required scopes:** `project` (Read and Write).'
      operationId: api.projects.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      responses:
        '204':
          description: 'Project was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - Projects
      summary: 'Edit Project'
      description: '**Required scopes:** `project.settings` (Read and Write).'
      operationId: api.projects.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectInfoPatch'
      responses:
        '200':
          description: 'Project was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedProjectResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/file-format-settings/{fileFormatSettingsId}/custom-segmentations':
    get:
      tags:
        - Projects
      summary: 'Download Project File Format Settings Custom Segmentation'
      description: '**Required scopes:** `project.settings` (Read only).'
      operationId: api.projects.file-format-settings.custom-segmentations.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileFormatSettingsId'
      responses:
        '200':
          description: 'File Format Settings Custom Segmentation data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, File Format Settings or Custom Segmentations Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Projects
      summary: 'Reset Project File Format Settings Custom Segmentation'
      description: '**Required scopes:** `project.settings` (Read and Write).'
      operationId: api.projects.file-format-settings.custom-segmentations.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileFormatSettingsId'
      responses:
        '204':
          description: 'File Format Settings Custom Segmentations was successfully reset'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or File Format Settings Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/file-format-settings':
    get:
      tags:
        - Projects
      summary: 'List Project File Format Settings'
      description: '**Required scopes:** `project.settings` (Read only).'
      operationId: api.projects.file-format-settings.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: 'File format settings list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedFileFormatSettingsCollectionResource'
          x-doc-sections:
            - file-based
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Projects
      summary: 'Add Project File Format Settings'
      description: '**Required scopes:** `project.settings` (Read and Write).'
      operationId: api.projects.file-format-settings.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileFormatSettingsCreateForm'
      responses:
        '201':
          description: 'File format settings was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedFileFormatSettingsResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/file-format-settings/{fileFormatSettingsId}':
    get:
      tags:
        - Projects
      summary: 'Get Project File Format Settings'
      description: '**Required scopes:** `project.settings` (Read only).'
      operationId: api.projects.file-format-settings.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileFormatSettingsId'
      responses:
        '200':
          description: 'File Format Settings data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedFileFormatSettingsResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or File Format Settings Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Projects
      summary: 'Delete Project File Format Settings'
      description: '**Required scopes:** `project.settings` (Read and Write).'
      operationId: api.projects.file-format-settings.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileFormatSettingsId'
      responses:
        '204':
          description: 'File Format Settings was successfully deleted'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or File Format Settings Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Projects
      summary: 'Edit Project File Format Settings'
      description: '**Required scopes:** `project.settings` (Read and Write).'
      operationId: api.projects.file-format-settings.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileFormatSettingsId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FileFormatSettingsPatch'
      responses:
        '201':
          description: 'File Format Settings was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedFileFormatSettingsResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or File Format Settings Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/system-placeholders':
    get:
      tags:
        - Placeholders
      summary: 'List Project System Placeholders'
      description: "**Required scopes:** `project.placeholder` (Read only).\n\nReturns every placeholder Crowdin ships, with the state it has in this project. The catalogue is fixed and always comes in the same order, so `isEnabled` is the only value that changes between requests. See [Placeholders](#tag/Placeholders) for what each key matches."
      operationId: api.projects.system-placeholders.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: 'Project system placeholders list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectSystemPlaceholderCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - Placeholders
      summary: 'Project System Placeholder Batch Operations'
      description: "**Required scopes:** `project.placeholder` (Read and Write).\n\nTurns system placeholders on and off — one row or a whole screen of them in one request. Each operation names its own row, so the change costs one call, one re-validation of the `Placeholders` check and one write, and the response carries the rows it changed, in catalogue order.\n\n__Note:__ A `test` operation asserts the state of a row without writing it, so a document of `test` operations alone changes nothing"
      operationId: api.projects.system-placeholders.batchPatch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectSystemPlaceholderMassPatch'
      responses:
        '200':
          description: 'Project system placeholders were successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectSystemPlaceholderUpdatedCollectionResource'
        '400':
          description: 'Invalid Request Parameters. A malformed operation is reported as `ErrorCollectionResource`, with the operation index in `key`; a well-formed operation that cannot be applied is reported as `ErrorPatchCollectionResource`, with it in `index`'
          content:
            application/json:
              schema:
                oneOf:
                  - { $ref: '#/components/schemas/ErrorPatchCollectionResource' }
                  - { $ref: '#/components/schemas/ErrorCollectionResource' }
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/strings-exporter-settings':
    get:
      tags:
        - Projects
      summary: 'List Project Strings Exporter Settings'
      description: '**Required scopes:** `project.settings` (Read only).'
      operationId: api.projects.strings-exporter-settings.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: 'Strings exporter settings list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemStringsExporterSettingsCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Projects
      summary: 'Add Project Strings Exporter Settings'
      description: '**Required scopes:** `project.settings` (Read and Write).'
      operationId: api.projects.strings-exporter-settings.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/AndroidSystemStringsExporterSettings'
                -
                  $ref: '#/components/schemas/MacOSXSystemStringsExporterSettings'
                -
                  $ref: '#/components/schemas/XliffSystemStringsExporterSettings'
      responses:
        '201':
          description: 'Strings exporter settings was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemStringsExporterSettingsResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/strings-exporter-settings/{systemStringsExporterSettingsId}':
    get:
      tags:
        - Projects
      summary: 'Get Project Strings Exporter Settings'
      description: '**Required scopes:** `project.settings` (Read only).'
      operationId: api.projects.strings-exporter-settings.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/SystemStringsExporterSettingsId'
      responses:
        '200':
          description: 'Strings Exporter Settings data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemStringsExporterSettingsResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or Strings Exporter Settings Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Projects
      summary: 'Delete Project Strings Exporter Settings'
      description: '**Required scopes:** `project.settings` (Read and Write).'
      operationId: api.projects.strings-exporter-settings.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/SystemStringsExporterSettingsId'
      responses:
        '204':
          description: 'Strings Exporter Settings was successfully deleted'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or Strings Exporter Settings Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Projects
      summary: 'Edit Project Strings Exporter Settings'
      description: "**Required scopes:** `project.settings` (Read and Write).\n\nEdit project strings exporter settings\n\n__Note:__ Replacing `/format` requires replacing `/settings` in the same request — settings are format-specific"
      operationId: api.projects.strings-exporter-settings.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/SystemStringsExporterSettingsId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SystemStringsExporterSettingsPatch'
      responses:
        '200':
          description: 'Strings Exporter Settings was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemStringsExporterSettingsResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or Strings Exporter Settings Not Found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/qa-checks/revalidate':
    post:
      tags:
        - 'Translation Status'
      summary: 'Revalidate QA Checks'
      description: "**Required scopes:** `project.status.qa-check` (Read and Write).\n\nTriggers revalidation of all QA checks for the project"
      operationId: api.projects.qa-checks.revalidate.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              properties:
                qaCheckCategories:
                  description: 'QA check categories to revalidate. If not specified, all active categories will be checked. You can get the list of available QA check categories via [Get Project](#operation/api.projects.get)'
                  type: array
                  items: { type: string, enum: [terms, ai] }
                  example: [ai]
                languageIds:
                  description: 'Language IDs to revalidate. If not specified, all languages will be checked. Get Project Target Languages via [Get Project](#operation/api.projects.get)'
                  type: array
                  items: { type: string }
                  example: [uk, fr]
                failedOnly:
                  description: 'If true, only languages with failed QA checks will be revalidated'
                  type: boolean
                  default: false
                  example: true
              type: object
      responses:
        '202':
          description: 'QA checks revalidation job created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QaCheckRevalidationResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '409':
          description: 'QA check revalidation is already in progress'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/projects/{projectId}/qa-checks/revalidate/{revalidationId}':
    get:
      tags:
        - 'Translation Status'
      summary: 'QA Checks Revalidation Status'
      description: "**Required scopes:** `project.status.qa-check` (Read and Write).\n\nReturns the status of QA checks revalidation job"
      operationId: api.projects.qa-checks.revalidate.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: revalidationId
          in: path
          description: 'QA Checks Revalidation Identifier, consists of 36 characters. Get via [Revalidate QA Checks](#operation/api.projects.qa-checks.revalidate.post)'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'QA checks revalidation status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QaCheckRevalidationResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or QA check revalidation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - 'Translation Status'
      summary: 'Cancel QA Checks Revalidation'
      description: "**Required scopes:** `project.status.qa-check` (Read and Write).\n\nCancels the QA checks revalidation job"
      operationId: api.projects.qa-checks.revalidate.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: revalidationId
          in: path
          description: 'QA Checks Revalidation Identifier, consists of 36 characters. Get via [Revalidate QA Checks](#operation/api.projects.qa-checks.revalidate.post)'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '204':
          description: 'QA checks revalidation was successfully canceled'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or QA check revalidation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/qa-checks':
    get:
      tags:
        - 'Translation Status'
      summary: 'List QA Check Issues'
      description: '**Required scopes:** `project.status.qa-check` (Read only).'
      operationId: api.projects.qa-checks.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/QaCheckCategory'
        -
          $ref: '#/components/parameters/QaCheckValidation'
        -
          $ref: '#/components/parameters/ProjectTargetLanguageIds'
        -
          $ref: '#/components/parameters/TaskIdInQuery'
        -
          name: fileId
          in: query
          description: 'Filter the collection by the specified file id. Get via [List Files](#operation/api.projects.files.getMany)'
          required: false
          schema:
            type: integer
            minimum: 0
          example: '2'
          x-doc-sections:
            - file-based
      responses:
        '200':
          description: 'QA check issues list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QaCheckCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/files/{fileId}/references':
    get:
      tags:
        - 'Source Files'
      summary: 'List Asset References'
      description: "**Required scopes:** `project.source.file` (Read only).\n\nList all reference files for an asset"
      operationId: api.projects.files.references.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Asset references list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferenceCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
      x-doc-sections:
        - file-based
    post:
      tags:
        - 'Source Files'
      summary: 'Add Asset Reference'
      description: "**Required scopes:** `project.source.file` (Read and Write).\n\nUpload a reference file for an asset"
      operationId: api.projects.files.references.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReferenceCreateForm'
      responses:
        '201':
          description: 'Asset reference was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferenceResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/files/{fileId}/references/{referenceId}':
    get:
      tags:
        - 'Source Files'
      summary: 'Get Asset Reference'
      description: "**Required scopes:** `project.source.file` (Read only).\n\nGet information about a specific asset reference"
      operationId: api.projects.files.references.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
        -
          name: referenceId
          in: path
          description: 'Reference Identifier'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Asset reference details'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferenceResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, file, or reference with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'Source Files'
      summary: 'Delete Asset Reference'
      description: "**Required scopes:** `project.source.file` (Read and Write).\n\nDelete a reference file for an asset"
      operationId: api.projects.files.references.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
        -
          name: referenceId
          in: path
          description: 'Reference Identifier'
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Asset reference was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, file, or reference with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
      x-doc-sections:
        - file-based
  '/users/{userId}/reports/archives':
    get:
      tags:
        - Reports
      summary: 'List Report Archives'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.reports.archives.getMany
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/CrowdinReportArchiveScopeType'
        -
          $ref: '#/components/parameters/CrowdinReportArchiveScopeId'
        -
          name: userId
          in: query
          description: 'User Identifier'
          schema:
            type: integer
        -
          name: taskId
          in: query
          description: 'Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
          schema:
            type: integer
        -
          name: name
          in: query
          schema:
            type: string
            enum:
              - costs-estimation-pe
              - translation-costs-pe
              - pre-translate-accuracy
              - translator-accuracy
        -
          name: dateFrom
          in: query
          description: 'Archive date from in UTC, ISO 8601'
          schema:
            type: string
            format: date-time
          example: '2019-09-23T07:00:14+00:00'
        -
          name: dateTo
          in: query
          description: 'Archive date to in UTC, ISO 8601'
          schema:
            type: string
            format: date-time
          example: '2019-09-27T07:00:14+00:00'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Report archives list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportArchiveCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/reports/archives/{archiveId}':
    get:
      tags:
        - Reports
      summary: 'Get Report Archive'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.users.reports.archives.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/ReportArchiveId'
      responses:
        '200':
          description: 'Report archive'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportArchiveResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User or Report Archive with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Reports
      summary: 'Delete Report Archive'
      description: '**Required scopes:** `project.report` (Read and Write).'
      operationId: api.users.reports.archives.delete
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/ReportArchiveId'
      responses:
        '204':
          description: 'Report Archive was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User or Report Archive with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/reports/archives/{archiveId}/exports':
    post:
      tags:
        - Reports
      summary: 'Export Report Archive'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.reports.archives.exports.post
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/ReportArchiveId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportArchiveExportForm'
      responses:
        '202':
          description: 'Report Archive export was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User or Report archive with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/users/{userId}/reports/archives/{archiveId}/exports/{exportId}':
    get:
      tags:
        - Reports
      summary: 'Check Report Archive Export Status'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.users.reports.archives.exports.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/ReportArchiveId'
        -
          $ref: '#/components/parameters/ExportArchiveId'
      responses:
        '200':
          description: 'Report Archive export status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User, report archive or export job with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/reports/archives/{archiveId}/exports/{exportId}/download':
    get:
      tags:
        - Reports
      summary: 'Download Report Archive'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.users.reports.archives.exports.download.get
      parameters:
        -
          $ref: '#/components/parameters/UserId'
        -
          $ref: '#/components/parameters/ReportArchiveId'
        -
          $ref: '#/components/parameters/ExportArchiveId'
      responses:
        '200':
          description: 'Report Archive download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User, report archive or export job with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/reports':
    post:
      tags:
        - Reports
      summary: 'Generate Report'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.projects.reports.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/PreTranslateAccuracy'
                -
                  $ref: '#/components/schemas/TranslatorAccuracy'
                -
                  $ref: '#/components/schemas/CostsEstimationPostEditing'
                -
                  $ref: '#/components/schemas/TranslationCostsPostEditing'
                -
                  $ref: '#/components/schemas/TopMembers'
                -
                  $ref: '#/components/schemas/ContributionRawData'
                -
                  $ref: '#/components/schemas/SourceContentUpdates'
                -
                  $ref: '#/components/schemas/ProjectMembersStatistics'
                -
                  $ref: '#/components/schemas/EditorIssues'
                -
                  $ref: '#/components/schemas/ProjectQaCheckIssues'
                -
                  $ref: '#/components/schemas/ProjectSavingActivity'
                -
                  $ref: '#/components/schemas/ProjectTranslationActivity'
                -
                  $ref: '#/components/schemas/TimeSpent'
      responses:
        '201':
          description: 'Report generation was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/projects/{projectId}/reports/{reportId}':
    get:
      tags:
        - Reports
      summary: 'Check Report Generation Status'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.projects.reports.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ReportId'
      responses:
        '200':
          description: 'Report generation status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or report with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  '/projects/{projectId}/reports/{reportId}/download':
    get:
      tags:
        - Reports
      summary: 'Download Report'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.projects.reports.download.download
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ReportId'
      responses:
        '200':
          description: 'Report download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or report with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/reports/settings-templates':
    get:
      tags:
        - Reports
      summary: 'List Report Settings Templates'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.projects.reports.settings-templates.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Report Settings Templates list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportSettingsTemplateCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Reports
      summary: 'Add Report Settings Template'
      description: '**Required scopes:** `project.report` (Read and Write).'
      operationId: api.projects.reports.settings-templates.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/CrowdinPEReportProjectSettingsTemplateCreateForm'
                -
                  $ref: '#/components/schemas/CrowdinReportHourlySettingsTemplateCreateForm'
      responses:
        '201':
          description: 'Report Settings Template was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportSettingsTemplateResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/reports/settings-templates/{reportSettingsTemplateId}':
    get:
      tags:
        - Reports
      summary: 'Get Report Settings Template'
      description: '**Required scopes:** `project.report` (Read only).'
      operationId: api.projects.reports.settings-templates.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ReportSettingsTemplateId'
      responses:
        '200':
          description: 'Report Settings Template data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportSettingsTemplateResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or report settings template with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Reports
      summary: 'Delete Report Settings Template'
      description: '**Required scopes:** `project.report` (Read and Write).'
      operationId: api.projects.reports.settings-templates.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ReportSettingsTemplateId'
      responses:
        '204':
          description: 'Report Settings Template was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or report settings template with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - Reports
      summary: 'Edit Report Settings Template'
      description: '**Required scopes:** `project.report` (Read and Write).'
      operationId: api.projects.reports.settings-templates.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ReportSettingsTemplateId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportSettingsTemplatePatch'
      responses:
        '200':
          description: 'Report Settings Template was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportSettingsTemplateResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or settings template with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/reports/settings-templates':
    get:
      tags:
        - Reports
      summary: 'List User Report Settings Templates'
      description: '**Required scopes:** `user` (Read only).'
      operationId: api.users.reports.settings-templates.getMany
      parameters:
        -
          $ref: '#/components/parameters/AuthenticatedUser'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Report Settings Templates list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserReportSettingsTemplateCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Reports
      summary: 'Add User Report Settings Template'
      description: '**Required scopes:** `user` (Read and Write).'
      operationId: api.users.reports.settings-templates.post
      parameters:
        -
          $ref: '#/components/parameters/AuthenticatedUser'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/UserPEReportSettingsTemplateCreateForm'
                -
                  $ref: '#/components/schemas/UserReportHourlySettingsTemplateCreateForm'
      responses:
        '201':
          description: 'Report Settings Template was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserReportSettingsTemplateResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/users/{userId}/reports/settings-templates/{reportSettingsTemplateId}':
    get:
      tags:
        - Reports
      summary: 'Get User Report Settings Template'
      description: '**Required scopes:** `user` (Read only).'
      operationId: api.users.reports.settings-templates.get
      parameters:
        -
          $ref: '#/components/parameters/AuthenticatedUser'
        -
          $ref: '#/components/parameters/UserReportSettingsTemplateId'
      responses:
        '200':
          description: 'Report Settings Template data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserReportSettingsTemplateResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User or report settings template with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Reports
      summary: 'Delete User Report Settings Template'
      description: '**Required scopes:** `user` (Read and Write).'
      operationId: api.users.reports.settings-templates.delete
      parameters:
        -
          $ref: '#/components/parameters/AuthenticatedUser'
        -
          $ref: '#/components/parameters/UserReportSettingsTemplateId'
      responses:
        '204':
          description: 'Report Settings Template was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User or report settings template with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - Reports
      summary: 'Edit User Report Settings Template'
      description: '**Required scopes:** `user` (Read and Write).'
      operationId: api.users.reports.settings-templates.patch
      parameters:
        -
          $ref: '#/components/parameters/AuthenticatedUser'
        -
          $ref: '#/components/parameters/UserReportSettingsTemplateId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserReportSettingsTemplatePatch'
      responses:
        '200':
          description: 'Report Settings Template was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserReportSettingsTemplateResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User or settings template with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/files/{fileId}/revisions':
    get:
      tags:
        - 'Source Files'
      summary: 'List File Revisions'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.files.revisions.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'File revisions list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevisionCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/files/{fileId}/revisions/{revisionId}':
    get:
      tags:
        - 'Source Files'
      summary: 'Get File Revision'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.files.revisions.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
        -
          $ref: '#/components/parameters/RevisionId'
      responses:
        '200':
          description: 'Revision data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevisionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, file, or revision with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/screenshots':
    get:
      tags:
        - Screenshots
      summary: 'List Screenshots'
      description: '**Required scopes:** `project.screenshot` (Read only).'
      operationId: api.projects.screenshots.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: search
          in: query
          description: 'Search screenshots by name, tagged strings or file names that include screenshots.'
          schema:
            type: string
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - name
              - tagsCount
              - createdAt
              - updatedAt
          example: 'createdAt desc,name,tagsCount'
        -
          name: stringId
          in: query
          description: "String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany).\n\n__Note:__ Can't be used with `stringIds` in the same request."
          required: false
          deprecated: true
          schema:
            type: integer
        -
          name: stringIds
          in: query
          description: "String Identifiers. Get via [List Strings](#operation/api.projects.strings.getMany).\n\n__Note:__ Can't be used with `stringId` in the same request."
          required: false
          schema:
            type: string
            example: '1,2,3,4,5'
        -
          name: labelIds
          in: query
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          required: false
          schema:
            type: string
            example: '1,2,3,4,5'
        -
          name: excludeLabelIds
          in: query
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          required: false
          schema:
            type: string
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Screenshots list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenshotCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Screenshots
      summary: 'Add Screenshot'
      description: '**Required scopes:** `project.screenshot` (Read and Write).'
      operationId: api.projects.screenshots.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenshotCreateForm'
      responses:
        '201':
          description: 'Screenshot was successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenshotResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or storage with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: 'Conflict. Auto tag is currently in progress. Please wait for it to finish.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/screenshots/{screenshotId}':
    get:
      tags:
        - Screenshots
      summary: 'Get Screenshot'
      description: '**Required scopes:** `project.screenshot` (Read only).'
      operationId: api.projects.screenshots.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
      responses:
        '200':
          description: 'Screenshot data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenshotResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or screenshot with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    put:
      tags:
        - Screenshots
      summary: 'Update Screenshot'
      description: '**Required scopes:** `project.screenshot` (Read and Write).'
      operationId: api.projects.screenshots.put
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenshotReplaceForm'
      responses:
        '200':
          description: 'Screenshot was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenshotResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, screenshot, or storage with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Screenshots
      summary: 'Delete Screenshot'
      description: '**Required scopes:** `project.screenshot` (Read and Write).'
      operationId: api.projects.screenshots.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
      responses:
        '204':
          description: 'Screenshot was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or screenshot with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Screenshots
      summary: 'Edit Screenshot'
      description: '**Required scopes:** `project.screenshot` (Read and Write).'
      operationId: api.projects.screenshots.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScreenshotPatch'
      responses:
        '200':
          description: 'Screenshot was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ScreenshotResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or screenshot with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/screenshots/{screenshotId}/tags':
    get:
      tags:
        - Screenshots
      summary: 'List Tags'
      description: '**Required scopes:** `project.screenshot` (Read only).'
      operationId: api.projects.screenshots.tags.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Screenshot tags list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or screenshot with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    put:
      tags:
        - Screenshots
      summary: 'Replace Tags (Auto Tag)'
      description: '**Required scopes:** `project.screenshot` (Read and Write).'
      operationId: api.projects.screenshots.tags.putMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/TagCollectionReplaceForm'
                -
                  $ref: '#/components/schemas/TagReplaceForm'
      responses:
        '200':
          description: 'Screenshot tags were successfully replaced'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, screenshot, or string with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: 'Conflict. Auto tag is currently in progress. Please wait for it to finish.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Screenshots
      summary: 'Add Tag'
      description: '**Required scopes:** `project.screenshot` (Read and Write).'
      operationId: api.projects.screenshots.tags.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagCollectionCreateForm'
      responses:
        '201':
          description: 'Screenshot tag was successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagCollectionResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, screenshot, or string with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Screenshots
      summary: 'Clear Tags'
      description: '**Required scopes:** `project.screenshot` (Read and Write).'
      operationId: api.projects.screenshots.tags.deleteMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
      responses:
        '204':
          description: 'Screenshot tags were successfully cleared'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or screenshot with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/screenshots/{screenshotId}/tags/{tagId}':
    get:
      tags:
        - Screenshots
      summary: 'Get Tag'
      description: '**Required scopes:** `project.screenshot` (Read only).'
      operationId: api.projects.screenshots.tags.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
        -
          $ref: '#/components/parameters/TagId'
      responses:
        '200':
          description: 'Screenshot tag data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, screenshot, or tag with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Screenshots
      summary: 'Delete Tag'
      description: '**Required scopes:** `project.screenshot` (Read and Write).'
      operationId: api.projects.screenshots.tags.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
        -
          $ref: '#/components/parameters/TagId'
      responses:
        '204':
          description: 'Screenshot tag was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, screenshot, or tag with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Screenshots
      summary: 'Edit Tag'
      description: '**Required scopes:** `project.screenshot` (Read and Write).'
      operationId: api.projects.screenshots.tags.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ScreenshotId'
        -
          $ref: '#/components/parameters/TagId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagPatch'
      responses:
        '200':
          description: 'Screenshot tag was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, screenshot, or tag with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/users/{userId}/security-logs':
    get:
      tags:
        - 'Security Logs'
      summary: 'List User Security Logs'
      description: '**Required scopes:** `security-log` (Read only).'
      operationId: api.users.security-logs.getMany
      parameters:
        -
          $ref: '#/components/parameters/SecurityLogsUserId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/SecurityLogEvent'
        -
          $ref: '#/components/parameters/SecurityLogCreatedAfter'
        -
          $ref: '#/components/parameters/SecurityLogCreatedBefore'
        -
          name: ipAddress
          in: query
          schema:
            type: string
          example: 127.0.0.1
      responses:
        '200':
          description: 'User Security Logs list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SecurityLogCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/users/{userId}/security-logs/{securityLogId}':
    get:
      tags:
        - 'Security Logs'
      summary: 'Get User Security Log'
      description: '**Required scopes:** `security-log` (Read only).'
      operationId: api.users.security-logs.get
      parameters:
        -
          $ref: '#/components/parameters/SecurityLogsUserId'
        -
          name: securityLogId
          in: path
          description: 'User Security Log Id. Get via [List User Security Logs](#operation/api.users.security-logs.getMany)'
          required: true
          schema:
            type: integer
          example: 1
      responses:
        '200':
          description: 'User Security Log Data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SecurityLogResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  /storages:
    get:
      tags:
        - Storage
      summary: 'List Storages'
      operationId: api.storages.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Storages list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Storage
      summary: 'Add Storage'
      operationId: api.storages.post
      parameters:
        -
          name: Content-Type
          in: header
          description: 'the header __must__ correspond to the template specified in the [Media Types](https://www.iana.org/assignments/media-types/media-types.xhtml) table'
          required: true
          schema:
            type: string
        -
          $ref: '#/components/parameters/StorageFileName'
      requestBody:
        content:
          application/octet-stream:
            schema:
              $ref: '#/components/schemas/StorageUpload'
      responses:
        '201':
          description: 'File was successfully uploaded to storage'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/storages/{storageId}':
    get:
      tags:
        - Storage
      summary: 'Get Storage'
      operationId: api.storages.get
      parameters:
        -
          name: storageId
          in: path
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          required: true
          schema:
            type: integer
            format: int64
            example: 1
      responses:
        '200':
          description: 'Storage data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorageResource'
        '404':
          description: 'Storage with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Storage
      summary: 'Delete Storage'
      operationId: api.storages.delete
      parameters:
        -
          name: storageId
          in: path
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          required: true
          schema:
            type: integer
            format: int64
            example: 1
      responses:
        '204':
          description: 'Storage was successfully deleted'
        '404':
          description: 'Storage with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/strings':
    get:
      tags:
        - 'Source Strings'
      summary: 'List Strings'
      description: "**Required scopes:** `project.source.string` (Read only).\n\n__Note:__ For instant translation delivery directly to user devices, please use [OTA](https://support.crowdin.com/content-delivery/). Direct API usage will exceed established rate limits, which suspends further content updates."
      operationId: api.projects.strings.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - text
              - identifier
              - context
              - createdAt
              - updatedAt
              - type
          example: 'createdAt desc,text,type'
        -
          name: denormalizePlaceholders
          in: query
          description: 'Enable denormalize placeholders'
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
        -
          name: labelIds
          in: query
          description: 'Filter strings by `labelIds`. Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          schema:
            type: string
          example: '1,2,3,4,5'
        -
          name: fileId
          in: query
          description: "File Identifier. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Can't be used with `taskId`, `directoryId` or `branchId` in same request"
          schema:
            type: integer
          x-doc-sections:
            - file-based
        -
          name: branchId
          in: query
          description: "Branch Identifier. Get via [List Branches](#operation/api.projects.branches.getMany)\n\n__Note:__ Can't be used with `taskId`, `fileId` or `directoryId` in the same request"
          schema:
            type: integer
          x-doc-sections:
            - file-based
        -
          name: directoryId
          in: query
          description: "Directory Identifier. Get via [List Directories](#operation/api.projects.directories.getMany)\n\n__Note:__ Can't be used with `taskId`, `fileId` or `branchId` in same request"
          schema:
            type: integer
          x-doc-sections:
            - file-based
        -
          name: taskId
          in: query
          description: "Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)\n\n__Note:__ Can't be used with `fileId`, `directoryId` or `branchId` in same request"
          schema:
            type: integer
          x-doc-sections:
            - file-based
        -
          name: croql
          in: query
          description: "Filter strings by [CroQL](https://developer.crowdin.com/croql/)\n\n__Note:__ Can be used only with `denormalizePlaceholders`, `orderBy`, `offset` and `limit` in same request"
          schema:
            type: string
        -
          name: filter
          in: query
          description: 'Filter strings by `identifier`, `text` or `context`'
          schema:
            type: string
        -
          name: scope
          in: query
          description: 'Specify field to be the target of filtering. It can be one scope or a list of comma-separated scopes'
          schema:
            type: string
            enum:
              - identifier
              - text
              - context
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Project strings list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedStringCollectionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - 'Source Strings'
      summary: 'Add String'
      description: '**Required scopes:** `project.source.string` (Read and Write).'
      operationId: api.projects.strings.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StringCreateSchema'
      responses:
        '201':
          description: 'String was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedStringResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - 'Source Strings'
      summary: 'String Batch Operations'
      description: '**Required scopes:** `project.source.string` (Read and Write).'
      operationId: api.projects.strings.batchPatch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: updateOption
          in: query
          description: "Defines whether to keep existing translations and approvals for updated strings.\n\n__NOTE:__ Applied only when `text` or `identifier` is changed."
          required: false
          schema:
            type: string
            default: keep_translations_and_approvals
            enum:
              - keep_translations_and_approvals
              - keep_translations
              - clear_translations_and_approvals
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StringMassPatch'
      responses:
        '200':
          description: 'Strings were successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedStringUpdatedCollectionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPatchCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/strings/{stringId}':
    get:
      tags:
        - 'Source Strings'
      summary: 'Get String'
      description: '**Required scopes:** `project.source.string` (Read only).'
      operationId: api.projects.strings.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/StringId'
        -
          name: denormalizePlaceholders
          in: query
          description: 'Enable denormalize placeholders'
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
      responses:
        '200':
          description: 'String data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedStringResource'
          x-doc-sections:
            - file-based
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or string with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - 'Source Strings'
      summary: 'Delete String'
      description: '**Required scopes:** `project.source.string` (Read and Write).'
      operationId: api.projects.strings.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/StringId'
      responses:
        '204':
          description: 'String was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or string with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - 'Source Strings'
      summary: 'Edit String'
      description: '**Required scopes:** `project.source.string` (Read and Write).'
      operationId: api.projects.strings.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/StringId'
        -
          name: updateOption
          in: query
          description: "Defines whether to keep existing translations and approvals for updated string.\n\n__NOTE:__ Applied only when `text` or `identifier` is changed."
          required: false
          schema:
            type: string
            default: keep_translations_and_approvals
            enum:
              - keep_translations_and_approvals
              - keep_translations
              - clear_translations_and_approvals
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StringPatch'
      responses:
        '200':
          description: 'String was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedStringResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or string with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  /strings:
    get:
      tags:
        - 'Source Strings'
      summary: 'Search Strings'
      description: "**Required scopes:** `project.source.string` (Read only).\n\nSearches source strings by text/context/key. Provide up to 50 `projectIds`, or omit them to search all your own projects — or another owner's accessible projects via `userId`."
      operationId: api.strings.getMany
      parameters:
        -
          name: filter
          in: query
          description: 'Search strings by the fields selected in `scope`'
          required: true
          schema:
            type: string
            maxLength: 128
        -
          name: projectIds
          in: query
          description: 'Project identifiers to search across. Get via [List Projects](#operation/api.projects.getMany). It can be one project or a list of comma-separated ones (max 50). All projects must belong to the same owner. Optional — omit to search all your accessible projects.'
          required: false
          schema:
            type: string
          example: '1,2,3'
        -
          name: userId
          in: query
          description: 'Owner (user) whose projects to search when `projectIds` is omitted. Only projects you own or manage are searched. Defaults to your own account.'
          required: false
          schema:
            type: integer
        -
          name: scope
          in: query
          description: 'Specify field to be the target of filtering. One of: `all`, `text`, `context`, `key`. Default is `all`'
          schema:
            type: string
            default: all
            enum:
              - all
              - text
              - context
              - key
        -
          name: denormalizePlaceholders
          in: query
          description: 'Enable denormalize placeholders'
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Matched source strings'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinStringSearchCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
              example:
                errors:
                  - { error: { key: filter, errors: [{ code: isEmpty, message: "Value is required and can't be empty" }] } }
        '404':
          description: 'One of the requested projects was not found, or you have no projects to search'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
              example:
                error:
                  message: "You don't have any projects to search."
                  code: 404
        '422':
          description: 'The search was too broad to complete within the time limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
              example:
                error:
                  message: 'The search was too broad to complete within the time limit'
                  code: 422
  '/projects/{projectId}/comments/{commentId}/attachments/{attachmentId}':
    delete:
      tags:
        - 'String/Asset Comments'
      summary: 'Delete Attachment from String/Asset Comment'
      description: '**Required scopes:** `project.source.string` (Read and Write).'
      operationId: api.projects.comments.attachments.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/CommentId'
        -
          name: attachmentId
          in: path
          description: 'Attachment Identifier'
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: 'Attachment was successfully removed from the comment'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringCommentResource'
        '404':
          description: 'Project, comment or attachment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/comments':
    get:
      tags:
        - 'String/Asset Comments'
      summary: 'List String/Asset Comments'
      description: "**Required scopes:** `project.source.string` (Read only).\n\nList comments and issues for strings or assets. Use the oneOf pattern:\n- **String type**: Use `stringId`\n- **Asset type**: Use `fileId`\n- **All comments**: Omit both parameters to list all project comments"
      operationId: api.projects.comments.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            enum:
              - id
              - text
              - type
              - createdAt
              - resolvedAt
              - issueStatus
              - issueType
          example: 'createdAt desc,name'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          name: stringId
          in: query
          description: "String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)\n\n__Note:__ Can't be used together with `fileId`"
          required: false
          schema:
            type: integer
        -
          name: fileId
          in: query
          description: "File Identifier. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Can't be used together with `stringId`"
          required: false
          schema:
            type: integer
        -
          $ref: '#/components/parameters/StringCommentType'
        -
          $ref: '#/components/parameters/IssueTypeInStringComment'
        -
          $ref: '#/components/parameters/IssueStatusInStringComment'
      responses:
        '200':
          description: 'Reported issues list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringCommentCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, string, or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      x-doc-sections:
        - file-based
    post:
      tags:
        - 'String/Asset Comments'
      summary: 'Add String/Asset Comment'
      description: "**Required scopes:** `project.source.string` (Read and Write).\n\nAdd a comment or issue to a string or asset. Use the oneOf pattern:\n- **String type**: Use `stringId`\n- **Asset type**: Use `fileId`"
      operationId: api.projects.comments.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/StringCommentCreateForm'
                -
                  $ref: '#/components/schemas/AssetCommentCreateForm'
      responses:
        '201':
          description: 'String/Asset Comment was successfully created'
          content:
            application/json:
              schema:
                oneOf:
                  - { $ref: '#/components/schemas/StringCommentResource' }
                  - { $ref: '#/components/schemas/AssetCommentResource' }
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    patch:
      tags:
        - 'String/Asset Comments'
      summary: 'String/Asset Comment Batch Operations'
      description: '**Required scopes:** `project.source.string` (Read and Write).'
      operationId: api.projects.comments.batchPatch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StringCommentMassPatch'
      responses:
        '200':
          description: 'String/Asset Comments were successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StringCommentUpdatedCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPatchCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or string/asset comment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/comments/{commentId}':
    get:
      tags:
        - 'String/Asset Comments'
      summary: 'Get String/Asset Comment'
      description: '**Required scopes:** `project.source.string` (Read only).'
      operationId: api.projects.comments.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/CommentId'
      responses:
        '200':
          description: 'String/Asset Comment data'
          content:
            application/json:
              schema:
                oneOf:
                  - { $ref: '#/components/schemas/StringCommentResource' }
                  - { $ref: '#/components/schemas/AssetCommentResource' }
        '404':
          description: 'Project or string/asset comment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'String/Asset Comments'
      summary: 'Delete String/Asset Comment'
      description: '**Required scopes:** `project.source.string` (Read and Write).'
      operationId: api.projects.comments.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/CommentId'
      responses:
        '204':
          description: 'String/Asset Comment was successfully deleted'
        '404':
          description: 'Project or string/asset comment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    patch:
      tags:
        - 'String/Asset Comments'
      summary: 'Edit String/Asset Comment'
      description: '**Required scopes:** `project.source.string` (Read and Write).'
      operationId: api.projects.comments.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/CommentId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StringCommentPatch'
      responses:
        '200':
          description: 'String/Asset Comment was successfully updated'
          content:
            application/json:
              schema:
                oneOf:
                  - { $ref: '#/components/schemas/StringCommentResource' }
                  - { $ref: '#/components/schemas/AssetCommentResource' }
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or string/asset comment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/approvals':
    get:
      tags:
        - 'String/Asset Translations'
      summary: 'List Translation Approvals'
      description: "**Required scopes:** `project.translation` (Read only).\n\n__Note:__ Either `translationId` OR `languageId` is required. `stringId`, `fileId`, `labelIds` and `excludeLabelIds` can be used only with `languageId` in the same request"
      operationId: api.projects.approvals.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - createdAt
          example: 'createdAt desc,id'
        -
          name: fileId
          in: query
          description: "File Identifier. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Must be used together with `languageId`"
          required: false
          schema:
            type: integer
        -
          name: labelIds
          in: query
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          required: false
          schema:
            type: string
            example: '1,2,3,4,5'
        -
          name: excludeLabelIds
          in: query
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          required: false
          schema:
            type: string
        -
          name: stringId
          in: query
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany) <br> **Note:** Must be used together with `languageId`. Not supported for `assets`'
          required: false
          schema:
            type: integer
        -
          name: languageId
          in: query
          description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          required: false
          schema:
            type: string
        -
          name: translationId
          in: query
          description: "Translation Identifier. Get via [List String Translations](#operation/api.projects.translations.getMany) <br> **Note:** Can't be used with `languageId` in the same request"
          required: false
          schema:
            type: integer
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Translation approvals list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationApprovalCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, string, language, or translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    post:
      tags:
        - 'String/Asset Translations'
      summary: 'Add Approval'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.approvals.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TranslationApprovalCreateForm'
      responses:
        '201':
          description: 'Approval was successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationApprovalResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'String/Asset Translations'
      summary: 'Remove String/Asset Approvals'
      description: "**Required scopes:** `project.translation` (Read and Write).\n\nRemove all approvals for a string or asset. Use the oneOf pattern:\n- **String type**: Use `stringId`\n- **Asset type**: Use `fileId`"
      operationId: api.projects.approvals.deleteMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: stringId
          in: query
          description: "String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)\n\n__Note:__ Can't be used together with `fileId`"
          required: false
          schema:
            type: integer
        -
          name: fileId
          in: query
          description: "File Identifier. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Can't be used together with `stringId`"
          required: false
          schema:
            type: integer
      responses:
        '204':
          description: 'Approvals was successfully removed'
        '404':
          description: 'Project, string, or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    patch:
      tags:
        - 'String/Asset Translations'
      summary: 'Approval Batch Operations'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.approvals.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                oneOf:
                  - { required: [op, path, value], properties: { op: { type: string, enum: [add] }, path: { type: string, enum: [/-] }, value: { type: object } }, type: object }
                  - { required: [op, path], properties: { op: { type: string, enum: [remove] }, path: { type: string } }, type: object }
      responses:
        '200':
          description: 'Approvals were successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationApprovalUpdatedCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPatchCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or string/asset with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/approvals/{approvalId}':
    get:
      tags:
        - 'String/Asset Translations'
      summary: 'Get Approval'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.approvals.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ApprovalId'
      responses:
        '200':
          description: 'Approval data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationApprovalResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or approval with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'String/Asset Translations'
      summary: 'Remove Approval'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.approvals.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ApprovalId'
      responses:
        '204':
          description: 'Approval was successfully removed'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or approval with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/languages/{languageId}/translations':
    get:
      tags:
        - 'String/Asset Translations'
      summary: 'List Language Translations'
      description: "**Required scopes:** `project.translation` (Read only).\n\n__Note:__ For instant translation delivery directly to user devices, please use [OTA](https://support.crowdin.com/content-delivery/). Direct API usage will exceed established rate limits, which suspends further content updates."
      operationId: api.projects.languages.translations.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ProjectTargetLanguageId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: stringId
            enum:
              - text
              - stringId
              - translationId
              - createdAt
          example: 'createdAt desc,text'
        -
          name: stringIds
          in: query
          description: 'Filter translations by `stringIds`. Get via [List Strings](#operation/api.projects.strings.getMany)'
          schema:
            type: string
            example: '1,2,3,4,5'
        -
          name: labelIds
          in: query
          description: 'Filter translations by `labelIds`. Get via [List Labels](#operation/api.projects.labels.getMany)'
          schema:
            type: string
            example: '1,2,3,4,5'
        -
          name: fileId
          in: query
          description: "Filter translations by `fileId`. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Can't be used with `branchId` or `directoryId` in the same request"
          schema:
            type: integer
        -
          name: branchId
          in: query
          description: "Branch Identifier. Get via [List Branches](#operation/api.projects.branches.getMany)\n\n__Note:__ Can't be used with `fileId` or `directoryId` in the same request"
          schema:
            type: integer
        -
          name: directoryId
          in: query
          description: "Directory Identifier. Get via [List Directories](#operation/api.projects.directories.getMany)\n\n__Note:__ Can't be used with `fileId` or `branchId` in same request"
          schema:
            type: integer
        -
          name: approvedOnly
          in: query
          description: 'Only approved translations'
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
        -
          name: croql
          in: query
          description: "Filter translations by [CroQL](https://developer.crowdin.com/croql/)\n\n__Note:__ Can't be used with `stringIds`, `labelIds`, `fileId` or `approvedOnly` in same request"
          schema:
            type: string
        -
          name: denormalizePlaceholders
          in: query
          description: 'Enable denormalize placeholders'
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Language translations list'
          content:
            application/json:
              schema:
                oneOf:
                  - { $ref: '#/components/schemas/PlainLanguageTranslationCollectionResource' }
                  - { $ref: '#/components/schemas/PluralLanguageTranslationCollectionResource' }
                  - { $ref: '#/components/schemas/IcuLanguageTranslationCollectionResource' }
                  - { $ref: '#/components/schemas/AssetLanguageTranslationCollectionResource' }
        '404':
          description: 'Project or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/translations':
    get:
      tags:
        - 'String/Asset Translations'
      summary: 'List String/Asset Translations'
      description: "**Required scopes:** `project.translation` (Read only).\n\n__Note:__ For instant translation delivery directly to user devices, please use [OTA](https://support.crowdin.com/content-delivery/). Direct API usage will exceed established rate limits, which suspends further content updates."
      operationId: api.projects.translations.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: languageId
          in: query
          description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          required: true
          schema:
            type: string
        -
          name: stringId
          in: query
          description: "String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)\n\n__Note:__ Not supported for `assets`"
          required: false
          schema:
            type: integer
        -
          name: fileId
          in: query
          description: 'File Identifier. Get via [List Files](#operation/api.projects.files.getMany)'
          required: false
          schema:
            type: integer
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - text
              - rating
              - createdAt
          example: 'createdAt desc,name,priority'
        -
          name: denormalizePlaceholders
          in: query
          description: 'Enable denormalize placeholders'
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'String/Asset translations list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, string, file, or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    post:
      tags:
        - 'String/Asset Translations'
      summary: 'Add Translation'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.translations.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/TranslationCreateForm'
                -
                  $ref: '#/components/schemas/AssetTranslationCreateForm'
      responses:
        '201':
          description: 'Translation was successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, string, or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'String/Asset Translations'
      summary: 'Delete String/Asset Translations'
      description: "**Required scopes:** `project.translation` (Read and Write).\n\nDelete translations for a string or an asset. Use the oneOf pattern:\n - **String type**: Use `stringId`\n - **Asset type**: Use `fileId`"
      operationId: api.projects.translations.deleteMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: stringId
          in: query
          description: "String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)\n\n__Note:__ Can't be used together with `fileId`"
          required: false
          schema:
            type: integer
        -
          name: fileId
          in: query
          description: "File Identifier. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Can't be used together with `stringId`"
          required: false
          schema:
            type: integer
        -
          name: languageId
          in: query
          description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          schema:
            type: string
      responses:
        '204':
          description: 'String/Asset translations were successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, string, file, or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    patch:
      tags:
        - 'String/Asset Translations'
      summary: 'Translation Batch Operations'
      description: "**Required scopes:** `project.translation` (Read and Write).\n\nPerform batch operations on string and asset translations. Use the oneOf pattern:\n- **String type**: Use `stringId` with `text` and optional `pluralCategoryName`\n- **Asset type**: Use `fileId` with `storageId`"
      operationId: api.projects.translations.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TranslationMassPatch'
      responses:
        '200':
          description: 'Translations were successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationUpdatedCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPatchCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or string with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/translations/{translationId}':
    get:
      tags:
        - 'String/Asset Translations'
      summary: 'Get Translation'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.translations.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TranslationId'
        -
          name: denormalizePlaceholders
          in: query
          description: 'Enable denormalize placeholders'
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
      responses:
        '200':
          description: 'Translation data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    put:
      tags:
        - 'String/Asset Translations'
      summary: 'Restore Translation'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.translations.put
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TranslationId'
      responses:
        '200':
          description: 'Translation was successfully restored'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'String/Asset Translations'
      summary: 'Delete Translation'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.translations.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TranslationId'
      responses:
        '204':
          description: 'Translation was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/translations/alignment':
    post:
      tags:
        - 'String/Asset Translations'
      summary: 'Translation Alignment'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.translations.alignment.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TranslationAlignmentForm'
      responses:
        '200':
          description: 'Translation Alignment'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationAlignmentResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/translations/validate-qa-checks':
    post:
      tags:
        - Translations
      summary: 'Validate text by QA Checks'
      operationId: api.projects.translations.validate-qa-checks.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TranslationQaCheckValidateCollectionForm'
      responses:
        '200':
          description: 'Text was successfully validated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationQaCheckValidateCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, string, or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  /translations:
    get:
      tags:
        - 'String/Asset Translations'
      summary: 'Search Translations'
      description: "**Required scopes:** `project.translation` (Read only).\n\nSearches target-language translations by text. Provide up to 50 `projectIds`, or omit them to search all your own projects — or another owner's accessible projects via `userId`."
      operationId: api.translations.getMany
      parameters:
        -
          name: filter
          in: query
          description: 'Search translations by `text`'
          required: true
          schema:
            type: string
            maxLength: 128
        -
          name: projectIds
          in: query
          description: 'Project identifiers to search across. Get via [List Projects](#operation/api.projects.getMany). It can be one project or a list of comma-separated ones (max 50). All projects must belong to the same owner. Optional — omit to search all your accessible projects.'
          required: false
          schema:
            type: string
          example: '1,2,3'
        -
          name: userId
          in: query
          description: 'Owner (user) whose projects to search when `projectIds` is omitted. Only projects you own or manage are searched. Defaults to your own account.'
          required: false
          schema:
            type: integer
        -
          name: languageIds
          in: query
          description: 'Filter by target language identifier. Get via [Project Target Languages](#operation/api.projects.get). It can be one language or a list of comma-separated ones'
          schema:
            type: string
          example: 'uk,de'
        -
          name: denormalizePlaceholders
          in: query
          description: 'Enable denormalize placeholders'
          schema:
            type: integer
            default: 0
            enum:
              - 0
              - 1
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Matched translations'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTranslationSearchCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
              example:
                errors:
                  - { error: { key: filter, errors: [{ code: isEmpty, message: "Value is required and can't be empty" }] } }
        '404':
          description: 'One of the requested projects was not found, or you have no projects to search'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
              example:
                error:
                  message: "You don't have any projects to search."
                  code: 404
        '422':
          description: 'The search was too broad to complete within the time limit'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
              example:
                error:
                  message: 'The search was too broad to complete within the time limit'
                  code: 422
      x-doc-sections:
        - file-based
  '/projects/{projectId}/votes':
    get:
      tags:
        - 'String/Asset Translations'
      summary: 'List Translation Votes'
      description: "**Required scopes:** `project.translation` (Read only).\n\n__Note:__ Either `translationId` OR `languageId` is required. `stringId`, `fileId`, `labelIds` and `excludeLabelIds` can be used only with `languageId` in the same request"
      operationId: api.projects.votes.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: stringId
          in: query
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany) <br> **Note:** Must be used together with `languageId`. Not supported for `assets`'
          required: false
          schema:
            type: integer
        -
          name: languageId
          in: query
          description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          required: false
          schema:
            type: string
        -
          name: translationId
          in: query
          description: "Translation Identifier. Get via [List String Translations](#operation/api.projects.translations.getMany) <br> **Note:** Can't be used with `languageId` in the same request"
          schema:
            type: integer
        -
          name: fileId
          in: query
          description: "File Identifier. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Must be used together with `languageId`"
          required: false
          schema:
            type: integer
        -
          name: labelIds
          in: query
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          required: false
          schema:
            type: string
            example: '1,2,3,4,5'
        -
          name: excludeLabelIds
          in: query
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          required: false
          schema:
            type: string
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Votes list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationVoteCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, string, language, or translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    post:
      tags:
        - 'String/Asset Translations'
      summary: 'Add Vote'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.votes.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TranslationVoteCreateForm'
      responses:
        '201':
          description: 'Vote was successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationVoteResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/votes/{voteId}':
    get:
      tags:
        - 'String/Asset Translations'
      summary: 'Get Vote'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.votes.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/VoteId'
      responses:
        '200':
          description: 'Vote data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationVoteResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or vote with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - 'String/Asset Translations'
      summary: 'Cancel Vote'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.votes.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/VoteId'
      responses:
        '204':
          description: 'Vote was successfully canceled'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or vote with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  /style-guides:
    get:
      tags:
        - 'Style Guides'
      summary: 'List Style Guides'
      description: '**Required scopes:** `style-guide` (Read only).'
      operationId: api.style-guides.getMany
      parameters:
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: name
            enum:
              - id
              - name
              - userId
              - createdAt
          example: 'createdAt desc,name'
        -
          name: userId
          in: query
          description: 'List user style guides'
          schema:
            type: integer
      responses:
        '200':
          description: 'List Style Guides'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinStyleGuideCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - 'Style Guides'
      summary: 'Create Style Guide'
      description: '**Required scopes:** `style-guide` (Read and Write).'
      operationId: api.style-guides.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinStyleGuideCreateForm'
      responses:
        '201':
          description: 'Style Guide was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinStyleGuideResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'User not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/style-guides/{styleGuideId}':
    get:
      tags:
        - 'Style Guides'
      summary: 'Get Style Guide'
      description: '**Required scopes:** `style-guide` (Read only).'
      operationId: api.style-guides.get
      parameters:
        -
          name: styleGuideId
          in: path
          description: 'Style Guide Identifier'
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: 'Style Guide data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinStyleGuideResource'
        '404':
          description: 'Style Guide with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - 'Style Guides'
      summary: 'Delete Style Guide'
      description: '**Required scopes:** `style-guide` (Read and Write).'
      operationId: api.style-guides.delete
      parameters:
        -
          name: styleGuideId
          in: path
          description: 'Style Guide Identifier'
          required: true
          schema:
            type: integer
            format: int32
      responses:
        '204':
          description: 'Style Guide was successfully deleted'
        '404':
          description: 'Style Guide with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - 'Style Guides'
      summary: 'Edit Style Guide'
      description: '**Required scopes:** `style-guide` (Read and Write).'
      operationId: api.style-guides.patch
      parameters:
        -
          name: styleGuideId
          in: path
          description: 'Style Guide Identifier'
          required: true
          schema:
            type: integer
            format: int32
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>. Supported paths: /name, /aiInstructions, /languageIds, /projectIds, /isShared, /storageId.'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StyleGuidePatch'
      responses:
        '200':
          description: 'Style Guide was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinStyleGuideResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Style Guide with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
  '/users/{userId}/tasks':
    get:
      tags:
        - Tasks
      summary: 'List Tasks'
      description: "**Required scopes:** `project.task` (Read only).\n\nLists all of the user's project tasks."
      operationId: api.users.tasks.getMany
      parameters:
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - type
              - title
              - status
              - description
              - createdAt
              - updatedAt
              - deadline
              - startedAt
              - resolvedAt
          example: 'createdAt desc,title'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/CrowdinTaskStatus'
        -
          name: type
          in: query
          description: "Filter by task type. It can be one type or a list of comma-separated type values\n\n- 0 - translate by own translators\n- 1 - proofread by own proofreaders\n- 2 - translate by vendor\n- 3 - proofread by vendor"
          schema:
            type: string
          example: '1,2'
        -
          name: projectIds
          in: query
          description: 'Filter by project IDs. It can be one ID or a list of comma-separated ID values'
          schema:
            type: string
          example: '1,2,3'
        -
          name: assigneeIds
          in: query
          description: 'Filter by assignee user IDs. It can be one ID or a list of comma-separated ID values'
          schema:
            type: string
          example: '10,20'
        -
          name: creatorIds
          in: query
          description: 'Filter by creator user IDs. It can be one ID or a list of comma-separated ID values'
          schema:
            type: string
          example: '5,15'
        -
          name: targetLanguageIds
          in: query
          description: 'Filter by target language IDs. It can be one ID or a list of comma-separated ID values'
          schema:
            type: string
          example: 'uk,fr,de'
        -
          name: sourceLanguageIds
          in: query
          description: 'Filter by source language IDs. It can be one ID or a list of comma-separated ID values'
          schema:
            type: string
          example: en
        -
          name: createdAtFrom
          in: query
          description: 'Filter tasks created from this date (ISO 8601)'
          schema:
            type: string
            format: date-time
          example: '2025-01-01T00:00:00Z'
        -
          name: createdAtTo
          in: query
          description: 'Filter tasks created until this date (ISO 8601)'
          schema:
            type: string
            format: date-time
          example: '2025-12-31T23:59:59Z'
        -
          name: deadlineFrom
          in: query
          description: 'Filter tasks with deadline from this date (ISO 8601)'
          schema:
            type: string
            format: date-time
          example: '2025-01-01T00:00:00Z'
        -
          name: deadlineTo
          in: query
          description: 'Filter tasks with deadline until this date (ISO 8601)'
          schema:
            type: string
            format: date-time
          example: '2025-12-31T23:59:59Z'
      responses:
        '200':
          description: 'Tasks list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTaskCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/tasks/{taskId}/exports':
    post:
      tags:
        - Tasks
      summary: 'Export Project Task Strings'
      description: '**Required scopes:** `project.task` (Read only).'
      operationId: api.projects.tasks.exports.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskId'
      responses:
        '200':
          description: 'Tasks strings download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '204':
          description: 'No Strings found'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/tasks/settings-templates':
    get:
      tags:
        - Tasks
      summary: 'List Project Task Settings Templates'
      description: '**Required scopes:** `project.task` (Read only).'
      operationId: api.projects.tasks.settings-templates.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Task Settings Templates list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskSettingsTemplateCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Tasks
      summary: 'Add Project Task Settings Template'
      description: '**Required scopes:** `project.task` (Read and Write).'
      operationId: api.projects.tasks.settings-templates.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskSettingsTemplateCreateForm'
      responses:
        '201':
          description: 'Task Settings Template was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskSettingsTemplateResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/tasks/settings-templates/{taskSettingsTemplateId}':
    get:
      tags:
        - Tasks
      summary: 'Get Project Task Settings Template'
      description: '**Required scopes:** `project.task` (Read only).'
      operationId: api.projects.tasks.settings-templates.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskSettingsTemplateId'
      responses:
        '200':
          description: 'Task Settings Template data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskSettingsTemplateResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task settings template with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Tasks
      summary: 'Delete Project Task Settings Template'
      description: '**Required scopes:** `project.task` (Read and Write).'
      operationId: api.projects.tasks.settings-templates.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskSettingsTemplateId'
      responses:
        '204':
          description: 'Task Settings Template was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task settings template with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - Tasks
      summary: 'Edit Project Task Settings Template'
      description: '**Required scopes:** `project.task` (Read and Write).'
      operationId: api.projects.tasks.settings-templates.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskSettingsTemplateId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskSettingsTemplatePatch'
      responses:
        '200':
          description: 'Task Settings Template was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskSettingsTemplateResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or settings template with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/tasks':
    get:
      tags:
        - Tasks
      summary: 'List Project Tasks'
      description: '**Required scopes:** `project.task` (Read only).'
      operationId: api.projects.tasks.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - type
              - title
              - status
              - description
              - createdAt
              - updatedAt
              - deadline
              - startedAt
              - resolvedAt
          example: 'createdAt desc,title'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/CrowdinTaskStatus'
        -
          $ref: '#/components/parameters/AssigneeId'
        -
          name: batchId
          in: query
          description: 'Filter by task batch. Get `batchId` via [List Tasks](#operation/api.projects.tasks.getMany)'
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: 'Tasks list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedTaskCollectionResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Tasks
      summary: 'Add Project Task'
      description: '**Required scopes:** `project.task` (Read and Write).'
      operationId: api.projects.tasks.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/CrowdinTaskCreateForm'
                -
                  $ref: '#/components/schemas/CrowdinPendingTaskCreateForm'
                -
                  $ref: '#/components/schemas/CrowdinVendorTaskCreateForm'
      responses:
        '201':
          description: 'Task was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedTaskResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, language, or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/tasks/{taskId}':
    get:
      tags:
        - Tasks
      summary: 'Get Project Task'
      description: '**Required scopes:** `project.task` (Read only).'
      operationId: api.projects.tasks.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskId'
      responses:
        '200':
          description: 'Task data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedTaskResource'
          x-doc-sections:
            - file-based
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Tasks
      summary: 'Delete Project Task'
      description: '**Required scopes:** `project.task` (Read and Write).'
      operationId: api.projects.tasks.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskId'
      responses:
        '204':
          description: 'Task was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Tasks
      summary: 'Edit Project Task'
      description: '**Required scopes:** `project.task` (Read and Write).'
      operationId: api.projects.tasks.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskPatch'
      responses:
        '200':
          description: 'Task was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinFileBasedTaskResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/tasks/{taskId}/comments':
    get:
      tags:
        - Tasks
      summary: 'List Project Task Comments'
      description: '**Required scopes:** `project.task` (Read only).'
      operationId: api.projects.tasks.comments.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Tasks List Comments'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCommentCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project or task with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    post:
      tags:
        - Tasks
      summary: 'Add Project Task Comment'
      description: '**Required scopes:** `project.task` (Read and Write).'
      operationId: api.projects.tasks.comments.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskCommentCreateForm'
      responses:
        '201':
          description: 'Task comment was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCommentResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/tasks/{taskId}/comments/{commentId}':
    get:
      tags:
        - Tasks
      summary: 'Get Project Task Comment'
      description: '**Required scopes:** `project.task` (Read only).'
      operationId: api.projects.tasks.comments.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskId'
        -
          $ref: '#/components/parameters/TaskCommentId'
      responses:
        '200':
          description: 'Task Comment data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCommentResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task or comment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Tasks
      summary: 'Delete Project Task Comment'
      description: '**Required scopes:** `project.task` (Read and Write).'
      operationId: api.projects.tasks.comments.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskId'
        -
          $ref: '#/components/parameters/TaskCommentId'
      responses:
        '204':
          description: 'Task Comment was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task or comment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
    patch:
      tags:
        - Tasks
      summary: 'Edit Project Task Comment'
      description: '**Required scopes:** `project.task` (Read and Write).'
      operationId: api.projects.tasks.comments.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/TaskId'
        -
          $ref: '#/components/parameters/TaskCommentId'
      requestBody:
        description: 'A JSON Patch document as defined by RFC 6902'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TaskCommentPatch'
      responses:
        '200':
          description: 'Task Comment was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaskCommentResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task or comment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
  /user/tasks:
    get:
      tags:
        - Tasks
      summary: 'List User Tasks'
      operationId: api.user.tasks.getMany
      parameters:
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: 'id DESC'
            enum:
              - id
              - title
              - description
              - createdAt
              - updatedAt
              - deadline
              - startedAt
              - resolvedAt
          example: 'createdAt desc,title'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          $ref: '#/components/parameters/CrowdinTaskStatus'
        -
          $ref: '#/components/parameters/IsArchived'
      responses:
        '200':
          description: 'Tasks list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinUserTaskCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/user/tasks/{taskId}':
    patch:
      tags:
        - Tasks
      summary: 'Edit Task Archived Status'
      operationId: api.user.tasks.patch
      parameters:
        -
          $ref: '#/components/parameters/QueryProjectId'
        -
          $ref: '#/components/parameters/TaskId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserTaskPatch'
      responses:
        '200':
          description: 'Task was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinUserFileBasedTaskResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or task with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/glossaries/{glossaryId}/terms':
    get:
      tags:
        - Glossaries
      summary: 'List Terms'
      description: "**Required scopes:** `glossary` (Read only).\n\nReturns a list of terms in the glossary, ordered by `id` unless `orderBy` says otherwise. Without a filter the terms of every language are returned."
      operationId: api.glossaries.terms.getMany
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - text
              - description
              - partOfSpeech
              - status
              - type
              - gender
              - note
              - lemma
              - createdAt
              - updatedAt
          example: 'createdAt desc,text'
        -
          $ref: '#/components/parameters/QueryUserId'
        -
          name: languageId
          in: query
          description: 'Term Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          schema:
            type: string
        -
          name: conceptId
          in: query
          description: "Filter terms by `conceptId`\n\n__Note:__ Use for terms that have translations. Get via [List Concepts](#operation/api.glossaries.concepts.getMany)"
          schema:
            type: integer
        -
          name: translationOfTermId
          in: query
          description: "Filter terms by `termId`\n\n__Note:__ Use for terms that have translations"
          deprecated: true
          schema:
            type: integer
        -
          name: croql
          in: query
          description: "Filter strings by [CroQL](https://developer.crowdin.com/croql/)\n\n__Note:__ Can be used only with `orderBy`, `offset` and `limit` in same request"
          schema:
            type: string
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Terms list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTermCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Glossaries
      summary: 'Add Term'
      description: "**Required scopes:** `glossary` (Read and Write).\n\n__Note:__ If `conceptId` is not specified, a new concept will be automatically created for the term."
      operationId: api.glossaries.terms.post
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TermCreateForm'
      responses:
        '201':
          description: 'Term was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTermResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    delete:
      tags:
        - Glossaries
      summary: 'Clear Glossary'
      description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the terms of the glossary. Without a filter every term is deleted; the query parameters narrow it to one language, one concept, or one term and its translations."
      operationId: api.glossaries.terms.deleteMany
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          name: languageId
          in: query
          description: 'Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          schema:
            type: string
        -
          name: conceptId
          in: query
          description: 'Defines whether to delete specific term along with its translations. Get `conceptId` via [List Terms](#operation/api.glossaries.terms.getMany) or via [List Concepts](#operation/api.glossaries.concepts.getMany)'
          schema:
            type: integer
        -
          name: translationOfTermId
          in: query
          description: 'Defines whether to delete specific term along with its translations.  Get `id` via [List Terms](#operation/api.glossaries.terms.getMany)'
          deprecated: true
          schema:
            type: integer
      responses:
        '204':
          description: 'Glossary was successfully cleared'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary, language, or term translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/glossaries/{glossaryId}/terms/{termId}':
    get:
      tags:
        - Glossaries
      summary: 'Get Term'
      description: "**Required scopes:** `glossary` (Read only).\n\nReturns a single term of the glossary."
      operationId: api.glossaries.terms.get
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          $ref: '#/components/parameters/TermId'
      responses:
        '200':
          description: 'Term data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTermResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary or term with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Glossaries
      summary: 'Delete Term'
      description: "**Required scopes:** `glossary` (Read and Write).\n\nDeletes the term. When it was the last term of its concept, the concept is deleted as well."
      operationId: api.glossaries.terms.delete
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          $ref: '#/components/parameters/TermId'
      responses:
        '204':
          description: 'Term was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary or term with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
    patch:
      tags:
        - Glossaries
      summary: 'Edit Term'
      description: "**Required scopes:** `glossary` (Read and Write).\n\nUpdates the term with a JSON Patch document. Only the paths listed in the request schema can be replaced."
      operationId: api.glossaries.terms.patch
      parameters:
        -
          $ref: '#/components/parameters/GlossaryId'
        -
          $ref: '#/components/parameters/TermId'
      requestBody:
        description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TermPatch'
      responses:
        '200':
          description: 'Term was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTermResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Glossary or term with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  /tms:
    get:
      tags:
        - 'Translation Memory'
      summary: 'List TMs'
      description: '**Required scopes:** `tm` (Read only).'
      operationId: api.tms.getMany
      parameters:
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - name
              - userId
              - createdAt
          example: 'createdAt desc,name'
        -
          name: filter
          in: query
          description: 'Filter TMs by `name`'
          schema:
            type: string
        -
          $ref: '#/components/parameters/QueryUserId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'TMs list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTmCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - 'Translation Memory'
      summary: 'Add TM'
      description: '**Required scopes:** `tm` (Read and Write).'
      operationId: api.tms.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinTmCreateForm'
      responses:
        '201':
          description: 'TM was successfully created '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTmResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/tms/{tmId}':
    get:
      tags:
        - 'Translation Memory'
      summary: 'Get TM'
      description: '**Required scopes:** `tm` (Read only).'
      operationId: api.tms.get
      parameters:
        -
          $ref: '#/components/parameters/TmId'
      responses:
        '200':
          description: 'TM data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTmResource'
        '404':
          description: 'Tm with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - 'Translation Memory'
      summary: 'Delete TM'
      description: '**Required scopes:** `tm` (Read and Write).'
      operationId: api.tms.delete
      parameters:
        -
          $ref: '#/components/parameters/TmId'
      responses:
        '204':
          description: 'TM was successfully deleted'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'TM with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - 'Translation Memory'
      summary: 'Edit TM'
      description: '**Required scopes:** `tm` (Read and Write).'
      operationId: api.tms.patch
      parameters:
        -
          $ref: '#/components/parameters/TmId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>. Supported paths: /name, /languageId, /isShared.'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TmPatch'
      responses:
        '200':
          description: 'TM was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTmResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'TM with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/tms/{tmId}/segments':
    get:
      tags:
        - 'Translation Memory'
      summary: 'List TM Segments'
      description: "**Required scopes:** `tm` (Read only).\n\nGet list of translation unit segments"
      operationId: api.tms.segments.getMany
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
          example: 'id desc'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
        -
          name: croql
          in: query
          description: 'Filter segments by [CroQL](https://developer.crowdin.com/croql/)'
          schema:
            type: string
      responses:
        '200':
          description: 'TM segments list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmSegmentCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Tm with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - 'Translation Memory'
      summary: 'Create TM Segment'
      description: "**Required scopes:** `tm` (Read and Write).\n\nCreate translation unit with given segments"
      operationId: api.tms.segments.post
      parameters:
        -
          $ref: '#/components/parameters/TmId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TmSegmentCreateForm'
      responses:
        '201':
          description: 'TM segment was successfully created'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmSegmentResource'
        '303':
          description: 'Such TM segment already exists'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Tm with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - 'Translation Memory'
      summary: 'Clear TM'
      description: '**Required scopes:** `tm` (Read and Write).'
      operationId: api.tms.segments.clear
      parameters:
        -
          $ref: '#/components/parameters/TmId'
      responses:
        '204':
          description: 'TM was successfully cleared'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'TM with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - 'Translation Memory'
      summary: 'TM Segment Batch Operations'
      description: "**Required scopes:** `tm` (Read and Write).\n\nPerform batch operations on translation memory segments. Supports `add` (create new segment or append a record to an existing segment), `remove` (delete segment or delete a single record from a segment), and `replace` (update record text)."
      operationId: api.tms.segments.patchBatch
      parameters:
        -
          $ref: '#/components/parameters/TmId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                anyOf:
                  - { $ref: '#/components/schemas/TmSegmentMassOperationAdd' }
                  - { $ref: '#/components/schemas/TmSegmentMassOperationAddRecord' }
                  - { $ref: '#/components/schemas/TmSegmentMassOperationRemove' }
                  - { $ref: '#/components/schemas/TmSegmentMassOperationRemoveRecord' }
                  - { $ref: '#/components/schemas/TmSegmentMassOperationReplace' }
      responses:
        '200':
          description: 'TM segments were successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmSegmentUpdatedCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorPatchCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'TM with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/tms/{tmId}/exports':
    post:
      tags:
        - 'Translation Memory'
      summary: 'Export TM'
      description: '**Required scopes:** `tm` (Read only).'
      operationId: api.tms.exports.post
      parameters:
        -
          $ref: '#/components/parameters/TmId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TmExportForm'
      responses:
        '202':
          description: 'TM export was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmExportResource'
        '404':
          description: 'TM or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/tms/{tmId}/exports/{exportId}':
    get:
      tags:
        - 'Translation Memory'
      summary: 'Check TM Export Status'
      description: '**Required scopes:** `tm` (Read only).'
      operationId: api.tms.exports.get
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          $ref: '#/components/parameters/ExportTMId'
      responses:
        '200':
          description: 'TM export data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmExportResource'
        '404':
          description: 'TM or export with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/tms/{tmId}/exports/{exportId}/download':
    get:
      tags:
        - 'Translation Memory'
      summary: 'Download TM'
      description: '**Required scopes:** `tm` (Read only).'
      operationId: api.tms.exports.download.download
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          $ref: '#/components/parameters/ExportTMId'
      responses:
        '200':
          description: 'TM download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '404':
          description: 'TM, Language or Job with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  /tms/concordance:
    post:
      tags:
        - 'Translation Memory'
      summary: 'Concordance search in TMs'
      description: '**Required scopes:** `tm` (Read only).'
      operationId: api.tms.concordance.post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinOrganizationTmConcordanceForm'
      responses:
        '200':
          description: 'Concordance Result Collection'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmConcordanceResultCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Organization was not found, or you have no translation memories to search'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
              example:
                error:
                  message: "You don't have any translation memories to search."
                  code: 404
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/tms/concordance':
    post:
      tags:
        - 'Translation Memory'
      summary: 'Concordance search in project TMs'
      description: '**Required scopes:** `tm` (Read and Write).'
      operationId: api.projects.tms.concordance.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TmConcordanceForm'
      responses:
        '200':
          description: 'Concordance Result Collection'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmConcordanceResultCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/tms/{tmId}/imports':
    post:
      tags:
        - 'Translation Memory'
      summary: 'Import TM'
      description: '**Required scopes:** `tm` (Read and Write).'
      operationId: api.tms.imports.post
      parameters:
        -
          $ref: '#/components/parameters/TmId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TmUploadForm'
      responses:
        '202':
          description: 'TM import was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmImportResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'TM or storage with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/tms/{tmId}/imports/{importId}':
    get:
      tags:
        - 'Translation Memory'
      summary: 'Check TM Import Status'
      description: '**Required scopes:** `tm` (Read and Write).'
      operationId: api.tms.imports.get
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          $ref: '#/components/parameters/ImportTMId'
      responses:
        '200':
          description: 'TM import data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmImportResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'TM or import with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
  '/tms/{tmId}/segments/{segmentId}':
    get:
      tags:
        - 'Translation Memory'
      summary: 'Get TM Segment'
      description: "**Required scopes:** `tm` (Read only).\n\nGet segments of translation unit"
      operationId: api.tms.segments.get
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          $ref: '#/components/parameters/SegmentId'
      responses:
        '200':
          description: 'TM segment data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmSegmentResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Tm or segment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - 'Translation Memory'
      summary: 'Delete TM Segment'
      description: "**Required scopes:** `tm` (Read and Write).\n\nDelete all segments of translation unit"
      operationId: api.tms.segments.delete
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          $ref: '#/components/parameters/SegmentId'
      responses:
        '204':
          description: 'TM segment was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'TM or segment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - 'Translation Memory'
      summary: 'Edit TM Segment'
      description: "**Required scopes:** `tm` (Read and Write).\n\nEdit segment of translation unit"
      operationId: api.tms.segments.patch
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          $ref: '#/components/parameters/SegmentId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TmSegmentPatch'
      responses:
        '200':
          description: 'TM segment record was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmSegmentResource'
        '204':
          description: 'TM segment was successfully deleted'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'TM or segment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/tms/{tmId}/segments/{segmentId}/records/{recordId}':
    delete:
      tags:
        - 'Translation Memory'
      summary: 'Delete TM Segment Record'
      description: "**Required scopes:** `tm` (Read and Write).\n\nUse [Edit TM Segment](#operation/api.tms.segments.patch) instead."
      operationId: api.tms.segments.records.delete
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          $ref: '#/components/parameters/SegmentId'
        -
          $ref: '#/components/parameters/RecordId'
      responses:
        '204':
          description: 'TM segment record was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'TM, segment or record with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      deprecated: true
    patch:
      tags:
        - 'Translation Memory'
      summary: 'Edit TM Segment Record'
      description: "**Required scopes:** `tm` (Read and Write).\n\nUse [Edit TM Segment](#operation/api.tms.segments.patch) instead."
      operationId: api.tms.segments.records.patch
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          $ref: '#/components/parameters/SegmentId'
        -
          $ref: '#/components/parameters/RecordId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TmSegmentRecordPatch'
      responses:
        '200':
          description: 'TM segment record was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmSegmentResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'TM, segment or record with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
      deprecated: true
  '/tms/{tmId}/segments/{segmentId}/records':
    post:
      tags:
        - 'Translation Memory'
      summary: 'Create TM Segment Records'
      description: "**Required scopes:** `tm` (Read and Write).\n\nUse [Edit TM Segment](#operation/api.tms.segments.patch) instead."
      operationId: api.tms.segments.records.post
      parameters:
        -
          $ref: '#/components/parameters/TmId'
        -
          $ref: '#/components/parameters/SegmentId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TmSegmentCreateForm'
      responses:
        '200':
          description: 'TM segment data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TmSegmentResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Tm or segment with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Such TM segment record already exists'
          content:
            application/json:
              schema:
                description: 'Unprocessable Entity'
                properties:
                  error: { properties: { message: { type: string, example: 'Unprocessable Entity' }, code: { type: integer, example: 422 } }, type: object }
                type: object
      deprecated: true
  '/projects/{projectId}/translations/builds/directories/{directoryId}':
    post:
      tags:
        - Translations
      summary: 'Build Project Directory Translation'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.translations.builds.directories.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/DirectoryId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinTranslationCreateDirectoryBuildForm'
      responses:
        '201':
          description: 'Directory build was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTranslationDirectoryBuildResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, directory, or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/translations/builds/files/{fileId}':
    post:
      tags:
        - Translations
      summary: 'Build Project File Translation'
      description: '**Required scopes:** `project.source.file` (Read only).'
      operationId: api.projects.translations.builds.files.post
      parameters:
        -
          name: If-None-Match
          in: header
          description: "Add **Etag** identifier to the **If-None-Match** request header to see whether any changes were applied to the file. In case the file was changed it would be built. If not you'll receive a 304 (Not Modified) status code."
          required: false
          schema:
            type: string
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/FileId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinFileBuildForm'
      responses:
        '200':
          description: 'File translation download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileDownloadLinkResource'
        '204':
          description: 'No content in exported file'
        '304':
          description: 'File not modified'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, file, or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/translations/builds':
    get:
      tags:
        - Translations
      summary: 'List Project Builds'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.translations.builds.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: branchId
          in: query
          description: 'Filter builds by `branchId`'
          schema:
            type: integer
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Project builds list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTranslationProjectBuildCollectionResource'
        '404':
          description: 'Project or branch with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    post:
      tags:
        - Translations
      summary: 'Build Project Translation'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.translations.builds.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
                -
                  $ref: '#/components/schemas/CrowdinTranslationCreateProjectBuildForm'
                -
                  $ref: '#/components/schemas/TranslationCreateProjectPseudoBuildForm'
      responses:
        '201':
          description: 'Project build was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTranslationProjectBuildResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '404':
          description: 'Project, branch, or language with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/translations/{languageId}':
    post:
      tags:
        - Translations
      summary: 'Upload Translations'
      description: "**Required scopes:** `project.translation` (Read and Write).\n\nUse [Import Translations](#tag/Translations/operation/api.projects.translations.imports) instead."
      operationId: api.projects.translations.postOnLanguage
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ProjectTargetLanguageId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TranslationUploadForm'
      responses:
        '200':
          description: 'Translations were successfully uploaded'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedTranslationFileImportResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, language, storage, or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
      deprecated: true
  '/projects/{projectId}/translations/builds/{buildId}/download':
    get:
      tags:
        - Translations
      summary: 'Download Project Translations'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.translations.builds.download.download
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BuildId'
      responses:
        '200':
          description: 'Project translation download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '202':
          description: 'Project build status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTranslationProjectBuildResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or build with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/translations/builds/{buildId}':
    get:
      tags:
        - Translations
      summary: 'Check Project Build Status'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.translations.builds.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BuildId'
      responses:
        '200':
          description: 'Project build status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinTranslationProjectBuildResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or build with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
    delete:
      tags:
        - Translations
      summary: 'Cancel Build'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.translations.builds.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/BuildId'
      responses:
        '204':
          description: 'Build was successfully canceled'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or build with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
      x-doc-sections:
        - file-based
  '/projects/{projectId}/translations/exports':
    post:
      tags:
        - Translations
      summary: 'Export Project Translation'
      description: "**Required scopes:** `project.translation` (Read only).\n\n__Note:__ For instant translation delivery directly to user devices, please use [OTA](https://support.crowdin.com/content-delivery/). Direct API usage will exceed established rate limits, which suspends further content updates."
      operationId: api.projects.translations.exports.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinTranslationExportForm'
      responses:
        '200':
          description: 'Project translation download URL'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DownloadLinkResource'
        '204':
          description: 'No content in exported file'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/translations/imports':
    post:
      tags:
        - Translations
      summary: 'Import Translations'
      description: '**Required scopes:** `project.translation` (Read and Write).'
      operationId: api.projects.translations.imports
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TranslationImportForm'
      responses:
        '202':
          description: 'Import Translations was successfully started'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedTranslationImportResource'
          x-doc-sections:
            - file-based
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '402':
          description: 'Payment required'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequiredExceptionResource'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, language, storage, or file with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '422':
          description: 'Unprocessable Entity'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
  '/projects/{projectId}/translations/imports/{importTranslationId}':
    get:
      tags:
        - Translations
      summary: 'Import Translations Status'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.translations.imports.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: importTranslationId
          in: path
          description: 'Import Translation Identifier'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Import translation status'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FileBasedTranslationImportResource'
          x-doc-sections:
            - file-based
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or import translation with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '503':
          description: 'Service Unavailable'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableExceptionResource'
  '/projects/{projectId}/translations/imports/{importTranslationId}/report':
    get:
      tags:
        - Translations
      summary: 'Import Translations Report'
      description: '**Required scopes:** `project.translation` (Read only).'
      operationId: api.projects.translations.imports.report.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: importTranslationId
          in: path
          description: 'Import Translation Identifier'
          required: true
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: 'Import translation report for file-based project'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranslationImportReportResource'
          x-doc-sections:
            - file-based
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or import with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
  /user:
    get:
      tags:
        - Users
      summary: 'Get Authenticated User'
      operationId: api.user.get
      responses:
        '200':
          description: 'User data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAuthenticateUserResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
    patch:
      tags:
        - Users
      summary: 'Edit Authenticated User'
      operationId: api.user.patch
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/userPatch'
      responses:
        '200':
          description: 'User was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinAuthenticateUserResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/members':
    get:
      tags:
        - Users
      summary: 'List Project Members'
      description: '**Required scopes:** `project.member` (Read only).'
      operationId: api.projects.members.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          name: orderBy
          in: query
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          schema:
            type: string
            default: id
            enum:
              - id
              - username
              - fullName
          example: 'username desc,id'
        -
          name: search
          in: query
          description: 'Search users by `firstName`, `lastName` or `username`'
          required: false
          schema:
            type: string
            minLength: 2
        -
          name: role
          in: query
          description: 'Defines role type'
          required: false
          schema:
            type: string
            enum:
              - all
              - manager
              - developer
              - language_coordinator
              - proofreader
              - translator
              - blocked
              - pending
        -
          name: languageId
          in: query
          description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          required: false
          schema:
            type: string
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Users list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
    post:
      tags:
        - Users
      summary: 'Add Project Member'
      description: '**Required scopes:** `project.member` (Read and Write).'
      operationId: api.projects.members.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinAddProjectMemberForm'
      responses:
        '201':
          description: 'Members were successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddProjectMemberCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or language was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/members/{memberId}':
    get:
      tags:
        - Users
      summary: 'Get Member Info'
      description: '**Required scopes:** `project.member` (Read only).'
      operationId: api.projects.members.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ProjectMemberId'
      responses:
        '200':
          description: 'Member data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinUserResource'
        '404':
          description: 'Project or Member with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
    put:
      tags:
        - Users
      summary: 'Replace Project Member Permissions'
      description: '**Required scopes:** `project.member` (Read and Write).'
      operationId: api.projects.members.put
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ProjectMemberId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReplaceProjectMemberForm'
      responses:
        '200':
          description: 'Members permissions were successfully replaced'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinUserResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or language was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
    delete:
      tags:
        - Users
      summary: 'Delete Member From Project'
      description: '**Required scopes:** `project.member` (Read and Write).'
      operationId: api.projects.members.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/ProjectMemberId'
      responses:
        '204':
          description: 'Member was successfully deleted from project'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project, language, or member specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictExceptionResource'
  '/projects/{projectId}/webhooks':
    get:
      tags:
        - Webhooks
      summary: 'List Webhooks'
      description: '**Required scopes:** `project.webhook` (Read only).'
      operationId: api.projects.webhooks.getMany
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/PaginationLimit'
        -
          $ref: '#/components/parameters/PaginationOffset'
      responses:
        '200':
          description: 'Webhooks list'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinWebhookCollectionResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    post:
      tags:
        - Webhooks
      summary: 'Add Webhook'
      description: '**Required scopes:** `project.webhook` (Read and Write).'
      operationId: api.projects.webhooks.post
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CrowdinWebhookCreateForm'
      responses:
        '201':
          description: 'Webhook was successfully added'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinWebhookResource'
        '400':
          description: 'Invalid Request Parameters'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
  '/projects/{projectId}/webhooks/{webhookId}':
    get:
      tags:
        - Webhooks
      summary: 'Get Webhook'
      description: '**Required scopes:** `project.webhook` (Read only).'
      operationId: api.projects.webhooks.get
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/WebhookId'
      responses:
        '200':
          description: 'Webhook data'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinWebhookResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or webhook with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    delete:
      tags:
        - Webhooks
      summary: 'Delete Webhook'
      description: '**Required scopes:** `project.webhook` (Read and Write).'
      operationId: api.projects.webhooks.delete
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/WebhookId'
      responses:
        '204':
          description: 'Webhook was successfully deleted'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or webhook with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
    patch:
      tags:
        - Webhooks
      summary: 'Edit Webhook'
      description: '**Required scopes:** `project.webhook` (Read and Write).'
      operationId: api.projects.webhooks.patch
      parameters:
        -
          $ref: '#/components/parameters/ProjectId'
        -
          $ref: '#/components/parameters/WebhookId'
      requestBody:
        description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookPatch'
      responses:
        '200':
          description: 'Webhook was successfully updated'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrowdinWebhookResource'
        '400':
          description: 'Invalid Request Body'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorCollectionResource'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticateError'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenExceptionResource'
        '404':
          description: 'Project or webhook with specified id was not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundExceptionResource'
        '405':
          description: 'Method Not Allowed'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MethodNotAllowedExceptionResource'
        '500':
          description: 'Internal Server Error'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InternalServerErrorExceptionResource'
components:
  schemas:
    InternalApplicationModulesCollectionResource:
      description: 'Internal Application Modules Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AuthGuardModule'
    AdvisorInsightPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/AdvisorInsightOperation'
    AdvisorInsightOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /isDismissed
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/AdvisorInsightOperationReplace'
          test: '#/components/schemas/AdvisorInsightOperationTest'
    AdvisorInsightOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AdvisorInsightOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: boolean
    AdvisorInsightOperationTest:
      description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AdvisorInsightOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: boolean
    AdvisorAppInsightForm:
      required:
        - outcome
      properties:
        outcome:
          description: "Result of the app's check. `flagged` — issue detected; `clear` — on target; `not_applicable` — inspector does not apply to this project."
          type: string
          enum:
            - flagged
            - clear
            - not_applicable
        checkedAt:
          description: 'Date when the app performed this check (ISO 8601). Defaults to the time the request is received.'
          type: string
          format: date-time
          example: '2026-05-21T14:30:00+00:00'
        metrics:
          description: 'Structured metrics produced by the app for this insight.'
          type: array
          items:
            $ref: '#/components/schemas/AdvisorInsightMetric'
          maxItems: 100
        recommendations:
          description: 'Actionable recommendations the app wants to surface for this insight.'
          type: array
          items:
            $ref: '#/components/schemas/AdvisorInsightRecommendation'
          maxItems: 20
        payload:
          description: 'Free-form data the app wants to keep attached to this insight. Stored as-is — the backend does not interpret its contents.'
          type: object
          additionalProperties: true
      type: object
    AdvisorCheckCollectionForm:
      properties:
        category:
          description: 'Optional category to scope the check to. Mutually exclusive with `inspectors`.'
          type: string
          example: context
        inspectors:
          description: 'Optional list of inspectors to re-check. Mutually exclusive with `category`.'
          type: array
          items:
            required:
              - key
            properties:
              key:
                type: string
                example: string_context_relevance
              options:
                description: 'Per-inspector options. Currently only `string_context_relevance` supports AI options.'
                properties:
                  mode: { type: string, enum: [auto, all], example: auto }
                  promptId: { type: integer, example: 42 }
                type: object
                nullable: true
            type: object
      type: object
    AdvisorCheckResource:
      description: 'Advisor Check Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AdvisorCheck'
    AdvisorInsightCollectionResource:
      description: 'Advisor Insights Collection'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AdvisorInsightResource'
            pagination:
              $ref: '#/components/schemas/AdvancedPagination'
    AdvisorInsightResource:
      description: 'Advisor Insight Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AdvisorInsight'
    AdvisorCheckAttributes:
      description: 'Exactly one of `category` or `inspectors` may be present; absence of both means an all-inspector check.'
      properties:
        category:
          description: 'Present only when the check was scoped to a category.'
          type: string
          example: context
          nullable: true
        inspectors:
          description: 'Present only when the check was scoped to a list of inspectors.'
          type: array
          items:
            properties:
              key:
                type: string
                example: string_context_relevance
            type: object
          nullable: true
      type: object
    AdvisorCheck:
      title: 'Advisor Check'
      properties:
        identifier:
          type: string
          example: 550e8400-e29b-41d4-a716-446655440000
        status:
          description: 'Status of the underlying job. Inherits the `JobDto` status taxonomy (e.g., `created`, `in_progress`, `done`, `failed`). Distinct from the Advisor Insight `status` field, which tracks per-insight freshness.'
          type: string
          example: created
        progress:
          description: 'in percentages'
          type: integer
          example: 0
        attributes:
          $ref: '#/components/schemas/AdvisorCheckAttributes'
        createdAt:
          type: string
          format: date-time
          example: '2026-04-16T12:00:00+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2026-04-16T12:00:00+00:00'
        startedAt:
          type: string
          format: date-time
          example: null
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: null
          nullable: true
      type: object
    AdvisorInsight:
      title: 'Advisor Insight'
      properties:
        id:
          type: integer
          example: 10
        inspectorKey:
          type: string
          example: string_context_relevance
        category:
          description: 'Category of the inspector. `null` if the inspector is no longer registered (e.g. originating app uninstalled).'
          type: string
          example: context
          nullable: true
        isDismissed:
          type: boolean
          example: false
        status:
          type: string
          enum:
            - pending
            - checking
            - outdated
            - done
          example: done
        outcome:
          description: 'Outcome of the latest check. `flagged` — issue detected; `clear` — on target; `not_applicable` — inspector does not apply to this project; `null` — not yet checked.'
          type: string
          enum:
            - flagged
            - clear
            - not_applicable
          example: flagged
          nullable: true
        severity:
          description: 'Severity of the inspector. `null` if the inspector is no longer registered.'
          type: string
          enum:
            - high
            - medium
            - low
          example: high
          nullable: true
        refreshPolicy:
          description: 'How often the inspector re-runs. `hourly` — at most once per hour; `daily` — at most once per day. Both are event-driven. `null` if the inspector is no longer registered.'
          type: string
          enum:
            - hourly
            - daily
          example: hourly
          nullable: true
        metrics:
          description: "Structured metrics emitted by the inspector. Use each metric's `key` to map values to your own labels and formatting."
          type: array
          items:
            $ref: '#/components/schemas/AdvisorInsightMetric'
          nullable: true
        recommendations:
          description: "Actionable recommendations selected by the backend. Use each recommendation's `id` to map to your own copy and target URL."
          type: array
          items:
            $ref: '#/components/schemas/AdvisorInsightRecommendation'
          nullable: true
        checkedAt:
          description: 'Date when the last check was performed (ISO 8601)'
          type: string
          format: date-time
          example: '2026-04-06T10:30:00+00:00'
          nullable: true
        lastAiRun:
          oneOf:
            -
              $ref: '#/components/schemas/AdvisorAiRunDescriptor'
          nullable: true
        payload:
          description: 'Data attached to this insight by the originating `advisor-inspector` app on its latest update. Returned exactly as the app submitted it.'
          type: object
          nullable: true
          additionalProperties: true
      type: object
    AdvisorInsightMetric:
      title: 'Advisor Insight Metric'
      properties:
        key:
          type: string
          example: quality_score
        value:
          type: number
          example: 12
        unit:
          type: string
          enum:
            - percent
            - count
          example: percent
        threshold:
          type: number
          example: 50
          nullable: true
        tone:
          type: string
          enum:
            - default
            - success
            - danger
          example: danger
        source:
          description: 'What produced the metric. Omitted for metrics recorded before sources were tracked.'
          type: string
          enum:
            - deterministic
            - ai
            - app
          example: deterministic
        checkedAt:
          description: "Date when the metric was measured (ISO 8601). Omitted for metrics measured at the insight's top-level `checkedAt`."
          type: string
          format: date-time
          example: '2026-04-06T10:30:00+00:00'
          nullable: true
      type: object
    AdvisorInsightRecommendation:
      title: 'Advisor Insight Recommendation'
      properties:
        id:
          type: string
          example: run_ai_context_validation
        primary:
          type: boolean
          example: true
        params:
          description: "Parameters provided alongside the recommendation (e.g., `projectId`). Typically used to construct the recommendation's target URL."
          type: object
      type: object
    AdvisorAiRunDescriptor:
      title: 'Advisor AI Run Descriptor'
      description: 'Describes the most recent AI validation run for an insight.'
      properties:
        mode:
          type: string
          enum:
            - auto
            - all
          example: auto
        promptId:
          type: integer
          example: 42
        at:
          type: string
          format: date-time
          example: '2026-04-06T10:30:00+00:00'
      type: object
    AiCustomPlaceholderPatchForm:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/AiCustomPlaceholderOperation'
    AiCustomPlaceholderOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /description
            - /placeholder
            - /value
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/AiCustomPlaceholderOperationReplace'
          test: '#/components/schemas/AiCustomPlaceholderOperationTest'
    AiCustomPlaceholderOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiCustomPlaceholderOperation'
        -
          properties:
            value:
              type: string
    AiCustomPlaceholderOperationTest:
      description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiCustomPlaceholderOperation'
        -
          properties:
            value:
              type: string
    AiCustomPlaceholderCreateForm:
      required:
        - description
        - placeholder
        - value
      properties:
        description:
          description: 'The description must be unique and must be between 3 and 255 characters.'
          type: string
          example: 'Product description'
        placeholder:
          description: 'The placeholder must be unique and must start with `%custom:` and end with `%`. Allowed characters: `a-z`, `A-Z`, `0-9`, `-`. The full length must not exceed 255 characters.'
          type: string
          example: '%custom:productDescription%'
        value:
          description: 'The text that will be utilized in the prompt. The value must not exceed 4000 characters.'
          type: string
          example: 'The product is the professional consulting service that transform challenges into opportunities.'
      type: object
    AiCustomPlaceholderCollectionResource:
      description: 'AI Custom Placeholder Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AiCustomPlaceholderResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    AiCustomPlaceholderResource:
      description: 'AI Prompt Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiCustomPlaceholder'
    AiCustomPlaceholder:
      title: 'AI Custom Placeholder'
      properties:
        id:
          type: integer
          example: 2
        description:
          type: string
          example: 'Product description'
        placeholder:
          type: string
          example: '%custom:productDescription%'
        value:
          type: string
          example: 'The product is the professional consulting service that transform challenges into opportunities.'
        createdAt:
          format: date-time
          example: '2019-09-20T11:11:05+00:00'
        updatedAt:
          format: date-time
          example: '2019-09-20T12:22:20+00:00'
      type: object
    AiFileTranslationsForm:
      required:
        - storageId
        - targetLanguageId
      properties:
        storageId:
          description: 'Storage Identifier of the file to translate. Get via [List Storages](#operation/api.storages.getMany)'
          type: integer
          format: int64
          example: 123
        sourceLanguageId:
          description: 'Source Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany). If not specified, auto-detection will be used.'
          type: string
          example: en
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: uk
        type:
          $ref: '#/components/schemas/ProjectFileType'
        parserVersion:
          description: "Using latest parser version by default.\n\n__Note:__ Must be used together with `type`"
          type: integer
          example: 1
        tmIds:
          description: 'Array of Translation Memory IDs. Get via [List TMs](#operation/api.tms.getMany)'
          type: array
          items:
            type: integer
            example: 123
        glossaryIds:
          description: 'Array of Glossary Identifiers. Get via [List Glossaries](#operation/api.glossaries.getMany)'
          type: array
          items:
            type: integer
            example: 456
        styleGuideIds:
          description: 'Array of Style Guide Identifiers. Get via [List Style Guides](#operation/api.style-guides.getMany)'
          type: array
          items:
            type: integer
            example: 654
        aiPromptId:
          description: "Pre-Translation Prompt Identifier. Get via [List Prompts](#operation/api.ai.prompts.getMany)\n\n__Note:__ Can't be used with `aiProviderId` or `aiModelId` in same request"
          type: integer
          example: 789
        aiProviderId:
          description: "AI Provider Identifier. Get via [List AI Providers](#operation/api.ai.providers.getMany)\n\n__Note:__ Must be used together with `aiModelId`. Can't be used with `aiPromptId` in same request"
          type: integer
          example: 12
        aiModelId:
          description: "AI Model ID. Get via [List AI Provider Models](#operation/api.ai.providers.models.getMany)\n\n__Note:__ Must be used together with `aiProviderId`. Can't be used with `aiPromptId` in same request"
          type: string
          example: gpt-4.1
        instructions:
          description: 'Custom instructions for translation'
          type: array
          items:
            type: string
            example: 'Keep a formal tone'
        attachmentIds:
          description: "Storage IDs of images to pass to AI as attachments (max 10). Get via [List Storages](#operation/api.storages.getMany)\n\nOnly image files are allowed:\n * jpeg\n * jpg\n * png\n * gif\n * webp"
          type: array
          format: int64
          items:
            type: integer
            example: 123
          maxItems: 10
      type: object
    AiFileTranslationsJobResource:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiFileTranslationsJobResponseModel'
    AiFileTranslationsJobResponseModel:
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          description: 'Job attributes including error info, stage, and metadata'
          properties:
            stage:
              description: 'Current stage (start, import, translate, export, done)'
              type: string
              example: translate
            error:
              properties:
                stage:
                  type: string
                  example: import
                message:
                  type: string
                  example: 'Failed to parse file'
              type: object
              nullable: true
            downloadName:
              type: string
              example: file.pdf
              nullable: true
            sourceLanguageId:
              description: 'Source language code. If not passed in the request, would be resolved after file parse.'
              type: string
              example: en
              nullable: true
            targetLanguageId:
              description: 'Target language code'
              type: string
              example: uk
            originalFileName:
              description: 'Original uploaded file name'
              type: string
              example: Sample_Chrome.json
            detectedType:
              description: 'Detected base file type'
              type: string
              example: chrome
              nullable: true
            parserVersion:
              description: 'Parser version for the detected file type (if applicable)'
              type: integer
              example: 2
              nullable: true
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2026-01-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2026-01-23T11:26:54+00:00'
          nullable: true
        startedAt:
          type: string
          format: date-time
          example: '2026-01-23T11:26:54+00:00'
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: '2026-01-23T11:26:54+00:00'
          nullable: true
      type: object
    AiFineTuningDatasetGenerateForm:
      properties:
        projectIds:
          description: "Project identifiers from which the dataset will be generated. Get via [List Projects](#operation/api.projects.getMany).\n\n__Note__: Required if `tmIds` are not specified."
          type: array
          items:
            type: integer
        tmIds:
          description: "TM identifiers from which the dataset will be generated. Get via [List TMs](#operation/api.tms.getMany).\n\n__Note__: This parameter is not supported for the prompt with the external configuration."
          type: array
          items:
            type: integer
        purpose:
          description: 'Purpose of the dataset'
          type: string
          default: training
          enum:
            - training
            - validation
        dateFrom:
          description: 'Start date for dataset generation'
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        dateTo:
          description: 'End date for dataset generation'
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        maxFileSize:
          description: "Maximum dataset file size in bytes.\n\n __Note__: If not provided, default limits based on the model will be applied"
          type: integer
        minExamplesCount:
          description: "Minimum number of examples in the dataset.\n\n__Note__: If not provided, default limits based on the model will be applied"
          type: integer
        maxExamplesCount:
          description: "Maximum number of examples in the dataset.\n\n__Note__: If not provided, default limits based on the model will be applied"
          type: integer
      type: object
    AiFineTuningJobCreateForm:
      required:
        - trainingOptions
      properties:
        dryRun:
          description: 'Simulate the fine-tuning of job creation without actually creating them'
          type: boolean
          default: false
        hyperparameters:
          description: 'The hyperparameters used for the fine-tuning job.'
          properties:
            batchSize:
              description: "Number of examples in each batch. A larger batch size means that model parameters are updated less frequently, but with lower variance.\n\n__Note__: This parameter is not supported by Mistral AI."
              type: integer
            learningRateMultiplier:
              description: "Scaling factor for the learning rate. A smaller learning rate may be useful to avoid overfitting.\n\n__Note__: This parameter is not supported by Mistral AI."
              type: number
            nEpochs:
              description: 'The number of epochs to train the model for. An epoch refers to one full cycle through the training dataset.'
              type: integer
          type: object
        trainingOptions:
          description: 'Options for generating the training dataset.'
          properties:
            projectIds:
              description: "Project identifiers from which the dataset will be generated. Get via [List Projects](#operation/api.projects.getMany).\n\n__Note__: Required if `tmIds` are not specified."
              type: array
              items:
                type: integer
            tmIds:
              description: "TM identifiers from which the dataset will be generated. Get via [List TMs](#operation/api.tms.getMany).\n\n__Note__: This parameter is not supported for the prompt with the external configuration."
              type: array
              items:
                type: integer
            dateFrom:
              description: 'Start date for dataset generation'
              type: string
              format: date-time
              example: '2019-09-23T11:26:54+00:00'
            dateTo:
              description: 'End date for dataset generation'
              type: string
              format: date-time
              example: '2019-09-23T11:26:54+00:00'
            maxFileSize:
              description: "Maximum dataset file size in bytes.\n\n__Note__: If not provided, default limits based on the model will be applied"
              type: integer
            minExamplesCount:
              description: "Minimum number of examples in the dataset.\n\n__Note__: If not provided, default limits based on the model will be applied"
              type: integer
            maxExamplesCount:
              description: "Maximum number of examples in the dataset.\n\n__Note__: If not provided, default limits based on the model will be applied"
              type: integer
          type: object
        validationOptions:
          description: 'Options for generating the validation dataset.'
          properties:
            projectIds:
              description: "Project identifiers from which the dataset will be generated. Get via [List Projects](#operation/api.projects.getMany).\n\n__Note__: Required if `tmIds` are not specified."
              type: array
              items:
                type: integer
            tmIds:
              description: "TM identifiers from which the dataset will be generated. Get via [List TMs](#operation/api.tms.getMany).\n\n__Note__: This parameter is not supported for the prompt with the external configuration."
              type: array
              items:
                type: integer
            dateFrom:
              description: 'Start date for dataset generation'
              type: string
              format: date-time
              example: '2019-09-23T11:26:54+00:00'
            dateTo:
              description: 'End date for dataset generation'
              type: string
              format: date-time
              example: '2019-09-23T11:26:54+00:00'
            maxFileSize:
              description: "Maximum dataset file size in bytes.\n\n__Note__: If not provided, default limits based on the model will be applied"
              type: integer
            minExamplesCount:
              description: "Minimum number of examples in the dataset.\n\n__Note__: If not provided, default limits based on the model will be applied"
              type: integer
            maxExamplesCount:
              description: "Maximum number of examples in the dataset.\n\n__Note__: If not provided, default limits based on the model will be applied"
              type: integer
          type: object
      type: object
    AiFineTuningDatasetResource:
      description: 'AI Fine-Tuning Dataset Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiFineTuningDataset'
    AiFineTuningEventCollectionResource:
      description: 'AI Fine-Tuning Event Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AiFineTuningEventResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    AiFineTuningEventResource:
      description: 'AI Fine-Tuning Event Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiFineTuningEvent'
    AiFineTuningJobCollectionResource:
      description: 'AI Fine-Tuning Job Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AiFineTuningJobResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    AiFineTuningJobResource:
      description: 'AI Fine-Tuning Job Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiFineTuningJob'
    AiFineTuningDataset:
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          properties:
            projectIds:
              type: array
              items:
                type: integer
              nullable: true
            tmIds:
              type: array
              items:
                type: integer
              nullable: true
            purpose:
              type: string
              default: training
              enum:
                - training
                - validation
            dateFrom:
              type: string
              format: date-time
              example: '2019-09-23T11:26:54+00:00'
              nullable: true
            dateTo:
              type: string
              format: date-time
              example: '2019-09-23T11:26:54+00:00'
              nullable: true
            maxFileSize:
              type: integer
              nullable: true
            minExamplesCount:
              type: integer
              nullable: true
            maxExamplesCount:
              type: integer
              nullable: true
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    AiFineTuningEvent:
      properties:
        id:
          type: string
          example: ftevent-0HOW0hqwQ7G1b70qOC8S7UsT
        type:
          type: string
          enum:
            - message
            - metrics
        message:
          type: string
          example: 'Created fine-tuning job: ftjob-EhnfVT9MnddMBLfjMcme71if'
        data:
          properties:
            step:
              type: integer
              example: 135
            totalSteps:
              type: integer
              example: 135
            trainingLoss:
              type: number
              format: float
              example: 0.0031
            validationLoss:
              type: number
              format: float
              example: 0.0449
              nullable: true
            fullValidationLoss:
              type: number
              format: float
              example: 0.0275
              nullable: true
          type: object
          nullable: true
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    AiFineTuningJob:
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          properties:
            dryRun:
              type: boolean
            aiPromptId:
              type: integer
            hyperparameters:
              properties:
                batchSize:
                  type: integer
                  nullable: true
                learningRateMultiplier:
                  type: number
                  nullable: true
                nEpochs:
                  type: integer
                  nullable: true
              type: object
              nullable: true
            trainingOptions:
              properties:
                projectIds:
                  type: array
                  items: { type: integer }
                  nullable: true
                tmIds:
                  type: array
                  items: { type: integer }
                  nullable: true
                dateFrom:
                  type: string
                  format: date-time
                  example: '2019-09-23T11:26:54+00:00'
                  nullable: true
                dateTo:
                  type: string
                  format: date-time
                  example: '2019-09-23T11:26:54+00:00'
                  nullable: true
                maxFileSize:
                  type: integer
                  nullable: true
                minExamplesCount:
                  type: integer
                  nullable: true
                maxExamplesCount:
                  type: integer
                  nullable: true
              type: object
            validationOptions:
              properties:
                projectIds:
                  type: array
                  items: { type: integer }
                  nullable: true
                tmIds:
                  type: array
                  items: { type: integer }
                  nullable: true
                dateFrom:
                  type: string
                  format: date-time
                  example: '2019-09-23T11:26:54+00:00'
                  nullable: true
                dateTo:
                  type: string
                  format: date-time
                  example: '2019-09-23T11:26:54+00:00'
                  nullable: true
                maxFileSize:
                  type: integer
                  nullable: true
                minExamplesCount:
                  type: integer
                  nullable: true
                maxExamplesCount:
                  type: integer
                  nullable: true
              type: object
              nullable: true
            baseModel:
              type: string
              example: gpt-4o-mini-2024-07-18
              nullable: true
            fineTunedModel:
              type: string
              example: 'ft:gpt-4o-mini-2024-07-18:2024-08-12:9vQgFOfp'
              nullable: true
            trainedTokensCount:
              type: integer
              nullable: true
            trainingDatasetUrl:
              type: string
              example: 'https://crowdin-tmp.s3.eu-central-1.amazonaws.com/72057531/ai_fine_tuning/0fc00e9e-3a80-49d1-a8cb-39c9a81c0ae2/training-dataset.jsonl'
              nullable: true
            validationDatasetUrl:
              type: string
              example: 'https://crowdin-tmp.s3.eu-central-1.amazonaws.com/72057531/ai_fine_tuning/0fc00e9e-3a80-49d1-a8cb-39c9a81c0ae2/validation-dataset.jsonl'
              nullable: true
            metadata:
              properties:
                cost:
                  type: number
                  format: float
                costCurrency:
                  type: string
                  example: USD
              type: object
              nullable: true
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    AiPromptPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/AiPromptOperation'
    AiPromptOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /action
            - /aiProviderId
            - /aiModelId
            - /enabledProjectIds
            - /config
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/AiPromptOperationReplace'
          test: '#/components/schemas/AiPromptOperationTest'
    AiPromptOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiPromptOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: object
                -
                  type: array
                  items: { type: integer }
    AiPromptOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiPromptOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: object
                -
                  type: array
                  items: { type: integer }
    AiPromptCloneForm:
      properties:
        name:
          description: 'AI prompt name'
          type: string
          example: 'Pre-translate prompt'
      type: object
    AiPromptCompletionCreateForm:
      required:
        - resources
      properties:
        resources: {  }
        tools:
          description: 'List of AI Tools'
          type: array
          items:
            properties:
              tool:
                description: 'AI Tool'
                required:
                  - type
                  - function
                properties:
                  type: { description: 'The type of the tool. Currently, only `function` is supported.', type: string, enum: [function], example: function }
                  function: { required: [name], properties: { description: { description: 'A description of what the function does, used by the AI to choose when and how to call the function.', type: string }, name: { description: 'The name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.', type: string }, parameters: { description: 'The parameters the functions accepts, described as a JSON Schema object. See [JSON Schema reference](https://json-schema.org/understanding-json-schema) for documentation about the format.', type: object } }, type: object }
                type: object
            type: object
        tool_choice:
          oneOf:
            -
              type: string
            -
              type: object
      type: object
    CrowdinAiPromptCompletionCreateForm:
      required:
        - resources
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiPromptCompletionCreateForm'
        -
          properties:
            resources:
              description: 'AI prompt context resources'
              oneOf:
                -
                  $ref: '#/components/schemas/ai.prompt.completion.resources.pre_translate'
                -
                  $ref: '#/components/schemas/ai.prompt.completion.resources.qa_check'
                -
                  $ref: '#/components/schemas/ai.prompt.completion.resources.custom'
    ai.prompt.completion.resources.overridePromptValues.common:
      properties:
        sourceLanguage:
          type: string
          example: English
        targetLanguage:
          type: string
          example: Ukrainian
        strings:
          description: "Example: `{\"strings\":[{\"id\":5515318,\"text\":\"About...\",\"key\":\"about\",\"context\":\"about\",\"maxLength\":null},{\"id\":5515319,\"text\":\"About Me\",\"key\":\"about_me\",\"context\":\"about_me\",\"maxLength\":null},{\"id\":5515320,\"text\":\"Current Password\",\"key\":\"current_password\",\"context\":\"current_password\",\"maxLength\":null}]}`\n\n__Note:__ The provided data should follow the structure shown. Each object in the array must include a 'text' field. Other fields such as 'id', 'key', 'context', and 'maxLength' are optional. You can also include custom properties as needed."
          type: string
          example: '{"strings":[{"id":5515318,"text":"About...","key":"about","context":"about","maxLength":null},{"id":5515319,"text":"About Me","key":"about_me","context":"about_me","maxLength":null},{"id":5515320,"text":"Current Password","key":"current_password","context":"current_password","maxLength":null}]}'
        tm:
          type: string
          example: "About... => Про...\nAbout Me => Про мене\nCreate Password => Створити пароль"
        terms:
          type: string
          example: "Term: Password. Translation: Пароль. Part of speech: N/A.\nTerm: password. Term doesn\\'t have a defined translation. Please translate it yourself. Part of speech: N/A."
        fileName:
          type: string
          example: crowdin_sample_android.xml
        fileContext:
          type: string
          example: N/A
        siblingsStrings:
          type: string
          example: N/A
        projectName:
          type: string
          example: Crowdin
        projectDescription:
          type: string
          example: 'Crowdin Translations. Official effort.'
        projectPublicDescription:
          description: 'Deprecated. Use `projectDescription` instead.'
          type: string
          example: 'Crowdin Translations. Official effort.'
          deprecated: true
      type: object
    ai.prompt.completion.resources.overridePromptValues.pre_translate:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.prompt.completion.resources.overridePromptValues.common'
        -
          properties:
            pluralForms:
              type: string
              example: 'one,few,many,other'
            fileContent:
              type: string
              example: N/A
      additionalProperties:
        type: string
    ai.prompt.completion.resources.overridePromptValues.alignment:
      properties:
        sourceLanguage:
          type: string
          example: English
        targetLanguage:
          type: string
          example: Ukrainian
        alignmentPairs:
          description: "Example: `{\"pairs\":[{\"id\":\"c61f9e77-1d0d-469a-b1ad-8c25c2c7e05c\",\"source\":\"About...\",\"translation\":\"Про...\"},{\"id\":\"8e0cdbd9-60c0-4be8-b51e-1cd6bf890902\",\"source\":\"About Me\",\"translation\":\"Про мене\"},{\"id\":\"6dbed810-353b-400d-975e-53723ab448a5\",\"source\":\"Current Password\",\"translation\":\"Створити пароль\"}]}`\n\n__Note:__ The provided data should follow the structure shown. Each object in the array must include a 'source' and 'translation' field. Other fields such as 'id' are optional. You can also include custom properties as needed."
          type: string
          example: '{"pairs":[{"id":"c61f9e77-1d0d-469a-b1ad-8c25c2c7e05c","source":"About...","translation":"Про..."},{"id":"8e0cdbd9-60c0-4be8-b51e-1cd6bf890902","source":"About Me","translation":"Про мене"},{"id":"6dbed810-353b-400d-975e-53723ab448a5","source":"Current Password","translation":"Створити пароль"}]}'
        projectDescription:
          type: string
          example: 'Crowdin Translations. Official effort.'
        projectPublicDescription:
          description: 'Deprecated. Use `projectDescription` instead.'
          type: string
          example: 'Crowdin Translations. Official effort.'
          deprecated: true
      type: object
      additionalProperties:
        type: string
    ai.prompt.completion.resources.overridePromptValues.qa_check:
      properties:
        sourceLanguage:
          type: string
          example: English
        targetLanguage:
          type: string
          example: Ukrainian
        translationUnits:
          description: "Example: `{\"translationUnits\":[{\"id\":\"c9f4b768-5d71-4fd6-a3db-85f1f8dbe664\",\"source\":{\"id\":5515320,\"text\":\"Current Password\",\"key\":\"current_password\",\"context\":\"current_password\",\"maxLength\":null},\"translation\":{\"id\":5515321,\"text\":\"Створити пароль\"}}]}`\n\n__Note:__ The provided data should follow the structure shown. Each object in the array must include a 'source.text' and 'translation.text' field. Other fields such as 'id' are optional. You can also include custom properties as needed."
          type: string
          example: '{"translationUnits":[{"id":"c9f4b768-5d71-4fd6-a3db-85f1f8dbe664","source":{"id":5515320,"text":"Current Password","key":"current_password","context":"current_password","maxLength":null},"translation":{"id":5515321,"text":"Створити пароль"}}]}'
        tm:
          type: string
          example: 'Create Password => Створити пароль'
        terms:
          type: string
          example: "Term: Password. Translation: Пароль. Part of speech: N/A.\nTerm: password. Term doesn\\'t have a defined translation. Please translate it yourself. Part of speech: N/A."
        fileName:
          type: string
          example: crowdin_sample_android.xml
        fileContext:
          type: string
          example: N/A
        projectName:
          type: string
          example: Crowdin
        projectDescription:
          type: string
          example: 'Crowdin Translations. Official effort.'
        projectPublicDescription:
          description: 'Deprecated. Use `projectDescription` instead.'
          type: string
          example: 'Crowdin Translations. Official effort.'
          deprecated: true
      type: object
      additionalProperties:
        type: string
    ai.prompt.completion.resources.overridePromptValues.custom:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.prompt.completion.resources.overridePromptValues.common'
        -
          properties:
            fileContent:
              type: string
              example: N/A
            filteredStrings:
              type: string
              example: N/A
      additionalProperties:
        type: string
    ai.prompt.completion.resources.pre_translate:
      title: 'Resources for prompt with pre-translate action'
      required:
        - projectId
      properties:
        projectId:
          type: integer
        sourceLanguageId:
          description: '__Note__: If not specified, the source language of the project will be used'
          type: string
        targetLanguageId:
          type: string
        stringIds:
          description: '__Note:__ Must be used together with `targetLanguageId`. You can assign up to 500 strings at a time.'
          type: array
          items:
            type: integer
            example: 78253
        overridePromptValues:
          $ref: '#/components/schemas/ai.prompt.completion.resources.overridePromptValues.pre_translate'
      type: object
    ai.prompt.completion.resources.alignment:
      title: 'Resources for prompt with alignment action'
      required:
        - projectId
      properties:
        projectId:
          type: integer
        sourceLanguageId:
          description: '__Note__: If not specified, the source language of the project will be used'
          type: string
        targetLanguageId:
          type: string
        stringIds:
          description: '__Note:__ Must be used together with `targetLanguageId`. You can assign up to 500 strings at a time.'
          type: array
          items:
            type: integer
            example: 78253
        overridePromptValues:
          $ref: '#/components/schemas/ai.prompt.completion.resources.overridePromptValues.alignment'
      type: object
    ai.prompt.completion.resources.qa_check:
      title: 'Resources for prompt with QA Check action'
      required:
        - projectId
      properties:
        projectId:
          type: integer
        sourceLanguageId:
          description: '__Note__: If not specified, the source language of the project will be used'
          type: string
        targetLanguageId:
          type: string
        stringIds:
          description: '__Note:__ Must be used together with `targetLanguageId`. You can assign up to 500 strings at a time.'
          type: array
          items:
            type: integer
            example: 78253
        overridePromptValues:
          $ref: '#/components/schemas/ai.prompt.completion.resources.overridePromptValues.qa_check'
      type: object
    ai.prompt.completion.resources.custom:
      title: 'Resources for prompt with custom action'
      required:
        - projectId
      properties:
        projectId:
          type: integer
        sourceLanguageId:
          description: '__Note__: If not specified, the source language of the project will be used'
          type: string
        targetLanguageId:
          type: string
        stringIds:
          description: '__Note:__ Must be used together with `targetLanguageId`. You can assign up to 500 strings at a time.'
          type: array
          items:
            type: integer
            example: 78253
        overridePromptValues:
          $ref: '#/components/schemas/ai.prompt.completion.resources.overridePromptValues.custom'
        customInstruction:
          type: string
      type: object
    AiPromptCreateForm:
      properties:
        name:
          description: 'AI prompt name'
          type: string
          example: 'Pre-translate prompt'
        action:
          type: string
          enum:
            - pre_translate
            - qa_check
        aiProviderId:
          description: 'AI Provider identifier. Get via [List AI Providers](#operation/api.ai.providers.getMany)'
          type: integer
        aiModelId:
          description: 'Ai Model id. Get via [List AI Provider Models](#operation/api.ai.providers.models.getMany)'
          type: string
          example: gpt-5.4
        isEnabled:
          description: 'If `aiProviderId` or `aiModelId` is not set, default value would be `false`'
          type: boolean
          default: true
          deprecated: true
        enabledProjectIds:
          description: 'Array of project ids. Get via [List Projects](#operation/api.projects.getMany)'
          type: array
          items:
            type: integer
            example: 23
      type: object
    CrowdinAiPromptCreateForm:
      required:
        - name
        - action
        - config
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiPromptCreateForm'
        -
          properties:
            action:
              type: string
              enum:
                - pre_translate
                - qa_check
            config:
              description: 'AI prompt configuration'
              oneOf:
                -
                  $ref: '#/components/schemas/ai.prompt.config.basic_mode.pre_translate'
                -
                  $ref: '#/components/schemas/ai.prompt.config.basic_mode.qa_check'
                -
                  $ref: '#/components/schemas/ai.prompt.config.crowdin_advanced_mode'
                -
                  $ref: '#/components/schemas/ai.prompt.config.external_mode'
    ai.prompt.config.basic_mode.pre_translate:
      title: 'Basic mode (pre-translate action)'
      required:
        - mode
      properties:
        mode:
          type: string
          enum:
            - basic
        companyDescription:
          description: 'Use field `snippets` instead'
          type: string
          deprecated: true
        projectDescription:
          description: 'Use field `snippets` instead'
          type: string
          deprecated: true
        audienceDescription:
          description: 'Use field `snippets` instead'
          type: string
          deprecated: true
        customPlaceholders:
          description: 'Use field `snippets` instead'
          type: array
          items:
            type: string
            example: '%custom:companyDescription%'
          deprecated: true
        snippets:
          description: 'Array of snippets. Get via [List AI Snippets](#operation/api.ai.snippets.getMany)'
          type: array
          items:
            type: string
            example: '%custom:companyDescription%'
        otherLanguageTranslations:
          properties:
            isEnabled:
              type: boolean
              default: true
            languageIds:
              description: 'Array of language ids. Get via [List Supported Languages](#operation/api.languages.getMany)'
              type: array
              items:
                type: string
                example: uk
          type: object
        glossaryTerms:
          type: boolean
        tmSuggestions:
          type: boolean
        fileContent:
          type: boolean
          default: false
          deprecated: true
        fileContext:
          type: boolean
        generateFileSummary:
          type: boolean
        screenshots:
          type: boolean
        projectContext:
          type: boolean
        publicProjectDescription:
          description: 'Deprecated. Use field `projectContext` instead'
          type: boolean
          default: false
          deprecated: true
        siblingsStrings:
          type: boolean
        retryOnQaIssues:
          type: boolean
      type: object
    ai.prompt.config.basic_mode.alignment:
      title: 'Basic mode (alignment action)'
      required:
        - mode
      properties:
        mode:
          type: string
          enum:
            - basic
        companyDescription:
          description: 'Use field `snippets` instead'
          type: string
          deprecated: true
        projectDescription:
          description: 'Use field `snippets` instead'
          type: string
          deprecated: true
        audienceDescription:
          description: 'Use field `snippets` instead'
          type: string
          deprecated: true
        customPlaceholders:
          description: 'Use field `snippets` instead'
          type: array
          items:
            type: string
            example: '%custom:companyDescription%'
          deprecated: true
        snippets:
          description: 'Array of snippets. Get via [List AI Snippets](#operation/api.ai.snippets.getMany)'
          type: array
          items:
            type: string
            example: '%custom:companyDescription%'
        projectContext:
          type: boolean
        publicProjectDescription:
          description: 'Deprecated. Use field `projectContext` instead'
          type: boolean
          default: false
          deprecated: true
      type: object
    ai.prompt.config.basic_mode.qa_check:
      title: 'Basic mode (QA check action)'
      required:
        - mode
        - evaluationSteps
      properties:
        mode:
          type: string
          enum:
            - basic
        evaluationSteps:
          type: array
          items:
            type: string
            example: 'Verify that any technical terms, idioms, or domain-specific vocabulary are translated correctly.'
        customPlaceholders:
          description: 'Use field `snippets` instead'
          type: array
          items:
            type: string
            example: '%custom:companyDescription%'
          deprecated: true
        snippets:
          type: array
          items:
            type: string
            example: '%custom:companyDescription%'
        glossaryTerms:
          type: boolean
        tmSuggestions:
          type: boolean
        fileContext:
          type: boolean
        screenshots:
          type: boolean
        projectContext:
          type: boolean
        publicProjectDescription:
          description: 'Deprecated. Use field `projectContext` instead'
          type: boolean
          default: false
          deprecated: true
      type: object
    ai.prompt.config.advanced_mode:
      title: 'Advanced mode'
      required:
        - mode
        - prompt
      properties:
        mode:
          type: string
          enum:
            - advanced
        generateFileSummary:
          type: boolean
        glossaryTerms:
          type: boolean
        tmSuggestions:
          type: boolean
        screenshots:
          type: boolean
        prompt:
          type: string
        otherLanguageTranslations:
          properties:
            isEnabled:
              type: boolean
              default: true
            languageIds:
              description: 'Array of language ids. Get via [List Supported Languages](#operation/api.languages.getMany)'
              type: array
              items:
                type: string
                example: uk
          type: object
        retryOnQaIssues:
          description: 'Available only for pre-translate action'
          type: boolean
      type: object
    ai.prompt.config.crowdin_advanced_mode:
      title: 'Advanced mode'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.prompt.config.advanced_mode'
        -
          properties:
            otherLanguageTranslations:
              description: '__Note:__ Not available for QA check action'
              properties:
                isEnabled:
                  type: boolean
                  default: true
                languageIds:
                  description: 'Array of language ids. Get via [List Supported Languages](#operation/api.languages.getMany)'
                  type: array
                  items: { type: string, example: uk }
              type: object
    ai.prompt.config.enterprise_advanced_mode:
      title: 'Advanced mode'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.prompt.config.advanced_mode'
        -
          properties:
            generateFileSummary:
              description: '__Note:__ Not available for alignment action'
              type: boolean
            screenshots:
              description: '__Note:__ Not available for alignment action'
              type: boolean
            otherLanguageTranslations:
              description: '__Note:__ Not available for alignment and QA check actions'
              properties:
                isEnabled:
                  type: boolean
                  default: true
                languageIds:
                  description: 'Array of language ids. Get via [List Supported Languages](#operation/api.languages.getMany)'
                  type: array
                  items: { type: string, example: uk }
              type: object
    ai.prompt.config.basic_mode.enterprise.pre_translate:
      title: 'Basic mode (pre-translate action)'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.prompt.config.basic_mode.pre_translate'
        -
          properties:
            organizationContext:
              description: 'Include organization name and internal description into the prompt context.'
              type: boolean
              default: false
    ai.prompt.config.basic_mode.enterprise.alignment:
      title: 'Basic mode (alignment action)'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.prompt.config.basic_mode.alignment'
        -
          properties:
            organizationContext:
              description: 'Include organization name and internal description into the prompt context.'
              type: boolean
              default: false
    ai.prompt.config.basic_mode.enterprise.qa_check:
      title: 'Basic mode (QA check action)'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.prompt.config.basic_mode.qa_check'
        -
          properties:
            organizationContext:
              description: 'Include organization name and internal description into the prompt context.'
              type: boolean
              default: false
    ai.prompt.config.external_mode:
      title: 'External mode'
      required:
        - mode
        - identifier
        - key
      properties:
        mode:
          type: string
          enum:
            - external
        identifier:
          description: 'Application identifier. Get via [List Applications](#operation/api.applications.installations.getMany)'
          type: string
        key:
          description: 'Module key'
          type: string
        options:
          description: 'Options to compile the prompt. Get from configurator'
          type: object
          additionalProperties: true
        retryOnQaIssues:
          description: 'Available only for pre-translate action and may be disabled by AI prompt provider'
          type: boolean
      type: object
    EnterpriseAiPromptCollectionResource:
      description: 'AI Prompt Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/EnterpriseAiPromptResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinAiPromptCollectionResource:
      description: 'AI Prompt Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinAiPromptResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    AiPromptCompletionResource:
      description: 'AI Prompt Completion Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiPromptCompletion'
    EnterpriseAiPromptResource:
      description: 'AI Prompt Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/EnterpriseAiPrompt'
    CrowdinAiPromptResource:
      description: 'AI Prompt Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinAiPrompt'
    AiPromptCompletion:
      title: 'AI Prompt Completion'
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          properties:
            aiPromptId:
              type: integer
              example: 38
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        eta:
          type: string
          example: '1 second'
          deprecated: true
      type: object
    AiPrompt:
      title: 'AI Prompt'
      properties:
        id:
          type: integer
          example: 2
        name:
          type: string
          example: 'Pre-translate prompt'
        action:
          type: string
          example: pre_translate
        aiProviderId:
          type: integer
          example: 2
          nullable: true
        aiModelId:
          type: string
          example: gpt-5.4
          nullable: true
        isEnabled:
          type: boolean
        enabledProjectIds:
          type: array
          items:
            type: integer
            example: 1
        config:
          description: 'AI prompt configuration'
          type: object
        promptPreview:
          type: string
          nullable: true
        isFineTuningAvailable:
          type: boolean
        createdBy:
          description: 'Identifier of the user who created the prompt'
          type: integer
          example: 123
          nullable: true
        updatedBy:
          description: 'Identifier of the user who last updated the prompt'
          type: integer
          example: 456
          nullable: true
        lastUsedBy:
          description: 'Identifier of the user who last used the prompt'
          type: integer
          example: 789
          nullable: true
        lastUsedAt:
          description: 'Date and time when the prompt was last used'
          type: string
          format: date-time
          example: '2019-09-25T14:30:00+00:00'
          nullable: true
        usageCount:
          description: 'Total number of times the prompt has been used'
          type: integer
          example: 42
        createdAt:
          format: date-time
          example: '2019-09-20T11:11:05+00:00'
        updatedAt:
          format: date-time
          example: '2019-09-20T12:22:20+00:00'
      type: object
    EnterpriseAiPrompt:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiPrompt'
        -
          properties:
            config:
              description: 'AI prompt configuration'
              type: object
              oneOf:
                -
                  $ref: '#/components/schemas/ai.prompt.config.basic_mode.enterprise.pre_translate'
                -
                  $ref: '#/components/schemas/ai.prompt.config.basic_mode.enterprise.alignment'
                -
                  $ref: '#/components/schemas/ai.prompt.config.basic_mode.enterprise.qa_check'
                -
                  $ref: '#/components/schemas/ai.prompt.config.enterprise_advanced_mode'
                -
                  $ref: '#/components/schemas/ai.prompt.config.external_mode'
    CrowdinAiPrompt:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiPrompt'
        -
          properties:
            config:
              description: 'AI prompt configuration'
              type: object
              oneOf:
                -
                  $ref: '#/components/schemas/ai.prompt.config.basic_mode.pre_translate'
                -
                  $ref: '#/components/schemas/ai.prompt.config.basic_mode.qa_check'
                -
                  $ref: '#/components/schemas/ai.prompt.config.crowdin_advanced_mode'
                -
                  $ref: '#/components/schemas/ai.prompt.config.external_mode'
    AiProviderPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/AiProviderOperation'
    AiProviderOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /type
            - /credentials
            - /config
            - /isEnabled
            - /useSystemCredentials
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/AiProviderOperationReplace'
          test: '#/components/schemas/AiProviderOperationTest'
    AiProviderOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiProviderOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: object
                -
                  type: boolean
    AiProviderOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiProviderOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: object
                -
                  type: boolean
    AiProviderCreateForm:
      required:
        - name
        - type
      properties:
        name:
          description: 'AI provider name'
          type: string
          example: OpenAI
        type:
          description: 'AI provider type'
          type: string
          enum:
            - open_ai
            - azure_open_ai
            - google_gemini
            - google_gemini_ai_studio
            - mistral_ai
            - anthropic
            - x_ai
            - watsonx
            - deepseek
            - microsoft_foundry
            - custom_ai
        credentials:
          description: "User’s own AI provider credentials.\n\n__Note__: Use only if `useSystemCredentials` is set to false."
          oneOf:
            -
              $ref: '#/components/schemas/ai.provider.credentials.open_ai'
            -
              $ref: '#/components/schemas/ai.provider.credentials.azure_open_ai'
            -
              $ref: '#/components/schemas/ai.provider.credentials.google_gemini'
            -
              $ref: '#/components/schemas/ai.provider.credentials.google_gemini_ai_studio'
            -
              $ref: '#/components/schemas/ai.provider.credentials.mistral_ai'
            -
              $ref: '#/components/schemas/ai.provider.credentials.anthropic'
            -
              $ref: '#/components/schemas/ai.provider.credentials.x_ai'
            -
              $ref: '#/components/schemas/ai.provider.credentials.watsonx'
            -
              $ref: '#/components/schemas/ai.provider.credentials.deepseek'
            -
              $ref: '#/components/schemas/ai.provider.credentials.microsoft_foundry'
            -
              $ref: '#/components/schemas/ai.provider.credentials.custom_ai'
        config:
          deprecated: true
        isEnabled:
          description: 'Defines whether to AI provider is enabled.'
          type: boolean
          default: true
        useSystemCredentials:
          description: "Enables the paid service AI provider via Crowdin.\n\n__Note__: Set to true if `credentials` is not provided. Not supported for `custom_ai`, `x_ai`, `watsonx`, `deepseek`, `microsoft_foundry` and `google_gemini_ai_studio` types."
          type: boolean
          default: false
      type: object
    EnterpriseAiProviderCreateForm:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiProviderCreateForm'
        -
          properties:
            config:
              $ref: '#/components/schemas/ai.provider.enterprise_configuration'
    CrowdinAiProviderCreateForm:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiProviderCreateForm'
        -
          properties:
            config:
              $ref: '#/components/schemas/ai.provider.crowdin_configuration'
    ai.provider.enterprise_configuration:
      title: 'AI Provider configuration'
      description: 'AI provider configuration'
      properties:
        actionRules:
          description: 'Configuration of available models for actions'
          type: array
          items:
            $ref: '#/components/schemas/ai.provider.enterprise_configuration.actionRule'
      type: object
    ai.provider.crowdin_configuration:
      title: 'AI Provider configuration'
      description: 'AI provider configuration'
      properties:
        actionRules:
          description: 'Configuration of available models for actions'
          type: array
          items:
            $ref: '#/components/schemas/ai.provider.crowdin_configuration.actionRule'
      type: object
    ai.provider.configuration.actionRule:
      properties:
        action:
          type: string
        availableAiModelIds:
          description: 'Available AI provider model ids. Get via [List AI Provider Models](#operation/api.ai.providers.models.getMany)'
          type: array
          items:
            type: string
            example: gpt-5.4
      type: object
    ai.provider.enterprise_configuration.actionRule:
      title: 'Action rule'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.provider.configuration.actionRule'
        -
          properties:
            action:
              type: string
              enum:
                - pre_translate
                - alignment
                - qa_check
    ai.provider.crowdin_configuration.actionRule:
      title: 'Action rule'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.provider.configuration.actionRule'
        -
          properties:
            action:
              type: string
              enum:
                - pre_translate
                - qa_check
    ai.provider.credentials.open_ai:
      title: OpenAI
      required:
        - apiKey
      properties:
        apiKey:
          description: 'Api key'
          type: string
        baseUrl:
          description: 'Override the provider API base URL (e.g. a self-hosted proxy or third-party gateway)'
          type: string
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`Authorization`) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header"
          type: boolean
          default: false
      type: object
    ai.provider.credentials.azure_open_ai:
      title: 'Azure OpenAI'
      required:
        - resourceName
        - apiKey
        - deploymentName
        - apiVersion
      properties:
        resourceName:
          description: 'Resource name'
          type: string
        apiKey:
          description: 'Api key'
          type: string
        deploymentName:
          description: 'Deployment name'
          type: string
        apiVersion:
          description: 'Api version'
          type: string
        baseUrl:
          description: 'Override the provider API base URL (e.g. a self-hosted proxy or third-party gateway)'
          type: string
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`api-key`) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header"
          type: boolean
          default: false
      type: object
    ai.provider.credentials.google_gemini:
      title: 'Google Gemini (Vertex AI)'
      required:
        - project
        - region
      properties:
        project:
          description: Project
          type: string
        region:
          description: Region
          type: string
        serviceAccountKey:
          description: 'Service account key. Required if `workloadIdentityFederationAudience` is not provided.'
          type: object
        workloadIdentityFederationAudience:
          description: 'Workload Identity Federation audience. Required if `serviceAccountKey` is not provided.'
          type: string
        serviceAccountEmail:
          description: 'Optional service account email to impersonate when using Workload Identity Federation.'
          type: string
        baseUrl:
          description: 'Override the provider API base URL (e.g. a self-hosted proxy or third-party gateway)'
          type: string
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`Authorization`) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header. Can't be used with `workloadIdentityFederationAudience`"
          type: boolean
          default: false
      type: object
    ai.provider.credentials.google_gemini_ai_studio:
      title: 'Google Gemini (AI Studio)'
      required:
        - apiKey
      properties:
        apiKey:
          description: 'API key from Google AI Studio'
          type: string
        baseUrl:
          description: 'Override the provider API base URL (e.g. a self-hosted proxy or third-party gateway)'
          type: string
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`x-goog-api-key`) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header"
          type: boolean
          default: false
      type: object
    ai.provider.credentials.mistral_ai:
      title: 'Mistral AI'
      required:
        - apiKey
      properties:
        apiKey:
          description: 'Api key'
          type: string
        baseUrl:
          description: 'Override the provider API base URL (e.g. a self-hosted proxy or third-party gateway)'
          type: string
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`Authorization`, `Accept`) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header"
          type: boolean
          default: false
      type: object
    ai.provider.credentials.anthropic:
      title: Anthropic
      required:
        - apiKey
      properties:
        apiKey:
          description: 'Api key'
          type: string
        baseUrl:
          description: 'Override the provider API base URL (e.g. a self-hosted proxy or third-party gateway)'
          type: string
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`x-api-key`, `anthropic-version`, `accept`) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header"
          type: boolean
          default: false
      type: object
    ai.provider.credentials.x_ai:
      title: xAi
      required:
        - apiKey
      properties:
        apiKey:
          description: 'Api key'
          type: string
        baseUrl:
          description: 'Override the provider API base URL (e.g. a self-hosted proxy or third-party gateway)'
          type: string
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`Authorization`) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header"
          type: boolean
          default: false
      type: object
    ai.provider.credentials.deepseek:
      title: DeepSeek
      required:
        - apiKey
      properties:
        apiKey:
          description: 'API key'
          type: string
        baseUrl:
          description: 'Override the provider API base URL (e.g. a self-hosted proxy or third-party gateway)'
          type: string
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`Authorization`) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header"
          type: boolean
          default: false
      type: object
    ai.provider.credentials.watsonx:
      title: 'IBM Watsonx'
      required:
        - apiKey
        - projectId
        - region
      properties:
        apiKey:
          description: 'API key'
          type: string
        projectId:
          description: 'Project ID'
          type: string
        region:
          description: Region
          type: string
        baseUrl:
          description: 'Override the provider API base URL (e.g. a self-hosted proxy or third-party gateway)'
          type: string
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`Authorization`) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header"
          type: boolean
          default: false
      type: object
    ai.provider.credentials.custom_ai:
      title: 'Custom AI'
      required:
        - identifier
        - key
      properties:
        identifier:
          description: 'Crowdin App identifier'
          type: string
        key:
          description: 'AI Provider module key'
          type: string
      type: object
    ai.provider.credentials.microsoft_foundry:
      title: 'Microsoft Foundry'
      required:
        - deployments
      properties:
        deployments:
          description: 'Deployed models of the Foundry project. Each entry is self-contained — copy its Target URI and API key from the deployment details page in the Foundry portal (deployments of one project may live on different connected Azure resources)'
          type: array
          items:
            required:
              - deploymentName
              - targetUri
              - apiKey
            properties:
              deploymentName:
                description: 'Deployment name (used as the model id)'
                type: string
              targetUri:
                description: 'Deployment Target URI (its path encodes the API the deployment is served by, e.g. /anthropic/v1/messages or /openai/v1/chat/completions)'
                type: string
              apiKey:
                description: 'API key of the Azure resource hosting the deployment'
                type: string
            type: object
          minItems: 1
        headers:
          description: "Custom HTTP headers sent with every request to the provider. Authorization headers are managed by the provider and can't be overridden unless `sendCustomHeadersOnly` is `true`."
          type: object
          additionalProperties:
            type: string
        sendCustomHeadersOnly:
          description: "If `true`, only the headers from `headers` are sent — the headers Crowdin manages for this provider (`api-key` on the OpenAI route, `x-api-key`, `anthropic-version` and `accept` on the Anthropic route) are skipped, so the request must carry everything the endpoint requires. Default is `false`.\n\n__Note:__ Can only be set to `true` when `headers` contains at least one header"
          type: boolean
          default: false
      type: object
    EnterpriseAiProviderCollectionResource:
      description: 'AI Provider Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/EnterpriseAiProviderResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinAiProviderCollectionResource:
      description: 'AI Provider Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinAiProviderResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    AiProviderModelCollectionResource:
      description: 'AI Provider Model Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AiProviderModelResource'
    AiProviderModelResource:
      description: 'AI Provider Model Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiProviderModel'
    EnterpriseAiProviderResource:
      description: 'AI Provider Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/EnterpriseAiProvider'
    CrowdinAiProviderResource:
      description: 'AI Provider Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinAiProvider'
    AiSupportedModelCollectionResource:
      description: 'AI Supported Model Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AiSupportedModelResource'
    AiSupportedModelResource:
      description: 'AI Supported Model Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiSupportedModel'
    AiProviderModel:
      title: 'AiProvider Model'
      properties:
        id:
          type: string
          example: gpt-5.4
        provider:
          type: string
          example: open_ai
          nullable: true
        providerName:
          type: string
          example: OpenAI
          nullable: true
        providerId:
          type: integer
          example: 1
          nullable: true
        contextWindow:
          description: "Context window size in tokens. For custom_ai providers reported by the Marketplace application; for other providers derived from Crowdin's internal catalog. `null` when the value is not available."
          type: integer
          example: 128000
          nullable: true
        maxOutputTokens:
          description: "Maximum output tokens. For custom_ai providers reported by the Marketplace application; for other providers derived from Crowdin's internal catalog. `null` when the value is not available."
          type: integer
          example: 16384
          nullable: true
        supportsStreaming:
          description: "Whether the model supports streaming responses. For custom_ai providers reported by the Marketplace application; for other providers derived from Crowdin's internal catalog. `null` when the value is not available."
          type: boolean
          example: true
          nullable: true
        supportsFunctionCalling:
          description: "Whether the model supports function/tool calling. For custom_ai providers reported by the Marketplace application; for other providers derived from Crowdin's internal catalog. `null` when the value is not available."
          type: boolean
          example: true
          nullable: true
        supportsJsonMode:
          description: "Whether the model supports JSON mode (guaranteed JSON output without schema validation). For custom_ai providers reported by the Marketplace application; for other providers derived from Crowdin's internal catalog. `null` when the value is not available."
          type: boolean
          example: true
          nullable: true
        supportsJsonSchema:
          description: "Whether the model supports structured output via JSON Schema. For custom_ai providers reported by the Marketplace application; for other providers derived from Crowdin's internal catalog. `null` when the value is not available."
          type: boolean
          example: true
          nullable: true
        supportsVision:
          description: "Whether the model accepts image input (vision). For custom_ai providers reported by the Marketplace application; for other providers derived from Crowdin's internal catalog. `null` when the value is not available."
          type: boolean
          example: true
          nullable: true
        isCompatibleWithAiLimit:
          description: 'Whether the model can be used while AI cost limits are in effect.'
          type: boolean
          example: true
      type: object
    AiProvider:
      title: 'AI Provider'
      properties:
        id:
          type: integer
          example: 2
        name:
          type: string
          example: OpenAI
        type:
          type: string
          example: open_ai
        credentials:
          type: object
          nullable: true
          oneOf:
            -
              $ref: '#/components/schemas/ai.provider.credentials.open_ai'
            -
              $ref: '#/components/schemas/ai.provider.credentials.azure_open_ai'
            -
              $ref: '#/components/schemas/ai.provider.credentials.google_gemini'
            -
              $ref: '#/components/schemas/ai.provider.credentials.mistral_ai'
            -
              $ref: '#/components/schemas/ai.provider.credentials.anthropic'
            -
              $ref: '#/components/schemas/ai.provider.credentials.x_ai'
            -
              $ref: '#/components/schemas/ai.provider.credentials.watsonx'
            -
              $ref: '#/components/schemas/ai.provider.credentials.deepseek'
            -
              $ref: '#/components/schemas/ai.provider.credentials.microsoft_foundry'
            -
              $ref: '#/components/schemas/ai.provider.credentials.custom_ai'
        config:
          type: object
        isEnabled:
          type: boolean
          default: true
        useSystemCredentials:
          type: boolean
          default: false
        createdAt:
          format: date-time
          example: '2019-09-20T11:11:05+00:00'
        updatedAt:
          format: date-time
          example: '2019-09-20T12:22:20+00:00'
        promptsCount:
          type: number
          format: integer
          example: '42'
      type: object
    EnterpriseAiProvider:
      title: 'AI Provider'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiProvider'
        -
          properties:
            config:
              $ref: '#/components/schemas/ai.provider.enterprise_configuration'
    CrowdinAiProvider:
      title: 'AI Provider'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiProvider'
        -
          properties:
            config:
              $ref: '#/components/schemas/ai.provider.crowdin_configuration'
    AiSupportedModel:
      description: 'AI Supported Model'
      properties:
        providerId:
          description: 'ID of the configured AI provider'
          type: integer
          example: 1
          nullable: true
        providerType:
          description: "Type of the AI provider (e.g., 'open_ai')"
          type: string
          example: open_ai
        providerName:
          description: 'Human-readable name of the AI provider'
          type: string
          example: OpenAI
        id:
          description: "Model identifier (e.g., 'gpt-5.2')"
          type: string
          example: gpt-5.2
        displayName:
          description: 'Human-readable model name'
          type: string
          example: GPT-5.2
        supportReasoning:
          description: 'Indicates if the model supports reasoning (thinking)'
          type: boolean
          example: true
        intelligence:
          description: 'Intelligence level (approximately, from public data)'
          type: integer
          example: 5
        speed:
          description: 'Speed level (approximately, from public data)'
          type: integer
          example: 3
        price:
          description: 'Pricing per 1M tokens'
          properties:
            input:
              description: 'Price per 1M of input token'
              type: number
              format: float
            output:
              description: 'Price per 1M of output token'
              type: number
              format: float
          type: object
        modalities:
          description: 'Supported input/output modalities'
          properties:
            input:
              properties:
                text:
                  type: boolean
                image:
                  type: boolean
                audio:
                  type: boolean
                  example: false
              type: object
            output:
              properties:
                text:
                  type: boolean
                image:
                  type: boolean
                  example: false
                audio:
                  type: boolean
                  example: false
              type: object
          type: object
        contextWindow:
          description: 'Context window size'
          type: integer
          example: 400000
        maxOutputTokens:
          description: 'Maximum output tokens'
          type: integer
          example: 128000
        knowledgeCutoff:
          description: 'Knowledge cutoff date'
          type: string
          format: date-time
          example: '2025-08-31T00:00:00+00:00'
          nullable: true
        releaseDate:
          description: 'Release date'
          type: string
          format: date-time
          example: '2025-12-11T00:00:00+00:00'
          nullable: true
        features:
          properties:
            streaming:
              type: boolean
            structuredOutput:
              type: boolean
            functionCalling:
              type: boolean
          type: object
      type: object
    AiProxyChatCompletionCreateForm:
      type: object
      oneOf:
        -
          $ref: '#/components/schemas/AiProxyGoogleGeminiChatCompletionCreateForm'
        -
          $ref: '#/components/schemas/AiProxyOtherChatCompletionCreateForm'
    AiProxyGoogleGeminiChatCompletionCreateForm:
      title: 'Google Gemini'
      required:
        - model
      properties:
        model:
          description: 'ID of the model to use.'
          type: string
        stream:
          description: 'Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: `[DONE]` message.'
          type: boolean
      type: object
      additionalProperties: true
    AiProxyOtherChatCompletionCreateForm:
      title: Other
      properties:
        stream:
          description: 'Tokens will be sent as data-only server-sent events as they become available, with the stream terminated by a data: `[DONE]` message.'
          type: boolean
      type: object
      additionalProperties: true
    AiProxyChatCompletionResource:
      description: 'AI Proxy Chat Completion Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              additionalProperties: true
    ai.report.base:
      title: 'Report Period And Filters'
      description: 'The period, filters and file format every AI report accepts. Each report type composes this schema, so a field means the same thing whichever type you ask for'
      required:
        - dateFrom
        - dateTo
      properties:
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2024-01-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601. Part of the period, so a whole day runs from `00:00:00` to `23:59:59`'
          type: string
          format: date-time
          example: '2024-09-27T07:00:14+00:00'
        format:
          description: '`csv` is a header row plus one data row per record; `json` wraps the same records and echoes the filters the report was built with'
          type: string
          default: json
          enum:
            - json
            - csv
          example: json
        projectIds:
          description: 'Count only usage from these projects, ids via [List Projects](#operation/api.projects.getMany). Organization-level AI usage belongs to no project, so it drops out once this filter is set'
          type: array
          items:
            type: integer
            example: 22
        promptIds:
          description: 'Count only usage made through these AI prompts, ids via [List AI Prompts](#operation/api.ai.prompts.getMany)'
          type: array
          items:
            type: integer
            example: 18
        userIds:
          description: 'Count only usage by these users; by default everyone in the organization is included'
          type: array
          items:
            type: integer
            example: 1
      type: object
    TokensUsageRawData:
      title: 'Tokens Usage Raw Data'
      description: 'Every AI call of the period, one record each, with its tokens and cost, for auditing what a specific call spent, or for aggregating the raw numbers your own way. Use `costs-by-users` instead when you only need the totals per user'
      required:
        - type
        - schema
      properties:
        type:
          type: string
          enum:
            - tokens-usage-raw-data
          example: tokens-usage-raw-data
        schema:
          description: 'The generated file holds one record per AI call: when it happened, the project, prompt, provider and model behind it, the user charged for it, and its input tokens, output tokens and cost'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/ai.report.tokens_raw_usage.general'
      type: object
    ai.report.tokens_raw_usage.general:
      title: General
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.report.base'
    CostsByUsers:
      title: 'Costs By Users'
      description: 'AI spend per user for a period, already summed up: for billing AI usage back to a team, watching who nears an AI cost limit, or pulling the AI Usage page figures into your own dashboard. Use `tokens-usage-raw-data` instead when you need every individual AI call rather than per-user totals'
      required:
        - type
        - schema
      properties:
        type:
          type: string
          enum:
            - costs-by-users
          example: costs-by-users
        schema:
          description: 'The generated file holds one row per user: `userId`, `userFullName` and `totalCost`, their AI spend for the period in USD; users who made no AI calls in it are omitted. Pass a calendar day or month with no filters to get exactly the figures the AI Usage page shows'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/ai.report.costs_by_users.general'
      type: object
    ai.report.costs_by_users.general:
      title: General
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ai.report.base'
    AiReportResource:
      description: 'AI Report Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiReportGenerate'
    AiReportGenerate:
      description: 'Generate AI Report Response Model'
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          properties:
            format:
              type: string
              example: json
            reportType:
              type: string
              example: tokens-usage-raw-data
            schema:
              type: object
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2024-01-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2024-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2024-05-23T11:26:54+00:00'
        finishedAt:
          type: string
          format: date-time
          example: '2024-05-23T11:26:54+00:00'
        eta:
          type: string
          example: '1 second'
      type: object
    AiRequestLogExportForm:
      title: 'AI Request Log Export'
      properties:
        format:
          description: 'Format of the exported file. One of: `csv`. Default is `csv`'
          type: string
          default: csv
          enum:
            - csv
        requestId:
          description: 'Filter results to the log entry with this request identifier'
          type: string
          example: 9d3b1c4e-2f3a-4b5c-8d6e-7f8a9b0c1d2e
        projectId:
          description: 'Filter results to requests made in this project. Get via [List Projects](#operation/api.projects.getMany)'
          type: integer
          example: 8
        userId:
          description: 'Filter results to requests attributed to this user. Get via [List Users](#operation/api.users.getMany)'
          type: integer
          example: 42
        aiProviderId:
          description: 'Filter results to requests served by this AI provider. Get via [List AI Providers](#operation/api.ai.providers.getMany)'
          type: integer
          example: 3
        model:
          description: 'Filter results to requests made with this AI model'
          type: string
          example: gpt-5.6-sol
        sourceAction:
          description: 'Filter results to requests produced by this feature or channel'
          type: string
          enum:
            - ai_proxy
            - ai_gateway
            - ai_translate_strings
            - ai_file_translate
            - ai_prompt_completion
            - 'pre_translate:manual'
            - 'pre_translate:workflow'
            - ai_alignment
            - qa_check
            - ai_suggestion
            - advisor
          example: ai_gateway
        promptAction:
          description: 'Filter results to requests made for this prompt action, e.g. `pre_translate`, `qa_check`, `advisor_context_review`, or a `custom:`-prefixed value'
          type: string
          example: qa_check
        statuses:
          description: 'Filter results to requests in any of these statuses'
          type: array
          items:
            type: string
            enum:
              - pending
              - success
              - error
              - timeout
          example:
            - success
            - error
        tokenName:
          description: 'Filter results to requests authenticated with a personal access token of this name'
          type: string
          example: 'Token name'
        oauthClientId:
          description: 'Filter results to requests authenticated by the OAuth application with this `client_id`'
          type: string
          example: gpbccUFxAKZDrLm5Nq8t
        systemCredentials:
          description: 'If `true`, only requests that used system-provided credentials are exported'
          type: boolean
        isAutoTriggered:
          description: 'If `true`, only requests triggered automatically rather than by an interactive user action are exported'
          type: boolean
        createdAfter:
          description: 'Filter results to requests logged after this date, in ISO 8601 format'
          type: string
          format: date-time
          example: '2026-07-01T10:41:33+00:00'
        createdBefore:
          description: 'Filter results to requests logged before this date, in ISO 8601 format'
          type: string
          format: date-time
          example: '2026-07-31T23:59:59+00:00'
      type: object
    AiRequestLogCollectionResource:
      description: 'AI Request Log Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AiRequestLogResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    AiRequestLogExportResource:
      description: 'AI Request Logs Export Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiRequestLogExport'
    AiRequestLogResource:
      description: 'AI Request Log Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiRequestLog'
    AiRequestLogExport:
      description: 'AI Request Logs Export'
      properties:
        identifier:
          description: 'ID of the export, to be passed to the status and download operations'
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          description: 'Export status. The file is ready only once it is `finished`'
          type: string
          enum:
            - created
            - in_progress
            - canceled
            - failed
            - finished
          example: finished
        progress:
          description: 'Share of the matching log entries already written, in percent. Capped at `99` while the file is being built, so `100` is reached only together with `status` `finished`'
          type: integer
          example: 100
        attributes:
          description: 'The export request as it was accepted'
          properties:
            format:
              description: 'Format of the exported file'
              type: string
              enum:
                - csv
              example: csv
            filters:
              description: 'The filters the export was requested with. Empty when the export covers every log entry of the organization'
              type: object
          type: object
        createdAt:
          description: 'Date the export was requested, in ISO 8601 format'
          type: string
          format: date-time
          example: '2026-01-23T11:26:54+00:00'
        updatedAt:
          description: 'Date the export last changed, in ISO 8601 format'
          type: string
          format: date-time
          example: '2026-01-23T11:27:10+00:00'
        startedAt:
          description: 'Date the export started building the file, in ISO 8601 format. `null` while the export is still queued'
          type: string
          format: date-time
          example: '2026-01-23T11:26:56+00:00'
          nullable: true
        finishedAt:
          description: 'Date the export reached a final status, in ISO 8601 format. `null` until then'
          type: string
          format: date-time
          example: '2026-01-23T11:27:10+00:00'
          nullable: true
        eta:
          description: 'Human-readable time the export has been running, measured to `finishedAt` once it is set and to the current time before that. `null` until the export starts'
          type: string
          example: '14 seconds'
          nullable: true
      type: object
    AiRequestLog:
      title: 'AI Request Log'
      properties:
        id:
          description: 'ID of the log entry'
          type: integer
          example: 12345
        requestId:
          description: 'Unique identifier of the request'
          type: string
          example: 9d3b1c4e-2f3a-4b5c-8d6e-7f8a9b0c1d2e
        createdAt:
          description: 'Date the request was logged, in ISO 8601 format'
          type: string
          format: date-time
          example: '2026-01-01T10:00:00+00:00'
        status:
          description: 'Request status. One of: `pending`, `success`, `error`, `timeout`'
          type: string
          enum:
            - pending
            - success
            - error
            - timeout
          example: success
        httpStatus:
          description: 'HTTP status code returned by the AI provider. `null` when no HTTP response was recorded'
          type: integer
          example: 200
          nullable: true
        model:
          description: 'Name of the AI model used for the request'
          type: string
          example: gpt-5.6-sol
        sourceAction:
          description: 'Feature or channel that produced the request'
          type: string
          enum:
            - ai_proxy
            - ai_gateway
            - ai_translate_strings
            - ai_file_translate
            - ai_prompt_completion
            - 'pre_translate:manual'
            - 'pre_translate:workflow'
            - ai_alignment
            - qa_check
            - ai_suggestion
            - advisor
          example: ai_gateway
        promptAction:
          description: 'Prompt action associated with the request. `null` when the request has no associated action'
          type: string
          example: pre_translate
          nullable: true
        systemCredentials:
          description: "Whether the request used system-provided credentials rather than the organization's own"
          type: boolean
        isAutoTriggered:
          description: 'Whether the request was triggered automatically (e.g. by a workflow) rather than by an interactive user action'
          type: boolean
        durationMs:
          description: 'Request duration in milliseconds. `null` while the request is still `pending`'
          type: integer
          example: 842
          nullable: true
        inputTokens:
          description: 'Number of input tokens consumed. `null` until usage is recorded for the request'
          type: integer
          example: 512
          nullable: true
        outputTokens:
          description: 'Number of output tokens generated. `null` until usage is recorded for the request'
          type: integer
          example: 128
          nullable: true
        totalCost:
          description: 'Cost of the request in USD as recorded at billing time; null when no price is known for the model'
          type: number
          format: float
          example: 0.012345
          nullable: true
        userId:
          description: 'The user attributed to the request; null for system/automated requests'
          type: integer
          example: 42
          nullable: true
        projectId:
          description: 'ID of the project the request was made in. `null` for requests not tied to a specific project'
          type: integer
          example: 8
          nullable: true
        promptId:
          description: "ID of the AI prompt used for the request. `null` when the request didn't use a saved prompt"
          type: integer
          example: 5
          nullable: true
        aiProviderId:
          description: 'ID of the AI provider used for the request'
          type: integer
          example: 3
        tokenName:
          description: 'Name of the personal access token used for authentication, if the request was token-authenticated'
          type: string
          example: 'Token name'
          nullable: true
        oauthClientId:
          description: 'OAuth `client_id` of the application that authenticated the request. `null` when the request was not authenticated via an OAuth application.'
          type: string
          example: gpbccUFxAKZDrLm5Nq8t
          nullable: true
        oauthClientName:
          description: 'Display name of the OAuth application, resolved from `oauthClientId`. `null` when not app-authenticated or the application no longer exists.'
          type: string
          example: 'AI Pipeline'
          nullable: true
        ip:
          description: 'IP address the request originated from. `null` for automated requests with no HTTP origin'
          type: string
          example: 203.0.113.42
          nullable: true
        userAgent:
          description: 'User agent of the client that made the request. `null` when not recorded'
          type: string
          example: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
          nullable: true
        error:
          description: 'Error message, present only for failed requests'
          type: string
          example: null
          nullable: true
      type: object
    AiSettingsPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/AiSettingsOperation'
    AiSettingsOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - remove
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>. The `/perUserOverrides/{userId}` and `/perUserOverrides/{userId}/*` paths accept any positive integer for `{userId}`. Creating a new override requires `{userId}` to be a project member; this requirement does not apply when editing or removing an existing one. The `remove` operation is supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and for `/perUserOverrides/{userId}/*` field paths (removes that field; the resulting override is re-validated).'
          type: string
          format: json-pointer
          enum:
            - /preTranslationAiPromptId
            - /editorSuggestionAiPromptId
            - /qaCheckActionAiPromptId
            - /contextReviewAiPromptId
            - /dailyCostLimit
            - /monthlyCostLimit
            - /userDailyCostLimit
            - /userMonthlyCostLimit
            - '/perUserOverrides/{userId}'
            - '/perUserOverrides/{userId}/costLimitMode'
            - '/perUserOverrides/{userId}/dailyCostLimit'
            - '/perUserOverrides/{userId}/monthlyCostLimit'
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/AiSettingsOperationReplace'
          remove: '#/components/schemas/AiSettingsOperationRemove'
          test: '#/components/schemas/AiSettingsOperationTest'
    AiSettingsOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiSettingsOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: integer
                -
                  type: number
                  format: float
                -
                  type: string
                -
                  nullable: true
    AiSettingsOperationRemove:
      description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.2). Supported for the `/perUserOverrides/{userId}` path (removes the entire per-user override) and `/perUserOverrides/{userId}/*` field paths (removes that field). The `costLimitMode` field cannot be removed as the override always requires it.'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiSettingsOperation'
    AiSettingsOperationTest:
      description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiSettingsOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: integer
                -
                  type: number
                  format: float
                -
                  type: string
                -
                  nullable: true
    CrowdinAiSettingsResource:
      description: 'AI Settings Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinAiSettings'
    AiSettings:
      title: 'AI Settings'
      properties:
        preTranslationAiPromptId:
          type: integer
          example: 2
        editorSuggestionAiPromptId:
          type: integer
          example: 5
        qaCheckActionAiPromptId:
          type: integer
          example: 8
          nullable: true
        contextReviewAiPromptId:
          type: integer
          example: 11
          nullable: true
        dailyCostLimit:
          description: 'Maximum total AI cost the organization can spend per day. `null` means no daily limit.'
          type: number
          format: float
          example: 100
          nullable: true
        monthlyCostLimit:
          description: 'Maximum total AI cost the organization can spend per month. `null` means no monthly limit.'
          type: number
          format: float
          example: 2000
          nullable: true
        userDailyCostLimit:
          description: 'Default maximum AI cost a single user can spend per day. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user daily limit.'
          type: number
          format: float
          example: 10
          nullable: true
        userMonthlyCostLimit:
          description: 'Default maximum AI cost a single user can spend per month. Applies to every user unless overridden in `perUserOverrides`. `null` means no per-user monthly limit.'
          type: number
          format: float
          example: 200
          nullable: true
        isLimitingActive:
          description: 'Whether any AI cost limit is currently in force for the organization: an organization-wide limit, a default per-user limit, or at least one entry in `perUserOverrides` that is not unlimited.'
          type: boolean
          example: true
        perUserOverrides:
          description: 'Per-user cost limit overrides that take precedence over `userDailyCostLimit` and `userMonthlyCostLimit`.'
          type: array
          items:
            $ref: '#/components/schemas/AiUserCostLimit'
      type: object
    AiUserCostLimit:
      title: 'AI User Cost Limit'
      properties:
        userId:
          description: 'ID of the user this cost limit override applies to'
          type: integer
          example: 123
        costLimitMode:
          description: "User AI cost limit mode\n\nValues available:\n- custom - Custom daily and monthly cost limits are applied\n- blocked - User is blocked from using AI\n- unlimited - User has no AI cost limit"
          type: string
          enum:
            - custom
            - blocked
            - unlimited
          example: custom
        dailyCostLimit:
          description: 'Maximum AI cost this user can spend per day. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
          type: number
          format: float
          example: 5
          nullable: true
        monthlyCostLimit:
          description: 'Maximum AI cost this user can spend per month. Applies when `costLimitMode` is `custom`. `null` for `blocked` and `unlimited` modes.'
          type: number
          format: float
          example: 100
          nullable: true
        createdAt:
          type: string
          format: date-time
          example: '2026-05-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2026-05-23T11:26:54+00:00'
      type: object
    CrowdinAiSettings:
      title: 'AI Settings'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiSettings'
    AiTranslateFormBase:
      required:
        - strings
        - targetLanguageId
      properties:
        strings:
          description: 'Array of strings to translate (max 500 strings, each max 10000 characters)'
          type: array
          items:
            type: string
            maxLength: 10000
            example: 'Some text to translate!'
          maxItems: 500
          minItems: 1
        sourceLanguageId:
          description: 'Source Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany). If not specified, auto-detection will be used.'
          type: string
          example: en
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: uk
        tmIds:
          description: 'Array of Translation Memory Identifiers. Get via [List TMs](#operation/api.tms.getMany)'
          type: array
          items:
            type: integer
            example: 123
        glossaryIds:
          description: 'Array of Glossary Identifiers. Get via [List Glossaries](#operation/api.glossaries.getMany)'
          type: array
          items:
            type: integer
            example: 456
        styleGuideIds:
          description: 'Array of Style Guide Identifiers. Get via [List Style Guides](#operation/api.style-guides.getMany)'
          type: array
          items:
            type: integer
            example: 654
        instructions:
          description: 'Custom instructions for translation'
          type: array
          items:
            type: string
            example: 'Keep a formal tone'
        attachmentIds:
          description: "Storage IDs of images to pass to AI as attachments (max 10). Get via [List Storages](#operation/api.storages.getMany)\n\nOnly image files are allowed:\n * jpeg\n * jpg\n * png\n * gif\n * webp"
          type: array
          format: int64
          items:
            type: integer
            example: 123
          maxItems: 10
      type: object
    AiTranslateByPromptForm:
      required:
        - aiPromptId
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiTranslateFormBase'
        -
          properties:
            aiPromptId:
              description: "Pre-Translation Prompt Identifier. Get via [List Prompts](#operation/api.ai.prompts.getMany)\n\n__Note:__ Can't be used with `aiProviderId` or `aiModelId` in same request"
              type: integer
              example: 789
    AiTranslateByProviderModelForm:
      required:
        - aiProviderId
        - aiModelId
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AiTranslateFormBase'
        -
          properties:
            aiProviderId:
              description: "AI Provider Identifier. Get via [List AI Providers](#operation/api.ai.providers.getMany)\n\n__Note:__ Must be used together with `aiModelId`. Can't be used with `aiPromptId` in same request"
              type: integer
              example: 12
            aiModelId:
              description: "AI Model ID. Get via [List AI Provider Models](#operation/api.ai.providers.models.getMany)\n\n__Note:__ Must be used together with `aiProviderId`. Can't be used with `aiPromptId` in same request"
              type: string
              example: gpt-4.1
    AiTranslateForm:
      oneOf:
        -
          $ref: '#/components/schemas/AiTranslateByPromptForm'
        -
          $ref: '#/components/schemas/AiTranslateByProviderModelForm'
    AiTranslateResource:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiTranslateResponseModel'
    AiTranslateResponseModel:
      properties:
        sourceLanguageId:
          description: 'Source language identifier'
          type: string
          example: en
        targetLanguageId:
          description: 'Target language identifier'
          type: string
          example: uk
        translations:
          description: 'Translated strings for the target language'
          type: array
          items:
            type: string
          example:
            - 'Перекладений текст 1'
            - 'Перекладений текст 2'
      type: object
    AiUsageMemberCollectionResource:
      description: 'AI Usage Member Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AiUsageMemberResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    AiUsageMemberResource:
      description: 'AI Usage Member Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AiUsageMember'
    AiUsageMember:
      title: 'AI Usage Member'
      properties:
        user:
          description: 'Organization member the usage and limits below belong to'
          properties:
            id:
              description: 'User ID'
              type: integer
              example: 12
            username:
              description: 'User username'
              type: string
              example: john_smith
            fullName:
              description: 'User full name'
              type: string
              example: 'John Smith'
            avatarUrl:
              description: 'User avatar URL'
              type: string
              example: ''
          type: object
        dailyCostLimit:
          description: 'Effective daily AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
          type: number
          format: float
          example: 2
          nullable: true
        dailyCostSpent:
          description: 'AI cost spent in the current day, in USD'
          type: number
          format: float
          example: 0.26
        dailyResetAt:
          description: 'Date and time when the daily cost limit resets'
          type: string
          format: date-time
          example: '2026-09-12T00:00:00+00:00'
        monthlyCostLimit:
          description: 'Effective monthly AI cost limit in USD. `null` means no limit, `0` means AI usage is blocked for the user. When the organization-wide limit is the lower one, it is shared by all members'
          type: number
          format: float
          example: null
          nullable: true
        monthlyCostSpent:
          description: 'AI cost spent in the current month, in USD'
          type: number
          format: float
          example: 6.93
        monthlyResetAt:
          description: 'Date and time when the monthly cost limit resets'
          type: string
          format: date-time
          example: '2026-10-01T00:00:00+00:00'
      type: object
    ApplicationConsentPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/ApplicationConsentOperation'
    ApplicationConsentOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer identifying the field to replace. Supported paths: `/status`, `/scopes`.'
          type: string
          enum:
            - /status
            - /scopes
        value:
          description: 'The value to set at `path`. A status string (`granted`/`denied`) for `/status`, or an array of scope identifiers for `/scopes`.'
          anyOf:
            -
              type: string
              enum:
                - granted
                - denied
            -
              type: array
              items:
                type: string
      type: object
    ApplicationInstallationPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/ApplicationInstallationOperation'
    ApplicationInstallationOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a> identifying the field to replace.<br><br>Supported paths:<br>• `/permissions` and `/modules/{moduleKey}/permissions` (where `{moduleKey}` is a module key from the manifest) - available for any installation.<br>• `/manifest` - the full manifest content, available only for applications installed from manifest content (not from a manifest URL). A single request may combine a `/manifest` operation with permission operations; the manifest is applied first, so permissions can target modules the new manifest introduces.'
          type: string
          format: json-pointer
        value:
          description: 'The value to set at `path`. Its type depends on the `path` being replaced:<br>• `/manifest` - a manifest content object, the same shape as the `manifest` field of Install Application (`identifier` is ignored - the server keeps the existing one).<br>• `/permissions` and `/modules/{moduleKey}/permissions` - a permissions object (see `ApplicationInstallationReplaceValue`).'
          anyOf:
            -
              type: string
            -
              type: array
              items:
                type: string
            -
              type: object
            -
              $ref: '#/components/schemas/ApplicationInstallationReplaceValue'
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/ApplicationInstallationOperationReplace'
    ApplicationInstallationReplaceValueUser:
      properties:
        value:
          description: "Select the users that will be able to use the app:\n\n     * `owner` - Only organization admins (Enterprise) / All project members\n     * `managers` - Organization admins, project managers and developers\n     * `all` - All users in the organization projects\n     * `guests` - All users, including guests (unauthenticated users)\n     * `restricted` - Selected users\n"
          type: string
          enum:
            - owner
            - managers
            - all
            - guests
            - restricted
          example: managers
        ids:
          description: 'Set the user ids or empty array'
          type: array
          items:
            type: integer
          example: []
      type: object
    ApplicationInstallationReplaceValueProject:
      description: 'Available only for application permissions'
      properties:
        value:
          description: "Select the projects where users will be able to use the app\n\n     * `own` - All projects (Enterprise) / Projects you own\n     * `restricted` - Selected projects\n    "
          type: string
          enum:
            - own
            - restricted
          example: restricted
        ids:
          type: array
          items:
            type: integer
            example: 1
      type: object
    ApplicationInstallationReplaceValue:
      properties:
        user:
          $ref: '#/components/schemas/ApplicationInstallationReplaceValueUser'
        project:
          $ref: '#/components/schemas/ApplicationInstallationReplaceValueProject'
      type: object
    ApplicationInstallationOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ApplicationInstallationOperation'
        -
          properties:
            value:
              description: 'The value to set at `path`. Its type depends on the `path` being replaced:<br>• `/manifest` - a manifest content object, the same shape as the `manifest` field of Install Application (`identifier` is ignored - the server keeps the existing one).<br>• `/permissions` and `/modules/{moduleKey}/permissions` - a permissions object (see `ApplicationInstallationReplaceValue`).'
              anyOf:
                -
                  type: string
                -
                  type: array
                  items: { type: string }
                -
                  type: object
                -
                  $ref: '#/components/schemas/ApplicationInstallationReplaceValue'
    ApplicationKvRecordData:
      title: 'Application KV Record Data'
      description: 'Any JSON value except `null` - a string, number, boolean, array or object. Up to 245760 bytes (240 KiB) when serialized'
      oneOf:
        -
          type: string
        -
          type: number
        -
          type: boolean
        -
          type: object
        -
          type: array
          items: {  }
    ApplicationKvRecordPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/ApplicationKvRecordOperation'
    ApplicationKvRecordOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer identifying the field to replace. Supported paths: `/value`, `/ttl`. `/key` and `/secret` are immutable - delete the record and create a new one instead.'
          type: string
          enum:
            - /value
            - /ttl
        value:
          description: 'The value to set at `path`. Any JSON value (string, number, boolean, array or object) for `/value`; a TTL in seconds (60-31536000) or `null` to remove the TTL for `/ttl`.'
          anyOf:
            -
              $ref: '#/components/schemas/ApplicationKvRecordData'
            -
              type: integer
              nullable: true
      type: object
    IntegrationCrowdinFiles:
      type: array
      items:
        anyOf:
          -
            properties:
              id:
                type: string
              name:
                type: string
            type: object
          -
            properties:
              id:
                type: string
              parentId:
                type: string
              name:
                type: string
              type:
                type: string
            type: object
      example:
        -
          id: 1
          name: 'Landing pages'
        -
          id: 2
          parentId: 1
          name: 'Home Page'
          type: json
      x-doc-sections:
        - file-based
    IntegrationIntegrationFiles:
      type: array
      items:
        anyOf:
          -
            properties:
              id:
                type: string
              name:
                type: string
              parent_id:
                type: string
              node_type:
                type: string
            type: object
          -
            properties:
              name:
                type: string
              id:
                type: string
              parentId:
                type: string
              type:
                type: string
              node_type:
                type: string
            type: object
      example:
        -
          id: 1
          name: 'Landing pages'
          parent_id: 0
          node_type: 0
        -
          name: Intro
          id: 73291251883
          parentId: 'Landing pages'
          type: json
          node_type: 1
      x-doc-sections:
        - file-based
    IntegrationUpdateCrowdinFiles:
      title: 'Update files'
      required:
        - projectId
        - files
      properties:
        projectId:
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          type: integer
          example: 12
        files:
          $ref: '#/components/schemas/IntegrationIntegrationFiles'
        uploadTranslations:
          description: 'Upload exist translation from integration'
          type: boolean
          default: false
          example: true
      type: object
      x-doc-sections:
        - file-based
    IntegrationFileLanguagePair:
      title: 'Update files'
      required:
        - projectId
        - files
      properties:
        projectId:
          description: 'Project Id. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          type: integer
          example: 12
        files:
          description: "- **{fileId}** _(integer)_: Crowdin File Id. Get via [List Crowdin Files](#operation/api.applications.integrations.crowdin.files)\n- **[{languageCode}]** _(array of strings)_: List Of  Language Id. Get via [List Supported Languages](https://support.crowdin.com/developer/api/v2/#tag/Languages/operation/api.languages.getMany)\n\n**Example:**\n  ```json\n  {\n   102: [\"de\", \"fr\"],\n   999: [\"uk\"]\n  }\n  ```\n"
          type: object
          example:
            '102':
              - de
              - fr
            '999':
              - uk
      type: object
      x-doc-sections:
        - file-based
    IntegrationUpdateResponse:
      properties:
        jobId:
          type: string
          example: 067da473-fc0b-43e3-b0a2-09d26af130c1
      type: object
      x-doc-sections:
        - file-based
    IntegrationSettingsData:
      type: object
      example:
        schedule: 0
        condition: 0
      additionalProperties:
        type: string
      x-doc-sections:
        - file-based
    IntegrationUpdateSettingsData:
      title: 'Update Application Settings'
      required:
        - projectId
        - config
      properties:
        projectId:
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          type: integer
          example: 12
        config:
          $ref: '#/components/schemas/IntegrationSettingsData'
      type: object
      x-doc-sections:
        - file-based
    IntegrationSettingsResponse:
      $ref: '#/components/schemas/IntegrationSettingsData'
    IntegrationCrowdinSyncSettingsResponse:
      type: object
      example:
        '102':
          - uk
          - de
      additionalProperties:
        type: array
        items:
          type: string
      x-doc-sections:
        - file-based
    IntegrationIntegrationSyncSettingsResponse:
      type: array
      items:
        properties:
          name:
            type: string
          id:
            type: string
          parentId:
            type: string
          type:
            type: string
          node_type:
            type: string
          schedule:
            type: boolean
        type: object
      x-doc-sections:
        - file-based
    IntegrationUpdateSyncSettingsData:
      title: 'Update Application Sync Settings'
      required:
        - projectId
        - provider
        - files
      properties:
        projectId:
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          type: integer
          example: 12
        provider:
          type: string
          enum:
            - crowdin
            - integration
        files:
          oneOf:
            -
              $ref: '#/components/schemas/IntegrationCrowdinSyncSettingsResponse'
            -
              $ref: '#/components/schemas/IntegrationIntegrationSyncSettingsResponse'
      type: object
      x-doc-sections:
        - file-based
    IntegrationFileProgress:
      title: 'Language Translation Progress'
      description: 'Language Translation File Progress Response Model'
      properties:
        languageId:
          type: string
          example: af
        eTag:
          type: string
          example: fd0ea167420ef1687fd16635b9fb67a3
        words:
          properties:
            total:
              type: integer
              example: 7249
            translated:
              type: integer
              example: 3651
            approved:
              type: integer
              example: 3637
          type: object
        phrases:
          properties:
            total:
              type: integer
              example: 3041
            translated:
              type: integer
              example: 2631
            approved:
              type: integer
              example: 2622
          type: object
        translationProgress:
          type: integer
          example: 86
        approvalProgress:
          type: integer
          example: 86
      type: object
      x-doc-sections:
        - file-based
    IntegrationLoginFieldsResponse:
      type: array
      items:
        properties:
          key:
            type: string
            example: apiKey
          name:
            type: string
            example: 'Service API key'
        type: object
      example:
        -
          key: email
          name: 'User email'
        -
          key: password
          name: 'User password'
      x-doc-sections:
        - file-based
    IntegrationLogin:
      title: Login
      required:
        - projectId
        - credentials
      properties:
        projectId:
          description: 'Project Identifier. Get via [List Projects](https://developer.crowdin.com/api/v2/#operation/api.projects.getMany)'
          type: integer
          example: 12
        credentials:
          $ref: '#/components/schemas/IntegrationLoginData'
      type: object
      x-doc-sections:
        - file-based
    IntegrationLoginData:
      description: 'Login Form Fields. Get via [Integration Login Form Fields](#operation/api.applications.integrations.integration.fields)'
      type: object
      example:
        email: user@crowdin.com
        password: password
      x-doc-sections:
        - file-based
    IntegrationJob:
      properties:
        id:
          description: 'The Unique Identifier For The Job.'
          type: string
          example: 067da473-fc0b-43e3-b0a2-09d26af130c1
        progress:
          description: 'The Progress Of The Job.'
          type: integer
          example: 94
        status:
          description: 'The Current Status Of The Job.'
          type: string
          example: inProgress
        title:
          description: 'The Title Of The Job.'
          type: string
          example: 'Sync files to Crowdin'
      type: object
      x-doc-sections:
        - file-based
    IntegrationJobResponse:
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/IntegrationJob'
      type: object
      x-doc-sections:
        - file-based
    ApplicationConsentCreateForm:
      required:
        - identifier
        - installedBy
        - status
      properties:
        identifier:
          description: 'Application identifier the decision applies to - the same `identifier` as in [List Application Installations](#operation/api.applications.installations.getMany)'
          type: string
          example: example-application
        installedBy:
          description: 'Identifier of the user who installed the application - the same as `installedBy.id` in [List Application Installations](#operation/api.applications.installations.getMany). Together with `identifier` it pins the decision to a specific installation'
          type: integer
          example: 12
        status:
          description: 'The decision: whether the application may act on behalf of the current user'
          type: string
          enum:
            - granted
            - denied
          example: granted
        scopes:
          description: 'Scopes the decision was made for - a snapshot of the application scopes at decision time.<br><br>Available scopes: `*`, `language`, `user`, `team`, `notification`, `custom_language`, `group`, `tm`, `glossary`, `style-guide`, `mt`, `ai`, `ai.provider`, `ai.prompt`, `ai.proxy`, `ai.translate`, `automation`, `automation.rule`, `automation.rule.execution`, `webhook`, `project`, `project.settings`, `project.member`, `project.status`, `project.status.issue`, `project.status.progress`, `project.status.qa-check`, `project.source`, `project.source.file`, `project.source.string`, `project.translation`, `project.screenshot`, `project.webhook`, `project.task`, `project.dictionary`, `project.report`, `project.advisor`, `client`, `vendor`, `field`, `security-log`, `application`, `application.installation`, `application.proxy`, `application.consent`, `application.storage`, `organization`, `custom-spellchecker`, `external-qa-check`.<br><br>Each scope supports `:read` and `:write` modifiers (e.g. `project:read`, `project:write`); without a modifier the scope grants both'
          type: array
          items:
            type: string
          example:
            - project
            - tm
      type: object
    ApplicationInstallationApplyForm:
      required:
        - manifestHash
      properties:
        manifestHash:
          description: 'Hash of the manifest version the admin reviewed (from GET /update response). Must match the currently cached version, otherwise the apply request fails with 409.'
          type: string
          example: 5536b952d54e0846b6fd69217f6eb7cfdcfba41774732926e1f0c1a158a6e405
      type: object
    ApplicationInstallationBundleCreateForm:
      required:
        - storageId
      properties:
        storageId:
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).<br><br>Storage file must be a ZIP archive containing the application bundle'
          type: integer
          example: 12
      type: object
    ApplicationInstallationCreateForm:
      title: 'Install an application from a manifest URL'
      description: 'Install an application by fetching its manifest from a URL.'
      required:
        - url
      properties:
        url:
          description: 'Manifest URL'
          type: string
          example: 'https://localhost.dev/crowdin.json'
        permissions:
          $ref: '#/components/schemas/applications.installations.permissions'
        modules:
          $ref: '#/components/schemas/applications.installations.modules'
        assignAgent:
          description: 'Assign Agent as a manager to all existing projects'
          type: boolean
          default: false
      type: object
    ApplicationManifest:
      title: 'Application manifest content'
      description: 'The inline manifest that declares the app - the same document install-from-URL fetches from `url`. Supported only for serverless apps - apps that run entirely in the browser with no backend (no `baseUrl`).'
      required:
        - name
        - modules
      properties:
        name:
          description: 'Display name of the application'
          type: string
          example: 'My App'
        description:
          description: 'Short description of what the application does'
          type: string
        logo:
          description: 'Relative URL (within the application bundle) of the application logo'
          type: string
        scopes:
          description: 'OAuth scopes granted to the app for host-proxied Crowdin API calls.<br><br>Available scopes: `*`, `language`, `user`, `team`, `notification`, `custom_language`, `group`, `tm`, `glossary`, `style-guide`, `mt`, `ai`, `ai.provider`, `ai.prompt`, `ai.proxy`, `ai.translate`, `automation`, `automation.rule`, `automation.rule.execution`, `webhook`, `project`, `project.settings`, `project.member`, `project.status`, `project.status.issue`, `project.status.progress`, `project.status.qa-check`, `project.source`, `project.source.file`, `project.source.string`, `project.translation`, `project.screenshot`, `project.webhook`, `project.task`, `project.dictionary`, `project.report`, `project.advisor`, `client`, `vendor`, `field`, `security-log`, `application`, `application.installation`, `application.proxy`, `application.consent`, `application.storage`, `organization`, `custom-spellchecker`, `external-qa-check`.<br><br>Each scope supports `:read` and `:write` modifiers (e.g. `project:read`, `project:write`); without a modifier the scope grants both.'
          type: array
          items:
            type: string
        stringBasedAvailable:
          description: 'Whether the app is offered in string-based projects (in addition to file-based projects).'
          type: boolean
          default: false
        modules:
          description: 'UI module definitions: an object whose keys are UI module types and whose values are arrays of module definitions.<br><br>`url` is not allowed (these apps have no `baseUrl`).<br><br>Allowed module types: `editor-right-panel`, `editor-translations-panel`, `editor-asset-panel`, `editor-background-worker`, `editor-button`, `project-tools`, `project-menu`, `project-menu-crowdsource`, `project-reports`, `project-integrations`, `profile-resources-menu`, `profile-settings-menu`, `organization-menu`, `organization-settings-menu`, `organization-menu-crowdsource`, `modal`, `chat`, `context-menu`, `navbar-extension`.<br><br>For `context-menu` modules only the `modal` and `redirect` option types are supported (`new_tab` needs a page outside the app bundle, which serverless apps cannot serve).<br><br>An `editor-button` must point (`options.module`) at an existing module of the type its `options.type` opens: `panel` opens `editor-right-panel`, `modal` opens `modal`, `event` opens `editor-right-panel` or `editor-background-worker`. Its key must not reuse a key of those module types, and it must share at least one `environments` entry with its target.'
          type: object
          additionalProperties:
            type: array
            items:
              $ref: '#/components/schemas/ApplicationManifestModuleDefinition'
        default_permissions:
          $ref: '#/components/schemas/ApplicationDefaultPermissions'
        bundle:
          $ref: '#/components/schemas/ApplicationBundle'
      type: object
    ApplicationInstallationCreateFromManifestForm:
      title: 'Install an application from manifest content'
      description: 'Install an application by sending its manifest content inline (instead of a hosted manifest URL). Symmetric to the URL form: `manifest` replaces `url`, while `permissions` and per-module `modules` permissions stay at the root. The server always generates an opaque identifier; clients cannot supply one.'
      required:
        - manifest
      properties:
        manifest:
          $ref: '#/components/schemas/ApplicationManifest'
        permissions:
          $ref: '#/components/schemas/applications.installations.permissions'
        modules:
          $ref: '#/components/schemas/applications.installations.modules'
      type: object
    ApplicationManifestModuleDefinition:
      title: 'Application module definition'
      description: 'A UI module definition for an application.'
      required:
        - key
        - name
      properties:
        key:
          description: 'Unique module key within the app (3-255 chars; Latin letters, digits, `-` and `_` only)'
          type: string
          example: my-module
        name:
          description: 'Display name of the module'
          type: string
          example: 'My Module'
        logo:
          description: 'Relative URL (within the application bundle) of the module logo. Defaults to the application logo when omitted'
          type: string
        description:
          description: 'Short description of the module'
          type: string
        environments:
          description: 'Crowdin editions the module is enabled in: `crowdin`, `crowdin-enterprise`. When omitted, the module is enabled in every edition its module type supports. Some module types are edition-specific (for example, `organization-menu` is Crowdin Enterprise only and `profile-settings-menu` is Crowdin only); values outside the supported editions are ignored.'
          type: array
          items:
            type: string
            enum:
              - crowdin
              - crowdin-enterprise
        permissions:
          $ref: '#/components/schemas/applications.installations.modules.module.permissions'
      type: object
    ApplicationDefaultPermissions:
      title: 'Application default permissions'
      properties:
        user:
          description: 'Which users the app is available to by default'
          type: string
          enum:
            - owner
            - managers
            - all
            - guests
          example: owner
        project:
          description: 'Which projects the app is available in by default'
          type: string
          enum:
            - own
            - restricted
          example: own
      type: object
    ApplicationBundle:
      title: 'Application bundle'
      description: 'Where the app is loaded from. Either Crowdin hosts the app in its own storage (`internal`) or the app is served from an external URL such as a local dev server (`external`).'
      discriminator:
        propertyName: mode
        mapping:
          internal: '#/components/schemas/ApplicationBundleInternal'
          external: '#/components/schemas/ApplicationBundleExternal'
      oneOf:
        -
          $ref: '#/components/schemas/ApplicationBundleInternal'
        -
          $ref: '#/components/schemas/ApplicationBundleExternal'
    ApplicationBundleInternal:
      title: 'Internal application bundle'
      required:
        - mode
      properties:
        mode:
          description: 'The app is hosted by Crowdin in its own storage (no external URL).'
          type: string
          enum:
            - internal
          example: internal
      type: object
    ApplicationBundleExternal:
      title: 'External application bundle'
      required:
        - mode
        - url
      properties:
        mode:
          description: 'The app is served from an external URL (e.g. a local dev server).'
          type: string
          enum:
            - external
          example: external
        url:
          description: 'URL the app is served from; for local development this is your dev server, e.g. `http://localhost:8080/`.'
          type: string
      type: object
    ApplicationKvRecordCreateForm:
      required:
        - key
        - value
      properties:
        key:
          description: "Key of the record. 1-500 characters from `a-z`, `A-Z`, `0-9`, `:`, `.`, `_`, `-`. Unique within the installation, case-sensitive and immutable.\n\nKeys with no reserved prefix are shared with everyone who can access the application. Reserved prefixes narrow visibility:\n * `user:{userId}:` - the user's own private records\n * `module:{moduleKey}:` - visible only to users with access to that module (`{moduleKey}` is a module key from the application manifest)"
          type: string
          example: settings.theme
        value:
          $ref: '#/components/schemas/ApplicationKvRecordData'
        secret:
          description: 'If `true`, the value is encrypted at rest. Immutable - to change it, delete the record and create a new one. Default is `false`'
          type: boolean
          default: false
        ttl:
          description: 'Time to live in seconds (60-31536000, inclusive). Omit for a permanent record'
          type: integer
          maximum: 31536000
          minimum: 60
          nullable: true
      type: object
    ApplicationConsentCollectionResource:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ApplicationConsentResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ApplicationConsentResource:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ApplicationConsent'
    ApplicationInstallationCollectionResource:
      description: 'Application Installation Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ApplicationInstallationResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ApplicationInstallationResource:
      description: 'Application Installation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ApplicationInstallationResponseModel'
    ApplicationInstallationUpdateResource:
      description: 'Application Installation Update Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ApplicationInstallationUpdateResponseModel'
    ApplicationKvRecordCollectionResource:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ApplicationKvRecordResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ApplicationKvRecordResource:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ApplicationKvRecord'
    AdvisorInspectorModule:
      title: 'Advisor Inspector Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
            severity:
              type: string
              enum:
                - high
                - medium
                - low
            category:
              type: string
              enum:
                - context
            refreshPolicy:
              type: string
              enum:
                - hourly
                - daily
            title:
              type: string
            summary:
              description: 'Short one-line summary shown on the inspector card chrome below the title.'
              type: string
              nullable: true
            recheckUrl:
              type: string
              nullable: true
    AiPromptProviderModule:
      title: 'AI Prompt Provider Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            scopes:
              type: object
              nullable: true
            configuratorIframe:
              type: object
              nullable: true
            compileUrl:
              type: string
              example: /compile
    AiProviderModule:
      title: 'AI Provider Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            chatCompletionsUrl:
              type: string
              example: /chat/completions
            modelsUrl:
              type: string
              example: /models
            scopes:
              type: object
            iframe:
              type: object
    AnnouncementModule:
      title: 'Announcement Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            name:
              type: string
              example: 'Header announcements'
            placement:
              description: 'Where the module is allowed to place its announcements'
              type: string
              enum:
                - header-alert
                - glossary
              example: header-alert
    ApplicationConsent:
      title: 'Application Consent'
      description: "The current user's decision on whether an application may act on their behalf"
      properties:
        id:
          type: integer
          example: 12
        installedBy:
          description: 'The user who installed the application the decision applies to'
          properties:
            id:
              type: integer
              example: 12
            username:
              type: string
              example: john_smith
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
          nullable: true
        identifier:
          description: 'Application identifier the decision applies to'
          type: string
          example: example-application
        name:
          description: 'Name of the application the decision applies to. `null` when the application is no longer installed'
          type: string
          example: 'My App'
          nullable: true
        status:
          description: 'Whether the application may act on behalf of the current user'
          type: string
          enum:
            - granted
            - denied
          example: granted
        scopes:
          description: 'Scopes the decision was made for - a snapshot of the application scopes at decision time'
          type: array
          items:
            type: string
          example:
            - project
            - tm
        createdAt:
          type: string
          format: date-time
          example: '2026-07-24T10:00:00+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2026-07-24T10:00:00+00:00'
      type: object
    ApplicationInstallationResponseModel:
      title: 'Application Installation'
      description: 'Application Installation Response Model'
      properties:
        identifier:
          type: string
          example: example-application
        name:
          type: string
          example: 'Application name'
        installedBy:
          properties:
            id:
              type: integer
              example: 12
            username:
              type: string
              example: john_smith
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
          nullable: true
        description:
          type: string
          example: 'Application description'
          nullable: true
        logo:
          type: string
          example: /resources/images/logo.png
        logoUrl:
          description: 'Absolute URL the logo is served from.'
          type: string
          example: 'https://localhost.dev/resources/images/logo.png'
          nullable: true
        agent:
          properties:
            id:
              type: integer
              example: 12
            username:
              type: string
              example: john_smith
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
          nullable: true
        baseUrl:
          type: string
          example: 'https://localhost.dev'
          nullable: true
        manifestUrl:
          type: string
          example: 'https://localhost.dev'
          nullable: true
        manifest:
          description: 'The manifest of the installation as authored - the application fields and module definitions as they were installed or last updated, without server-resolved values. `null` for applications installed from a manifest URL'
          type: object
          nullable: true
        createdAt:
          type: string
          format: date-time
          example: '2019-09-20T11:34:40+00:00'
          nullable: true
        manifestUpdatedAt:
          description: "When the installation's manifest was last synced"
          type: string
          format: date-time
          example: '2019-09-20T11:34:40+00:00'
          nullable: true
        isManifestOutdated:
          description: 'Whether the installed manifest is outdated compared to the latest available manifest'
          type: boolean
          example: false
        modules:
          type: array
          items:
            type: object
            oneOf:
              -
                $ref: '#/components/schemas/Module'
              -
                $ref: '#/components/schemas/AuthGuardModule'
              -
                $ref: '#/components/schemas/EditorAssetPanelModule'
              -
                $ref: '#/components/schemas/EditorBackgroundWorkerModule'
              -
                $ref: '#/components/schemas/AdvisorInspectorModule'
              -
                $ref: '#/components/schemas/AiPromptProviderModule'
              -
                $ref: '#/components/schemas/AiProviderModule'
              -
                $ref: '#/components/schemas/AnnouncementModule'
              -
                $ref: '#/components/schemas/AutomationActionModule'
              -
                $ref: '#/components/schemas/ChatModule'
              -
                $ref: '#/components/schemas/ContextMenuModule'
              -
                $ref: '#/components/schemas/CrowdsourcePanelModule'
              -
                $ref: '#/components/schemas/CustomFileFormatModule'
              -
                $ref: '#/components/schemas/CustomMtModuleResponseModel'
              -
                $ref: '#/components/schemas/EditorAutocompleteModule'
              -
                $ref: '#/components/schemas/EditorButtonModule'
              -
                $ref: '#/components/schemas/EditorPanelModule'
              -
                $ref: '#/components/schemas/ExternalQaCheckModule'
              -
                $ref: '#/components/schemas/FileProcessorModule'
              -
                $ref: '#/components/schemas/IntegrationModule'
              -
                $ref: '#/components/schemas/ManifestModule'
              -
                $ref: '#/components/schemas/ModalModule'
              -
                $ref: '#/components/schemas/OrganizationMenuCrowdsourceModule'
              -
                $ref: '#/components/schemas/OrganizationMenuModule'
              -
                $ref: '#/components/schemas/ProjectMenuModule'
              -
                $ref: '#/components/schemas/ReportsModule'
              -
                $ref: '#/components/schemas/ResourceModule'
              -
                $ref: '#/components/schemas/ToolsModule'
              -
                $ref: '#/components/schemas/WorkflowStepTypeModule'
        scopes:
          type: array
          items:
            type: string
            example: project
        permissions:
          $ref: '#/components/schemas/applications.installations.permissions'
        defaultPermissions:
          $ref: '#/components/schemas/applications.installations.defaultPermissions'
        limitReached:
          type: boolean
          example: true
        stringBasedAvailable:
          type: boolean
          example: false
        bundle:
          oneOf:
            -
              $ref: '#/components/schemas/ApplicationBundle'
          nullable: true
      type: object
    ApplicationInstallationUpdateResponseModel:
      title: 'Application Installation Update'
      description: 'Pending update (diff) between the installed app and the latest manifest'
      properties:
        manifestHash:
          description: 'Hash of the latest manifest. Pass back in the apply request as `manifestHash`.'
          type: string
          example: 5536b952d54e0846b6fd69217f6eb7cfdcfba41774732926e1f0c1a158a6e405
          nullable: true
        latestManifest:
          description: 'Full latest manifest payload as fetched and cached by the cron. The client renders it install-modal-style and uses the diff collections (addedScopes/removedScopes/changedModules/...) as markers to label individual fields.'
          type: object
          nullable: true
        addedScopes:
          description: 'Scopes added in the latest manifest'
          type: array
          items:
            type: string
            example: tm
        removedScopes:
          description: 'Scopes removed in the latest manifest'
          type: array
          items:
            type: string
            example: project
        addedModules:
          description: 'Modules added in the latest manifest'
          type: array
          items:
            type: object
        removedModules:
          description: 'Modules removed in the latest manifest'
          type: array
          items:
            type: object
        changedModules:
          description: 'Modules that still exist but whose behaviour fields (url, permissions) changed'
          type: array
          items:
            type: object
        changedEvents:
          description: 'Lifecycle event URLs that changed (installed/uninstall/status)'
          type: object
          additionalProperties:
            properties:
              from:
                type: string
              to:
                type: string
            type: object
        baseUrlChanged:
          description: 'baseUrl change (host that serves the app)'
          properties:
            from:
              type: string
              nullable: true
            to:
              type: string
              nullable: true
          type: object
          nullable: true
        authenticationTypeChanged:
          description: 'Authentication-type change. Read-only / not applicable: an auth-type change cannot be applied as an update, the app must be uninstalled and reinstalled. Present here only so the change is visible.'
          properties:
            from:
              type: string
              nullable: true
            to:
              type: string
              nullable: true
          type: object
          nullable: true
        hasChanges:
          description: 'Whether the manifest has any changes'
          type: boolean
          example: true
      type: object
    ApplicationKvRecord:
      title: 'Application KV Record'
      description: 'A key-value record in the storage of an installed application'
      properties:
        key:
          description: 'Key of the record - unique within the installation, case-sensitive'
          type: string
          example: settings.theme
        value:
          $ref: '#/components/schemas/ApplicationKvRecordData'
        secret:
          description: 'If `true`, the value is encrypted at rest'
          type: boolean
          example: false
        createdAt:
          description: 'Date the record was created, in ISO 8601 format'
          type: string
          format: date-time
          example: '2026-08-17T10:00:00+00:00'
        updatedAt:
          description: 'Date the record was last updated, in ISO 8601 format'
          type: string
          format: date-time
          example: '2026-08-17T10:00:00+00:00'
        expiresAt:
          description: 'Date the record expires, in ISO 8601 format. `null` for permanent records'
          type: string
          format: date-time
          example: '2026-09-17T10:00:00+00:00'
          nullable: true
      type: object
    AuthGuardModule:
      title: 'Auth Guard Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            name:
              type: string
              example: 'Auth Guard Module'
            description:
              type: string
              example: 'Description of the Auth Guard Module'
              nullable: true
            url:
              type: string
    AutomationActionModule:
      title: 'Automation Action Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            scopes:
              type: object
              nullable: true
            identifier:
              type: string
              example: example-application
            inputSchemaUrl:
              type: string
              nullable: true
            outputSchemaUrl:
              type: string
              nullable: true
            iframe:
              type: object
              nullable: true
            executeUrl:
              type: string
            validateSettingsUrl:
              type: string
              nullable: true
            invocationWaitMode:
              type: string
              enum:
                - sync
                - taskToken
              nullable: true
    ChatModule:
      title: 'Chat Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
              nullable: true
            iframe:
              type: object
            logo:
              type: string
              nullable: true
    ContextMenuModule:
      title: 'Context Menu Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            name:
              type: string
              example: 'Example Name'
            mode:
              type: string
              example: redirect
            baseUrl:
              type: string
              example: 'https://example.com'
            options:
              type: object
            signaturePatterns:
              type: object
            description:
              type: string
              example: 'app description'
    CrowdsourcePanelModule:
      title: 'Crowdsource Panel Module'
      description: 'Class CrowdsourcePanelModuleResponseModel'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
    CustomFileFormatModule:
      title: 'Custom File Format Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            name:
              type: string
              example: 'Example Application'
            logoUrl:
              type: string
            signaturePatterns:
              type: object
            fileType:
              type: string
              example: type-xyz
            multilingual:
              type: boolean
              example: false
    CustomMtModuleResponseModel:
      title: 'Custom MT Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            key:
              type: string
              example: example-application
            name:
              type: string
              example: 'App Name'
            type:
              type: string
              example: editor-right-panel
            data:
              type: object
            authenticationType:
              type: string
    EditorAssetPanelModule:
      title: 'Editor Asset Panel Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            modes:
              type: object
            scopes:
              type: object
            iframe:
              type: object
            fileNamePattern:
              type: string
              example: \\.(jpg|jpeg|png|gif|svg)$
    EditorAutocompleteModule:
      title: 'Editor Autocomplete Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            modes:
              type: object
            scopes:
              type: object
    EditorBackgroundWorkerModule:
      title: 'Editor Background Worker Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            modes:
              type: object
            scopes:
              type: object
            iframe:
              type: object
    EditorButtonModule:
      title: 'Editor Button Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            modes:
              type: array
              items:
                type: string
              example:
                - translate
                - review
            options:
              type: object
    EditorPanelModule:
      title: 'Editor Panel Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            modes:
              type: object
            scopes:
              type: object
            iframe:
              type: object
    ExternalQaCheckModule:
      title: 'External QA Check Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            getBatchSizeUrl:
              type: string
              example: /qa-check/batch-size
            runQaCheckUrl:
              type: string
              example: /qa-check
            supportsSynchronousRun:
              description: 'If `true`, the app is called while a translation is being saved and can refuse the save. If `false`, the app is called after the translation is saved and can only report an issue.'
              type: boolean
              example: false
            scopes:
              type: object
              nullable: true
            iframe:
              type: object
              nullable: true
    FileProcessorModule:
      title: 'File Processor Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            name:
              type: string
              example: 'Example Application'
            logoUrl:
              type: string
            signaturePatterns:
              type: object
    IntegrationModule:
      title: 'Integration Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
    ManifestModule:
      title: ManifestModule
      properties:
        key:
          type: string
          example: example-application
        name:
          type: string
          example: 'App Name'
        type:
          type: string
          example: editor-right-panel
        data:
          type: object
      type: object
    ModalModule:
      title: 'Modal Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
    Module:
      title: Module
      properties:
        key:
          type: string
          example: example-application
        type:
          type: string
          example: module-type
        data:
          type: object
        permissions:
          $ref: '#/components/schemas/applications.installations.modules.module.permissions'
        authenticationType:
          type: string
          example: none
      type: object
    OrganizationMenuCrowdsourceModule:
      title: 'Crowdsource Organization Menu Panel Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
    OrganizationMenuModule:
      title: 'Organization Menu Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
    ProjectMenuModule:
      title: 'Project Menu Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
    ReportsModule:
      title: 'Reports Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
    ResourceModule:
      title: 'Resource Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
    ToolsModule:
      title: 'Tools Module'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            scopes:
              type: object
            iframe:
              type: object
    WorkflowStepTypeModule:
      title: 'Workflow Step Type Module'
      description: 'Class WorkflowStepTypeModuleResponseModel'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Module'
        -
          properties:
            identifier:
              type: string
              example: example-application
            updateSettingsUrl:
              type: string
              nullable: true
            deleteSettingsUrl:
              type: string
              nullable: true
            editorMode:
              type: string
              nullable: true
            boundaries:
              type: object
            scopes:
              type: object
              nullable: true
            iframe:
              type: object
              nullable: true
    AutomationRulePatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/AutomationRuleOperation'
    AutomationRuleOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /description
            - /isEnabled
            - /projectIds
            - /executionFallback
            - /trigger
            - /definition
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/AutomationRuleOperationReplace'
          test: '#/components/schemas/AutomationRuleOperationTest'
    AutomationRuleOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AutomationRuleOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: object
                -
                  type: array
                  items: { type: integer }
    AutomationRuleOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AutomationRuleOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: object
                -
                  type: array
                  items: { type: integer }
    TaskStateArguments:
      required:
        - FunctionName
        - Payload
      properties:
        FunctionName:
          description: 'Name of the function to execute'
          type: string
          maxLength: 255
          minLength: 1
          example: 'Sendai-automation-action::ai-automation-action-ai-action'
        Payload:
          description: 'Payload data to pass to the function (can be any type)'
          type: object
          example:
            prompt: 'Create a translate and pending proofreading task for all project target languages. Use strings from the context. Set deadline one week from now.'
            aiModel: o4-mini
            contextScope: '{% $states %}'
            crowdinMcp:
              - tasks
            structuredOutputType: json-schema
      type: object
    TaskState:
      required:
        - Type
        - Arguments
      properties:
        Type:
          type: string
          enum:
            - Task
          example: Task
        Comment:
          description: 'Optional comment describing the state'
          type: string
          maxLength: 1024
        Arguments:
          $ref: '#/components/schemas/TaskStateArguments'
        Next:
          description: 'Name of the next state (mutually exclusive with End)'
          type: string
          example: NextState
        End:
          description: 'Marks this as a terminal state (mutually exclusive with Next)'
          type: boolean
          example: false
      type: object
    ChoiceRule:
      required:
        - Condition
        - Next
      properties:
        Condition:
          description: 'Condition expression to evaluate'
          example: '{% $states.input.events.length > 0 %}'
        Next:
          description: 'Name of the state to transition to if condition is true'
          type: string
          example: StateA
      type: object
    ChoiceState:
      required:
        - Type
        - Choices
        - Default
      properties:
        Type:
          type: string
          enum:
            - Choice
          example: Choice
        Comment:
          description: 'Optional comment describing the state'
          type: string
          maxLength: 1024
        Choices:
          description: 'Array of choice rules to evaluate'
          type: array
          items:
            $ref: '#/components/schemas/ChoiceRule'
        Default:
          description: 'Default state to transition to if no conditions match'
          type: string
          example: DefaultState
      type: object
    StateGraphDefinition:
      description: 'Sub-workflow definition used in Parallel branches and Map iterators'
      required:
        - StartAt
        - States
      properties:
        StartAt:
          description: 'Name of the state to start execution'
          type: string
          example: InitialState
        States:
          description: 'Map of state names to their definitions'
          type: object
          additionalProperties:
            oneOf:
              -
                $ref: '#/components/schemas/TaskState'
              -
                $ref: '#/components/schemas/ChoiceState'
              -
                $ref: '#/components/schemas/ParallelState'
              -
                $ref: '#/components/schemas/MapState'
              -
                $ref: '#/components/schemas/PassState'
      type: object
    ParallelState:
      required:
        - Type
        - Branches
      properties:
        Type:
          type: string
          enum:
            - Parallel
          example: Parallel
        Comment:
          description: 'Optional comment describing the state'
          type: string
          maxLength: 1024
        Branches:
          description: 'Array of parallel execution branches'
          type: array
          items:
            $ref: '#/components/schemas/StateGraphDefinition'
        Next:
          description: 'Name of the next state (mutually exclusive with End)'
          type: string
          example: NextState
        End:
          description: 'Marks this as a terminal state (mutually exclusive with Next)'
          type: boolean
          example: false
      type: object
    MapState:
      required:
        - Type
        - Items
        - ItemProcessor
      properties:
        Type:
          type: string
          enum:
            - Map
          example: Map
        Comment:
          description: 'Optional comment describing the state'
          type: string
          maxLength: 1024
        Items:
          description: 'JSONata expression to reference array items or literal array'
          oneOf:
            -
              type: string
              example: '{% $states.input.events %}'
            -
              type: array
              items: {  }
              example:
                - 1
                - 2
        ItemProcessor:
          $ref: '#/components/schemas/StateGraphDefinition'
        Next:
          description: 'Name of the next state (mutually exclusive with End)'
          type: string
          example: NextState
        End:
          description: 'Marks this as a terminal state (mutually exclusive with Next)'
          type: boolean
          example: false
      type: object
    PassState:
      required:
        - Type
        - Output
      properties:
        Type:
          type: string
          enum:
            - Pass
          example: Pass
        Comment:
          description: 'Optional comment describing the state'
          type: string
          maxLength: 1024
        Output:
          description: 'Output value (can be any type)'
          example: '{% $states.input.events.project.id %}'
        Next:
          description: 'Name of the next state (mutually exclusive with End)'
          type: string
          example: NextState
        End:
          description: 'Marks this as a terminal state (mutually exclusive with Next)'
          type: boolean
          example: false
      type: object
    AutomationRuleDefinition:
      description: 'Amazon State Language-like definition with some restrictions. See [Amazon State Language](https://states-language.net) for more information.'
      required:
        - StartAt
        - States
      properties:
        Comment:
          description: 'Optional comment describing the workflow'
          type: string
          maxLength: 1024
        StartAt:
          description: 'Name of the state where execution begins'
          type: string
          example: InitialState
        States:
          description: 'Map of state names to their definitions. Each state value must be one of: TaskState, ChoiceState, ParallelState, MapState, or PassState'
          type: object
          example:
            InitialState:
              Type: Task
              Arguments:
                FunctionName: 'ai-automation-action::ai-automation-action-ai-action'
                Payload:
                  prompt: 'Create a translate and pending proofreading task for all project target languages. Use strings from the context. Set deadline one week from now.'
                  aiModel: o4-mini
                  crowdinMcp: [tasks]
                  contextScope: '{% $states %}'
                  structuredOutputType: json-schema
              Next: FinalState
            FinalState:
              Type: Pass
              Output:
                status: completed
              End: true
          additionalProperties:
            oneOf:
              -
                $ref: '#/components/schemas/TaskState'
              -
                $ref: '#/components/schemas/ChoiceState'
              -
                $ref: '#/components/schemas/ParallelState'
              -
                $ref: '#/components/schemas/MapState'
              -
                $ref: '#/components/schemas/PassState'
      type: object
    UserContextStructureJsonSchemaObject:
      required:
        - type
        - properties
      properties:
        type:
          type: string
          enum:
            - object
          example: object
        properties:
          description: 'User context properties'
          type: object
          example:
            userId:
              type: integer
      type: object
    UserContextStructureJsonSchemaArray:
      required:
        - type
        - items
      properties:
        type:
          type: string
          enum:
            - array
          example: array
        items:
          example:
            type: string
          oneOf:
            -
              type: array
              items:
                type: object
            -
              type: object
      type: object
    ManualTriggerConfig:
      description: 'Manual Trigger Configuration'
      properties:
        userContextFormat:
          description: 'User context format'
          type: string
          enum:
            - json
            - json-schema
          example: json-schema
        userContextStructure:
          description: 'User context structure - arbitrary JSON structure or valid JSON schema'
          type: object
          example:
            type: object
            properties:
              userId:
                type: integer
          oneOf:
            -
              $ref: '#/components/schemas/UserContextStructureJsonSchemaObject'
            -
              $ref: '#/components/schemas/UserContextStructureJsonSchemaArray'
            -
              type: object
              example:
                userId:
                  type: integer
      type: object
    EventTriggerConfig:
      description: 'Event Trigger Configuration'
      required:
        - event
      properties:
        event:
          description: 'Event name'
          type: string
          enum:
            - file.added
            - file.updated
            - file.reverted
            - file.deleted
            - file.translated
            - file.approved
            - translation.updated
            - suggestion.added
            - suggestion.updated
            - suggestion.deleted
            - suggestion.approved
            - suggestion.disapproved
            - string.added
            - string.updated
            - string.deleted
            - stringComment.created
            - stringComment.restored
            - stringComment.deleted
            - stringComment.updated
            - task.statusChanged
            - task.added
            - task.updated
            - task.deleted
            - project.created
            - project.deleted
            - project.translated
            - project.approved
            - project.built
            - group.created
            - group.deleted
          example: string.added
        batching:
          description: 'Batching configuration'
          properties:
            enabled:
              description: 'Process events in batches'
              type: boolean
              default: false
              example: true
            timeout:
              description: 'Batching timeout in seconds'
              type: integer
              example: 300
          type: object
      type: object
    ScheduleTriggerConfig:
      description: 'Schedule Trigger Configuration'
      required:
        - cronExpression
      properties:
        cronExpression:
          description: "Cron expression for scheduling.\n\n Examples:\n - `0 0 * * *` - every day at midnight\n - `0 9 * * MON` - every Monday at 9:00 AM\n - `0 18 * * FRI` - every Friday at 6:00 PM\n - `0 0 15 * *` - at midnight on the 15th day of every month\n - `0 0 8 1 *` - at midnight on day-of-month 8 in January"
          type: string
          example: '0 0 * * *'
      type: object
    AutomationRuleCreateForm:
      required:
        - name
        - trigger
        - definition
      properties:
        name:
          description: 'Automation Rule name'
          type: string
          example: 'New translation notification'
        description:
          description: 'Automation Rule description'
          type: string
          example: 'Send notification when new translation is added'
        isEnabled:
          description: 'Whether the rule is enabled'
          type: boolean
          default: false
        scope:
          description: 'Rule scope - organization-wide or project-specific'
          type: string
          default: project
          enum:
            - organization
            - project
        projectIds:
          description: "Array of project ids. Get via [List Projects](#operation/api.projects.getMany)\n\n __Note:__ Can be used only when `scope` is `project`."
          type: array
          items:
            type: integer
            example: 1
        executionFallback:
          description: "Automation Rule execution fallback\n\nValues available:\n- send_email_always - Send email on every failure\n- send_email_once - Send email once if there are consecutive failures\n- send_email_never - Don't send email"
          type: string
          default: send_email_once
          enum:
            - send_email_always
            - send_email_once
            - send_email_never
        trigger:
          description: 'Automation Rule trigger'
          required:
            - name
            - type
            - config
          properties:
            name:
              description: 'Trigger name'
              type: string
              example: 'New translation'
            comment:
              description: 'Trigger comment'
              type: string
              example: 'Trigger for new translation'
            type:
              description: 'Trigger type'
              type: string
              enum:
                - Manual
                - Event
                - Schedule
              example: Event
            config:
              description: 'Trigger configuration'
              oneOf:
                -
                  $ref: '#/components/schemas/ManualTriggerConfig'
                -
                  $ref: '#/components/schemas/EventTriggerConfig'
                -
                  $ref: '#/components/schemas/ScheduleTriggerConfig'
          type: object
        definition:
          $ref: '#/components/schemas/AutomationRuleDefinition'
      type: object
    AutomationRuleCollectionResource:
      description: 'Automation Rule Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AutomationRule'
            pagination:
              $ref: '#/components/schemas/AdvancedPagination'
    AutomationRuleResource:
      description: 'Automation Rule Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AutomationRule'
    AutomationRule:
      description: 'Automation Rule'
      properties:
        id:
          description: 'Automation Rule identifier'
          type: integer
        userId:
          description: 'User identifier who created the rule'
          type: integer
        name:
          description: 'Automation Rule name'
          type: string
        description:
          description: 'Automation Rule description'
          type: string
        isEnabled:
          description: 'Whether the rule is enabled'
          type: boolean
        scope:
          description: 'Automation Rule scope - organization-wide or project-specific'
          type: string
          enum:
            - organization
            - project
        projectIds:
          description: 'List of project identifiers'
          type: array
          items:
            type: integer
        disableReason:
          description: "Reason for disabling the rule\n\n Values available:\n- plan_limit - The rule is disabled due to a plan limit\n- error_limit - The rule is disabled due to a consecutive execution failures limit\n- manual - The rule is disabled manually"
          type: string
          enum:
            - plan_limit
            - error_limit
            - manual
          nullable: true
        executionFallback:
          description: "Automation Rule execution fallback\n\nValues available:\n- send_email_always - Send email on every failure\n- send_email_once - Send email once if there are consecutive failures\n- send_email_never - Don't send email"
          type: object
          enum:
            - send_email_always
            - send_email_once
            - send_email_never
        trigger:
          description: 'Automation Rule trigger'
          properties:
            name:
              description: 'Trigger name'
              type: string
            type:
              description: 'Trigger type'
              type: string
            config:
              description: 'Trigger configuration'
              type: object
              oneOf:
                -
                  $ref: '#/components/schemas/ManualTriggerConfig'
                -
                  $ref: '#/components/schemas/EventTriggerConfig'
                -
                  $ref: '#/components/schemas/ScheduleTriggerConfig'
          type: object
        definition:
          $ref: '#/components/schemas/AutomationRuleDefinition'
        runningExecutionsCount:
          description: 'Number of currently running rule executions'
          type: integer
        pendingExecutionsCount:
          description: 'Number of pending rule executions'
          type: integer
        createdAt:
          description: 'Automation Rule creation date'
          type: string
          format: date-time
        updatedAt:
          description: 'Automation Rule last update date'
          type: string
          format: date-time
          nullable: true
        webUrl:
          description: 'Absolute URL to the automation rule'
          type: string
      type: object
    AutomationRuleExecutionCreateForm:
      required: []
      properties:
        projectId:
          description: 'Project id. Get via [List Projects](#operation/api.projects.getMany)'
          type: integer
        context:
          description: 'Additional context data to include in the event payload'
          type: object
      type: object
    FailureEvent:
      required:
        - taskToken
        - error
      properties:
        taskToken:
          description: 'AWS Step Functions task token. Get it from request body for the endpoint defined in manifest `executeUrl` in your app.'
          type: string
        error:
          description: 'Error message describing the failure details (max 32768 characters)'
          type: string
      type: object
    HeartbeatEvent:
      required:
        - taskToken
      properties:
        taskToken:
          description: 'AWS Step Functions task token. Get it from request body for the endpoint defined in manifest `executeUrl` in your app.'
          type: string
      type: object
    SuccessEvent:
      required:
        - taskToken
        - output
      properties:
        taskToken:
          description: 'AWS Step Functions task token. Get it from request body for the endpoint defined in manifest `executeUrl` in your app.'
          type: string
        output:
          description: 'Task success output'
      type: object
    AutomationRuleExecutionHeartbeatEventForm:
      required:
        - type
        - payload
      properties:
        type:
          description: 'Event type'
          type: string
          enum:
            - heartbeat
        payload:
          $ref: '#/components/schemas/HeartbeatEvent'
      type: object
    AutomationRuleExecutionFailureEventForm:
      required:
        - type
        - payload
      properties:
        type:
          description: 'Event type'
          type: string
          enum:
            - failure
        payload:
          $ref: '#/components/schemas/FailureEvent'
      type: object
    AutomationRuleExecutionSuccessEventForm:
      required:
        - type
        - payload
      properties:
        type:
          description: 'Event type'
          type: string
          enum:
            - success
        payload:
          $ref: '#/components/schemas/SuccessEvent'
      type: object
    AutomationRuleExecutionCollectionResource:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AutomationRuleExecution'
            pagination:
              $ref: '#/components/schemas/Pagination'
    AutomationRuleExecutionHeartbeatEventResource:
      description: 'Automation Rule Execution Heartbeat Event Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AutomationRuleExecutionHeartbeatEvent'
    AutomationRuleExecutionFailureEventResource:
      description: 'Automation Rule Execution Failure Event Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AutomationRuleExecutionFailureEvent'
    AutomationRuleExecutionSuccessEventResource:
      description: 'Automation Rule Execution Success Event Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AutomationRuleExecutionSuccessEvent'
    AutomationRuleExecutionResource:
      description: 'Automation Rule Execution Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AutomationRuleExecution'
    AutomationRuleExecutionHeartbeatEvent:
      description: 'Automation Rule Execution Heartbeat Event'
      properties:
        type:
          description: 'Event type'
          type: string
          enum:
            - heartbeat
        payload:
          $ref: '#/components/schemas/HeartbeatEvent'
      type: object
    AutomationRuleExecutionFailureEvent:
      description: 'Automation Rule Execution Failure Event'
      properties:
        type:
          description: 'Event type'
          type: string
          enum:
            - failure
        payload:
          $ref: '#/components/schemas/FailureEvent'
      type: object
    AutomationRuleExecutionSuccessEvent:
      description: 'Automation Rule Execution Success Event'
      properties:
        type:
          description: 'Event type'
          type: string
          enum:
            - success
        payload:
          $ref: '#/components/schemas/SuccessEvent'
      type: object
    BaseExecution:
      description: 'Base execution properties (without status field)'
      properties:
        id:
          description: 'Automation Rule Execution identifier'
          type: integer
        ruleId:
          description: 'Automation Rule identifier'
          type: integer
        projectId:
          description: 'Project identifier'
          type: integer
          nullable: true
        ruleVersion:
          description: 'Automation Rule version'
          type: integer
        triggerType:
          description: 'Trigger type'
          type: string
      type: object
    InitiatedExecution:
      allOf:
        -
          $ref: '#/components/schemas/BaseExecution'
        -
          properties:
            status:
              description: 'Execution status'
              type: string
              enum:
                - initiated
            errorMessage:
              description: 'Error message'
              type: 'null'
            duration:
              description: 'Execution duration in milliseconds'
              type: 'null'
            executedActionsCount:
              description: 'Number of executed actions'
              type: 'null'
            details:
              description: 'Additional execution details'
              type: 'null'
            startedAt:
              description: 'Execution start time'
              type: 'null'
          type: object
    RunningExecution:
      allOf:
        -
          $ref: '#/components/schemas/BaseExecution'
        -
          properties:
            status:
              description: 'Execution status'
              type: string
              enum:
                - running
            errorMessage:
              description: 'Error message'
              type: 'null'
            duration:
              description: 'Execution duration in milliseconds'
              type: 'null'
            executedActionsCount:
              description: 'Number of executed actions'
              type: 'null'
            details:
              description: 'Additional execution details'
              type: 'null'
            startedAt:
              description: 'Execution start time'
              type: string
              format: date-time
          type: object
    CompletedExecution:
      allOf:
        -
          $ref: '#/components/schemas/BaseExecution'
        -
          properties:
            status:
              description: 'Execution status'
              type: string
              enum:
                - completed
            errorMessage:
              description: 'Error message'
              type: 'null'
            duration:
              description: 'Execution duration in milliseconds'
              type: integer
            executedActionsCount:
              description: 'Number of executed actions'
              type: integer
            details:
              description: 'Additional execution details'
              type: object
            startedAt:
              description: 'Execution start time'
              type: string
              format: date-time
          type: object
    FailedExecution:
      allOf:
        -
          $ref: '#/components/schemas/BaseExecution'
        -
          properties:
            status:
              description: 'Execution status'
              type: string
              enum:
                - failed
            errorMessage:
              description: 'Error message'
              type: string
            duration:
              description: 'Execution duration in milliseconds'
              type: integer
            executedActionsCount:
              description: 'Number of executed actions'
              type: integer
            details:
              description: 'Additional execution details'
              type: object
            startedAt:
              description: 'Execution start time'
              type: string
              format: date-time
              nullable: true
          type: object
    AutomationRuleExecution:
      description: 'Automation Rule Execution'
      oneOf:
        -
          $ref: '#/components/schemas/InitiatedExecution'
        -
          $ref: '#/components/schemas/RunningExecution'
        -
          $ref: '#/components/schemas/CompletedExecution'
        -
          $ref: '#/components/schemas/FailedExecution'
    BranchPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/BranchOperation'
    BranchOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /title
            - /exportPattern
            - /priority
          x-doc-sections:
            - file-based
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/BranchOperationReplace'
          test: '#/components/schemas/BranchOperationTest'
    BranchOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/BranchOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    BranchOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/BranchOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    BranchCloneForm:
      required:
        - name
      properties:
        name:
          description: "Branch name\n\n__Note:__ Can't contain `\\ / : * ? \" < > |` symbols"
          type: string
          example: develop-master
        title:
          description: 'Use to provide more details for translators. Title is available in UI only'
          type: string
          example: 'Master branch'
      type: object
    BranchCreateForm:
      required:
        - name
      properties:
        name:
          description: "Branch name\n\n__Note:__ Can't contain `\\ / : * ? \" < > |` symbols"
          type: string
          example: develop-master
        title:
          description: 'Use to provide more details for translators. Title is available in UI only'
          type: string
          example: 'Master branch'
        exportPattern:
          description: "Branch export pattern. Defines branch name and path in resulting translations bundle\n\n__Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          example: '%three_letters_code%'
          x-doc-sections:
            - file-based
        priority:
          description: 'Defines priority level for each branch'
          type: string
          default: normal
          enum:
            - low
            - normal
            - high
          example: normal
          x-doc-sections:
            - file-based
      type: object
    BranchMergeCreateForm:
      required:
        - sourceBranchId
      properties:
        deleteAfterMerge:
          description: 'Whether to delete branch after merge'
          type: boolean
          default: false
          example: true
        sourceBranchId:
          description: 'Branch that will be merged'
          type: integer
          example: 8
        dryRun:
          description: 'Simulate merging without making any real changes.'
          type: boolean
          default: false
          example: true
        acceptSourceChanges:
          description: 'When enabled, conflicted strings will be resolved by accepting changes from the source branch.'
          type: boolean
          default: false
          example: true
      type: object
    BranchMergeResource:
      description: 'Branch Merge Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/BranchMerge'
    BranchMergeSummaryResource:
      description: 'Branch Merge Summary Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/BranchMergeSummary'
    CloneBranchResource:
      description: 'Clone Branch Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CloneBranchResponseModel'
    CrowdinBranchSearchCollectionResource:
      description: 'A list of matched branches across projects.'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                oneOf:
                  - { $ref: '#/components/schemas/FileBasedBranchResource' }
                  - { $ref: '#/components/schemas/StringBasedBranchResource' }
            pagination:
              $ref: '#/components/schemas/Pagination'
          type: object
        -
          $ref: '#/components/schemas/CollectionResource'
    FileBasedBranchCollectionResource:
      description: 'Branch Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/FileBasedBranchResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    FileBasedBranchResource:
      description: 'Branch Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileBasedProjectBranch'
    StringBasedBranchCollectionResource:
      description: 'Branch Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/StringBasedBranchResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    StringBasedBranchResource:
      description: 'Branch Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringBasedProjectBranch'
    Branch:
      title: Branch
      properties:
        id:
          type: integer
          example: 34
        projectId:
          type: integer
          example: 2
        name:
          type: string
          example: develop-master
        title:
          type: string
          example: 'Master branch'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-16T13:48:04+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-19T13:25:27+00:00'
          nullable: true
      type: object
    BranchMerge:
      title: 'Branch Merge'
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          properties:
            sourceBranchId:
              type: integer
              example: 38
            deleteAfterMerge:
              type: boolean
              example: false
            acceptSourceChanges:
              type: boolean
              example: false
            dryRun:
              type: boolean
              example: false
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    BranchMergeSummary:
      title: 'Branch Merge Summary'
      properties:
        status:
          type: string
          example: merged
        sourceBranchId:
          type: integer
          example: 100
        targetBranchId:
          type: integer
          example: 100
        dryRun:
          type: boolean
          example: false
        acceptSourceChanges:
          type: boolean
          example: false
        details:
          type: object
          example:
            added: 1
            deleted: 2
            updated: 3
            conflicted: 7
      type: object
    CloneBranchResponseModel:
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          enum:
            - created
            - in_progress
            - finished
            - failed
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    FileBasedProjectBranch:
      title: Branch
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Branch'
        -
          properties:
            exportPattern:
              type: string
              example: '%three_letters_code%'
            priority:
              type: string
              example: normal
    StringBasedProjectBranch:
      title: Branch
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Branch'
        -
          properties:
            isProtected:
              type: boolean
              example: true
    BundlePatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/BundleOperation'
    BundleOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /format
            - /sourcePatterns
            - /ignorePatterns
            - /exportPattern
            - /isMultilingual
            - /includeProjectSourceLanguage
            - /includeInContextPseudoLanguage
            - /labelIds
            - /excludeLabelIds
            - /labelMatchRule
            - /excludeLabelMatchRule
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/BundleOperationReplace'
          test: '#/components/schemas/BundleOperationTest'
    BundleOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/BundleOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
    BundleOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/BundleOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: array
                  items: { type: string }
    BundleCreateForm:
      required:
        - name
        - sourcePatterns
      properties:
        name:
          description: 'Defines name'
          type: string
          example: 'Resx bundle'
        format:
          description: "Defines export file format. If not provided, files will be exported in their original format.\n\n__Note:__ Required for strings-based projects"
          type: string
          example: crowdin-resx
        sourcePatterns:
          description: 'Source patterns'
          type: array
          items:
            type: string
            example: /master
        ignorePatterns:
          description: 'Ignore patterns'
          type: array
          items:
            type: string
            example: /masterBranch
        exportPattern:
          description: "Bundle export pattern. Defines bundle name in resulting translations bundle. **Required** if `format` is specified. If `format` is not specified, uses default pattern based on file structure\n\n__Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          example: strings-%two_letter_code%.resx
          nullable: true
        isMultilingual:
          description: 'Export translations in multilingual file'
          type: boolean
          default: false
        includeProjectSourceLanguage:
          description: 'Add project source language to bundle'
          type: boolean
          default: false
        sourceLanguageExportPattern:
          description: "Source language export pattern. Works only when `includeProjectSourceLanguage` is enabled.\n\n__Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          example: strings-%two_letter_code%.resx
        includeInContextPseudoLanguage:
          description: 'Add In-Context pseudo-language to bundle'
          type: boolean
          default: true
        labelIds:
          description: "Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)\n\n__Note:__ Can't be used when `format` is `null`"
          type: array
          items:
            type: integer
          example:
            - 13
            - 27
        excludeLabelIds:
          description: "Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)\n\n__Note:__ Can't be used when `format` is `null`"
          type: array
          items:
            type: integer
          example:
            - 5
            - 8
        labelMatchRule:
          description: "Match rule for labels:\n- \"all\" - all labels must be present in string\n- \"any\" - any of the labels must be present in string\n\n __Note:__ Can only be used when `labelIds` parameter is provided"
          type: string
          default: all
          enum:
            - all
            - any
          nullable: true
        excludeLabelMatchRule:
          description: "Match rule for excluded labels:\n - \"all\" - all labels must be present in string\n - \"any\" - any of the labels must be present in string\n\n __Note:__ Can only be used when `excludeLabelIds` parameter is provided"
          type: string
          default: all
          enum:
            - all
            - any
          nullable: true
        languageIds:
          description: 'Language Identifiers. Get via [List Supported Languages](#operation/api.languages.getMany). If provided, bundle will only export specified languages. If not provided, bundle will export all project target languages.'
          type: array
          items:
            type: string
          example:
            - uk
            - de
            - fr
          nullable: true
      type: object
    CrowdinBundleExportForm:
      properties:
        targetLanguageIds:
          description: "Specify target languages for export. Get via [List Supported Languages](#operation/api.languages.getMany)\n\n * Leave this field empty to export all target languages"
          type: array
          items:
            type: string
            example: uk
        skipUntranslatedStrings:
          description: "Defines whether to export only translated strings\n\n__Note:__ `true` value can't be used with `skipUntranslatedFiles=true` in same request"
          type: boolean
          example: false
        skipUntranslatedFiles:
          description: "Defines whether to export only translated files\n\n__Note:__ `true` value can't be used with `skipUntranslatedStrings=true` in same request"
          type: boolean
          example: false
        exportApprovedOnly:
          description: "Defines whether to export only approved strings\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
      type: object
      x-doc-sections:
        - file-based
    BundleCollectionResource:
      description: 'Bundle Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/BundleResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    BundleResource:
      description: 'Bundle Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Bundle'
    CrowdinBundleExportResource:
      description: 'Bundle Export Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/BundleExport'
    Bundle:
      title: Bundle
      properties:
        id:
          type: integer
          example: 1
        name:
          type: string
          example: 'Resx bundle'
        format:
          type: string
          example: crowdin-resx
          nullable: true
        sourcePatterns:
          type: array
          items:
            type: string
            example: /master
        ignorePatterns:
          type: array
          items:
            type: string
            example: /masterBranch
        exportPattern:
          type: string
          example: strings-%two_letters_code%.resx
          nullable: true
        isMultilingual:
          type: boolean
          default: false
        includeProjectSourceLanguage:
          type: boolean
          default: false
        includeInContextPseudoLanguage:
          type: boolean
          default: true
        sourceLanguageExportPattern:
          type: string
          example: strings-%two_letters_code%.resx
        labelMatchRule:
          type: string
          enum:
            - all
            - any
          example: all
          nullable: true
        excludeLabelMatchRule:
          type: string
          enum:
            - all
            - any
          example: any
          nullable: true
        labelIds:
          type: array
          items:
            type: integer
          example:
            - 13
            - 27
        excludeLabelIds:
          type: array
          items:
            type: integer
          example:
            - 5
            - 8
        languageIds:
          type: array
          items:
            type: string
          example:
            - uk
            - de
            - fr
          nullable: true
        webUrl:
          type: string
          example: 'https://crowdin.com/project/test/translations#bundles:100'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-20T11:11:05+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-20T12:22:20+00:00'
      type: object
    BundleExport:
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          properties:
            bundleId:
              type: integer
              example: 38
            targetLanguageIds:
              type: array
              items:
                type: string
                example: uk
            skipUntranslatedStrings:
              type: boolean
              example: false
            skipUntranslatedFiles:
              type: boolean
              example: false
              x-doc-sections:
                - file-based
            exportApprovedOnly:
              type: boolean
              example: false
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
          nullable: true
        eta:
          type: string
          example: '1 second'
          deprecated: true
      type: object
    ClientCollectionResource:
      description: 'Clients Collection'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ClientResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ClientResource:
      description: 'Client Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Client'
    Client:
      title: Client
      description: 'Client Response Model'
      properties:
        id:
          type: integer
          example: 52760
        name:
          type: string
          example: 'John Smith'
        description:
          type: string
          example: 'John Smith Organization'
        status:
          type: string
          enum:
            - pending
            - confirmed
            - rejected
          example: pending
        webUrl:
          type: string
          example: 'https://example.crowdin.com/u/clients/1/rates'
      type: object
    ConceptUpdateLanguagesDetails:
      title: 'Concept Languages Details'
      description: 'Concept Languages Details'
      required:
        - languageId
        - definition
      properties:
        languageId:
          description: 'Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        definition:
          description: 'Some definition'
          type: string
          example: 'This is a sample definition.'
        note:
          description: 'Any kind of note, such as a usage note, explanation, or instruction.'
          type: string
          example: 'Any kind of note, such as a usage note, explanation, or instruction.'
      type: object
    ConceptUpdateForm:
      properties:
        subject:
          description: subject
          type: string
          example: general
        definition:
          description: 'This is a sample definition.'
          type: string
          example: 'This is a sample definition.'
        translatable:
          type: boolean
          default: 'true'
          example: 'true'
        note:
          description: 'Any kind of note, such as a usage note, explanation, or instruction'
          type: string
          example: 'Any concept-level note information'
        url:
          description: 'Base URL'
          type: string
          example: www.example.com
        figure:
          description: 'Used for an external cross-reference, such as a URL, or to point to an external graphic file'
          type: string
          example: www.example.com/image.png
        languagesDetails:
          type: array
          items:
            $ref: '#/components/schemas/ConceptUpdateLanguagesDetails'
      type: object
    CrowdinConceptCollectionResource:
      description: 'Concept Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinConceptResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinConceptResource:
      description: 'Concept Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Concept'
    ConceptLanguagesDetails:
      properties:
        languageId:
          type: string
          example: en
          nullable: true
        userId:
          type: integer
          example: 12
          nullable: true
        definition:
          type: string
          example: 'Some definition'
          nullable: true
        note:
          type: string
          example: 'Some note'
          nullable: true
        createdAt:
          type: string
          format: date-time
          example: '2019-09-19T14:14:00+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-19T14:14:00+00:00'
          nullable: true
      type: object
    Concept:
      title: Concept
      properties:
        id:
          type: integer
          example: 2
        userId:
          type: integer
          example: 6
        glossaryId:
          type: integer
          example: 6
        subject:
          type: string
          example: general
        definition:
          type: string
          example: 'Some definition'
        translatable:
          type: boolean
          example: true
        note:
          type: string
          example: 'Any kind of note, such as a usage note, explanation, or instruction'
        url:
          description: 'Base URL'
          type: string
          example: www.example.com
        figure:
          description: 'Figure URL'
          type: string
          example: www.example.com/image.png
        languagesDetails:
          type: array
          items:
            $ref: '#/components/schemas/ConceptLanguagesDetails'
        createdAt:
          description: 'UTC timezone'
          type: string
          format: date-time
          example: '2019-09-23T07:19:47+00:00'
        updatedAt:
          description: 'UTC timezone'
          type: string
          format: date-time
          example: '2019-09-23T07:19:47+00:00'
      type: object
    JsonPatchDocument:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/JsonPatchOperation'
    JsonPatchOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - add
            - remove
            - replace
            - move
            - copy
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
      type: object
      discriminator:
        propertyName: op
        mapping:
          add: '#/components/schemas/JsonPatchAdd'
          remove: '#/components/schemas/JsonPatchRemove'
          replace: '#/components/schemas/JsonPatchReplace'
          move: '#/components/schemas/JsonPatchMove'
          copy: '#/components/schemas/JsonPatchCopy'
          test: '#/components/schemas/JsonPatchTest'
    JsonPatchAdd:
      description: 'A JSON Patch `Add` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.1)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/JsonPatchOperation'
        -
          properties:
            value:
              $ref: '#/components/schemas/Any'
    JsonPatchRemove:
      description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.2)'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/JsonPatchOperation'
    JsonPatchReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/JsonPatchOperation'
        -
          properties:
            value:
              $ref: '#/components/schemas/Any'
    JsonPatchMove:
      description: 'A JSON Patch `Move` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.4)'
      required:
        - from
      type: object
      allOf:
        -
          $ref: '#/components/schemas/JsonPatchOperation'
        -
          properties:
            from:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
    JsonPatchCopy:
      description: 'A JSON Patch `Copy` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.5)'
      required:
        - from
      type: object
      allOf:
        -
          $ref: '#/components/schemas/JsonPatchOperation'
        -
          properties:
            from:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
    JsonPatchTest:
      description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/JsonPatchOperation'
        -
          properties:
            value:
              $ref: '#/components/schemas/Any'
    Any:
      title: Any
      oneOf:
        -
          type: string
        -
          type: boolean
        -
          type: integer
        -
          type: array
          items:
            type: integer
        -
          type: array
          items:
            type: string
    AuthenticateError:
      description: 'Authenticate Error'
      properties:
        error:
          properties:
            message:
              type: string
              example: Unauthorized
            code:
              type: integer
              example: 401
          type: object
      type: object
    translation-costs.steps.translate:
      title: 'Translate Step'
      properties:
        type:
          description: Translate
          type: string
          example: Translate
        mode:
          description: simple
          type: string
          example: simple
        regularRates:
          type: array
          items:
            $ref: '#/components/schemas/cost-estimation.steps.translate.regular-rates'
        individualRates:
          type: array
          items:
            $ref: '#/components/schemas/translation-costs.steps.translate.individual-rates'
      type: object
    translation-costs.steps.proofread:
      title: 'Proofread Step'
      properties:
        type:
          description: Proofread
          type: string
          example: Proofread
        mode:
          description: simple
          type: string
          example: simple
        regularRates:
          type: array
          items:
            $ref: '#/components/schemas/cost-estimation.steps.proofread.regular-rates'
          maximum: 1
        individualRates:
          type: array
          items:
            $ref: '#/components/schemas/translation-costs.steps.proofread.individual-rates'
          maximum: 1
      type: object
    cost-estimation.steps.translate.regular-rates:
      title: 'Regular rates'
      properties:
        mode:
          description: tm_match
          type: string
          enum:
            - no_match
            - tm_match
          example: tm_match
        value:
          description: '0.1'
          type: number
          format: float
          example: 0.1
      type: object
    cost-estimation.steps.translate.individual-rates:
      title: 'Individual rates'
      properties:
        languageIdsTo:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        rates:
          type: array
          items:
            $ref: '#/components/schemas/cost-estimation.steps.translate.individual-rate-modes'
      type: object
    translation-costs.steps.translate.individual-rates:
      title: 'Individual rates'
      properties:
        languageIdsTo:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: '1'
        rates:
          type: array
          items:
            $ref: '#/components/schemas/cost-estimation.steps.translate.individual-rate-modes'
      type: object
    cost-estimation.steps.translate.individual-rate-modes:
      title: 'Individual rates'
      properties:
        mode:
          description: tm_match
          type: string
          enum:
            - no_match
            - tm_match
          example: tm_match
        value:
          description: '0.1'
          type: number
          format: float
          example: 0.1
      type: object
    cost-estimation.steps.proofread.regular-rates:
      title: 'Proofread rate'
      properties:
        mode:
          description: proofread
          type: string
          example: proofread
        value:
          description: '0.05'
          type: number
          format: float
          example: 0.05
      type: object
    cost-estimation.steps.proofread.individual-rates:
      title: 'Individual rates'
      properties:
        languageIdsTo:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        rates:
          type: array
          items:
            $ref: '#/components/schemas/cost-estimation.steps.proofread.individual-rate-modes'
      type: object
    translation-costs.steps.proofread.individual-rates:
      title: 'Individual rates'
      properties:
        languageIdsTo:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: '1'
        rates:
          type: array
          items:
            $ref: '#/components/schemas/cost-estimation.steps.proofread.individual-rate-modes'
      type: object
    cost-estimation.steps.proofread.individual-rate-modes:
      title: 'Individual rates'
      properties:
        mode:
          description: proofread
          type: string
          example: proofread
        value:
          description: '0.1'
          type: number
          format: float
          example: 0.1
      type: object
    cost-estimation.steps.proofread:
      title: 'Proofread Step'
      properties:
        type:
          description: Proofread
          type: string
          example: Proofread
        mode:
          description: simple
          type: string
          example: simple
        regularRates:
          type: array
          items:
            $ref: '#/components/schemas/cost-estimation.steps.proofread.regular-rates'
          maximum: 1
        individualRates:
          description: "__Note:__ Can't be used with `languageId` (at `scheme`) in the same request"
          type: array
          items:
            $ref: '#/components/schemas/cost-estimation.steps.proofread.individual-rates'
          maximum: 1
      type: object
    CollectionResource:
      description: 'Base schema of resource container. Container is a wrapper object that contains payload in required `data` property and provides space for adding any other metadata.'
      required:
        - data
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
    DownloadLinkResource:
      description: 'Download Link Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/DownloadLink'
    ErrorCollectionResource:
      title: 'Error Collection Resource'
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorResource'
      type: object
    ErrorPatchResource:
      title: 'Error Patch Resource'
      properties:
        index:
          type: integer
          example: 0
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorResource'
      type: object
    ErrorPatchCollectionResource:
      title: 'Error Patch Collection Resource'
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorPatchResource'
      type: object
    ErrorResource:
      title: 'Error Resource'
      properties:
        error:
          properties:
            key:
              type: string
              example: name
            errors:
              type: array
              items:
                $ref: '#/components/schemas/AttributeError'
          type: object
      type: object
    AttributeError:
      title: AttributeError
      properties:
        code:
          type: string
          example: StringTypeInvalid
        message:
          type: string
          example: 'Invalid type given. String expected'
      type: object
    PaymentRequiredExceptionResource:
      description: 'Payment required'
      properties:
        error:
          properties:
            message:
              type: string
              example: 'Payment required'
            code:
              type: integer
              example: 402
          type: object
      type: object
    ForbiddenExceptionResource:
      description: Forbidden
      properties:
        error:
          properties:
            message:
              type: string
              example: Forbidden
            code:
              type: integer
              example: 403
          type: object
      type: object
    NotFoundExceptionResource:
      description: 'Not Found'
      properties:
        error:
          properties:
            message:
              type: string
              example: 'Resource Not Found'
            code:
              type: integer
              example: 404
          type: object
      type: object
    MethodNotAllowedExceptionResource:
      description: 'Method Not Allowed Error'
      properties:
        error:
          properties:
            message:
              type: string
              example: 'Method Not Allowed'
            code:
              type: integer
              example: 405
          type: object
      type: object
    UnsupportedMediaTypeExceptionResource:
      description: 'Not Found'
      properties:
        error:
          properties:
            message:
              type: string
              example: 'Unsupported Media Type'
            code:
              type: integer
              example: 415
          type: object
      type: object
    InternalServerErrorExceptionResource:
      description: 'Not Found'
      properties:
        error:
          properties:
            message:
              type: string
              example: 'Internal Server Error'
            code:
              type: integer
              example: 500
          type: object
      type: object
    ServiceUnavailableExceptionResource:
      description: Forbidden
      properties:
        error:
          properties:
            message:
              type: string
              example: 'Service Unavailable'
            code:
              type: integer
              example: 503
          type: object
      type: object
    ConflictExceptionResource:
      description: Conflict
      properties:
        error:
          properties:
            message:
              type: string
              example: Conflict
            code:
              type: integer
              example: 409
          type: object
      type: object
    UnprocessableEntityExceptionResource:
      description: 'Unprocessable Entity'
      properties:
        error:
          properties:
            message:
              type: string
              example: "This file can't be exported. Configure and import the file first."
            code:
              type: integer
              example: 422
          type: object
      type: object
    FailedDependencyExceptionResource:
      description: 'Failed dependency'
      properties:
        error:
          properties:
            message:
              type: string
              example: 'Failed dependency'
            code:
              type: integer
              example: 424
          type: object
      type: object
    ExceptionResource:
      description: 'Exception Resource'
      properties:
        error:
          $ref: '#/components/schemas/Exception'
      type: object
    FileDownloadLinkResource:
      description: 'File Download Link Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileDownloadLink'
    JobAttributesSchema:
      title: Attributes
      type: object
      additionalProperties:
        oneOf:
          -
            type: string
          -
            type: integer
          -
            type: boolean
    Resource:
      description: 'Base schema of resource container. Container is a wrapper object that contains payload in required `data` property and provides space for adding any other metadata.'
      required:
        - data
      type: object
    AdvancedPagination:
      title: 'Advanced Pagination'
      description: 'Advanced Pagination Response Model'
      properties:
        offset:
          type: integer
          example: 0
        limit:
          type: integer
          example: 25
        total:
          type: integer
          example: 25
      type: object
    DownloadLink:
      title: 'Download Link'
      description: 'Class DownloadLinkResponseModel'
      properties:
        url:
          type: string
          example: 'https://production-enterprise-importer.downloads.crowdin.com/992000002/2/14.xliff?response-content-disposition={disposition}&X-Amz-Content-Sha256={sha}&X-Amz-Algorithm={algorithm}&X-Amz-Credential={credentials}&X-Amz-Date={date}&X-Amz-SignedHeaders={headers}&X-Amz-Expires={expires}&X-Amz-Signature={signature}'
        expireIn:
          type: string
          example: '2019-09-20T10:31:21+00:00'
      type: object
    Exception:
      title: Exception
      description: 'Class ExceptionResponseModel'
      properties:
        message:
          type: string
        code:
          type: integer
      type: object
    FileDownloadLink:
      title: 'File Download Link'
      description: 'Class FileDownloadLinkResponseModel'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/DownloadLink'
        -
          properties:
            etag:
              type: string
              example: ebd69a1b7e4c23e6d17891a491c94f832e0c82e4692dedb35a6cd1e624b62
    Pagination:
      title: Pagination
      description: 'Pagination Response Model'
      properties:
        offset:
          type: integer
        limit:
          type: integer
          example: 25
      type: object
    CustomQaCheckPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/CustomQaCheckOperation'
    CustomQaCheckOperation:
      description: "A JSON Patch operation as defined by [RFC\n     *     6902](https://tools.ietf.org/html/rfc6902#section-4)"
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /title
            - /description
            - /snippet
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/CustomQaCheckOperationReplace'
          test: '#/components/schemas/CustomQaCheckOperationTest'
    CustomQaCheckOperationReplace:
      description: "A JSON Patch `Replace` operation as defined by [RFC\n     *     6902](https://tools.ietf.org/html/rfc6902#section-4.3)"
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CustomQaCheckOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    CustomQaCheckOperationTest:
      description: "A JSON Patch `Replace` operation as defined by [RFC\n     *     6902](https://tools.ietf.org/html/rfc6902#section-4.3)"
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CustomQaCheckOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    CustomQaCheckCreateForm:
      required:
        - title
        - snippet
      properties:
        title:
          type: string
          example: 'Noop check'
        description:
          type: string
          example: 'Always return true'
        snippet:
          type: string
          example: 'send(JSON.stringify({success: true}));'
      type: object
    CustomQaCheckCollectionResource:
      description: 'Custom QA Check Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CustomQaCheckResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CustomQaCheckResource:
      description: 'Custom QA Check Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              oneOf:
                -
                  $ref: '#/components/schemas/CustomQaCheck'
                -
                  $ref: '#/components/schemas/CustomQaFullCheck'
    CustomQaFullCheck:
      title: 'Custom QA Check'
      properties:
        id:
          type: integer
          example: 1
        title:
          type: string
          example: 'Noop check'
        description:
          type: string
          example: 'Always return true'
        snippet:
          type: string
          example: 'send(JSON.stringify({success: true}));'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-19T14:14:00+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-19T14:14:00+00:00'
          nullable: true
      type: object
    CustomQaCheck:
      title: 'Custom QA Check'
      properties:
        id:
          type: integer
          example: 1
        title:
          type: string
          example: 'Noop check'
        description:
          type: string
          example: 'Always return true'
      type: object
    CustomSpellcheckerCollectionResource:
      description: 'Custom Spellchecker Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CustomSpellcheckerResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CustomSpellcheckerResource:
      description: 'Custom Spellchecker Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CustomSpellchecker'
    CustomSpellchecker:
      title: 'Custom Spellchecker'
      properties:
        id:
          type: integer
          example: 2
        name:
          type: string
          example: 'Custom Spellchecker'
        config:
          properties:
            identifier:
              type: string
              example: app-identifier
            key:
              type: string
              example: app-module-key
            realTimeCheckEnabled:
              type: boolean
              example: 'true'
            enabledLanguageIds:
              type: array
              items:
                type: string
              example:
                - en
                - es
                - pl
                - de
                - fr
                - zh-CN
                - ja
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T07:19:47+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T07:19:47+00:00'
          nullable: true
      type: object
    DictionaryPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/DictionaryOperation'
    DictionaryOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - remove
            - add
        path:
          description: "A JSON Pointer as defined by <a href=\"https://tools.ietf.org/html/rfc6901\" target=\"_blank\">RFC 6901</a>\n\n__Note:__ To delete multiple words with one request, please specify the word indexes in reverse order."
          type: string
          format: json-pointer
          enum:
            - /words/0
      type: object
    DictionaryCollectionResource:
      description: 'Dictionary Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/DictionaryResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    DictionaryResource:
      description: 'Dictionary Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Dictionary'
    Dictionary:
      title: Dictionary
      properties:
        languageId:
          type: string
          example: en
        words:
          type: array
          items:
            type: string
      type: object
    DirectoryPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/DirectoryOperation'
    DirectoryOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /branchId
            - /directoryId
            - /name
            - /title
            - /exportPattern
            - /priority
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/DirectoryOperationReplace'
          test: '#/components/schemas/DirectoryOperationTest'
    DirectoryOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/DirectoryOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
    DirectoryOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/DirectoryOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
    DirectoryCreateForm:
      required:
        - name
      properties:
        name:
          description: "Directory name\n\n__Note:__ Can't contain `\\ / : * ? \" < > |` symbols"
          type: string
          example: main
        branchId:
          description: "Branch identifier. Get via [List Branches](#operation/api.projects.branches.getMany)\n\n__Note:__ Can't be used with `directoryId` in same request"
          type: integer
          example: 34
        directoryId:
          description: "Parent Directory Identifier. Get via [List Directories](#operation/api.projects.directories.getMany)\n\n__Note:__ Can't be used with `branchId` in same request"
          type: integer
          example: 2
        title:
          description: 'Use to provide more details for translators. Title is available in UI only'
          type: string
          example: '<Description materials>'
        exportPattern:
          description: "Directory export pattern. Defines directory name and path in resulting translations bundle\n\n__Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          example: /localization/%locale%/%file_name%
        priority:
          description: 'Defines priority level for each branch'
          type: string
          default: normal
          enum:
            - low
            - normal
            - high
          example: normal
      type: object
    DirectoryCollectionResource:
      description: 'Directory Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/DirectoryResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    DirectoryResource:
      description: 'Directory Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Directory'
    Directory:
      title: Directory
      description: 'Class DirectoryResponseModel'
      properties:
        id:
          type: integer
          example: 4
        projectId:
          type: integer
          example: 2
        branchId:
          type: integer
          example: 34
          nullable: true
        directoryId:
          description: 'Parent directory id'
          type: integer
          example: null
          nullable: true
        name:
          type: string
          example: main
        title:
          description: 'Title for translators'
          type: string
          example: '<Description materials>'
        exportPattern:
          type: string
          example: /localization/%locale%/%file_name%
        path:
          type: string
          example: /main
        priority:
          type: string
          example: normal
        createdAt:
          type: string
          format: date-time
          example: '2019-09-19T14:14:00+00:00'
          nullable: true
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-19T14:14:00+00:00'
          nullable: true
      type: object
    DistributionPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/DistributionOperation'
    DistributionOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /exportMode
            - /name
            - /fileIds
            - /bundleIds
          x-doc-sections:
            - file-based
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/DistributionOperationReplace'
    DistributionOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/DistributionOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    DistributionCreateForm:
      required:
        - name
      properties:
        exportMode:
          description: 'Export mode'
          type: string
          default: default
          enum:
            - default
            - bundle
          example: default
          deprecated: true
        name:
          description: 'Distribution name'
          type: string
          example: 'distribution 1'
        fileIds:
          description: "Files ids\n\n__Note:__ Required for `default` export mode"
          type: array
          items:
            type: integer
          example:
            - 24
            - 25
            - 38
          deprecated: true
        bundleIds:
          description: "Bundles ids. Get via [List Bundles](#operation/api.projects.bundles.getMany)\n\n__Note:__ Required for `bundle` export mode"
          type: array
          items:
            type: integer
          example:
            - 45
            - 62
      type: object
      x-doc-sections:
        - file-based
    DistributionMetadataForm:
      required:
        - hash
      properties:
        hash:
          description: 'Distribution hash'
          type: string
      type: object
    DistributionMetadataResource:
      description: 'Distribution Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/DistributionInfo'
    FileBasedDistributionCollectionResource:
      description: 'Distribution Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/FileBasedDistributionResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    FileBasedDistributionReleaseResource:
      description: 'Distribution Release Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileBasedDistributionRelease'
    FileBasedDistributionResource:
      description: 'Distribution Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileBasedDistribution'
    StringBasedDistributionCollectionResource:
      description: 'Distribution Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/StringBasedDistributionResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    StringBasedDistributionResource:
      description: 'Distribution Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringBasedDistribution'
    DistributionInfo:
      title: 'Distribution Info'
      description: 'Distribution Info'
      properties:
        project:
          properties:
            id:
              type: integer
            wsHash:
              type: string
          type: object
        user:
          properties:
            id:
              type: integer
          type: object
        wsUrl:
          type: string
      type: object
    DistributionRelease:
      title: 'Distribution Release'
      description: 'Class DistributionReleaseResponseModel'
      properties:
        status:
          type: string
          enum:
            - inProgress
            - success
            - failed
          example: success
          nullable: true
        progress:
          type: integer
          example: 100
          nullable: true
        currentLanguageId:
          type: string
          example: uk
          nullable: true
        date:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-23T09:04:29+00:00'
          nullable: true
        error:
          description: 'Only present when status is "failed"'
          properties:
            message:
              type: string
              example: 'This distribution release has no bundles, or the bundles have been removed.'
          type: object
      type: object
    FileBasedDistributionRelease:
      title: 'Distribution Release'
      description: 'Class DistributionReleaseResponseModel'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/DistributionRelease'
        -
          properties:
            currentFileId:
              type: integer
              example: 8
              nullable: true
    FileBasedDistribution:
      title: Distribution
      description: 'Class DistributionResponseModel'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringBasedDistribution'
        -
          properties:
            exportMode:
              type: string
              example: bundle
            fileIds:
              type: array
              items:
                type: integer
              example:
                - 24
                - 25
                - 38
              x-doc-sections:
                - file-based
    StringBasedDistributionRelease:
      title: 'Distribution Release'
      description: 'Class DistributionReleaseResponseModel'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/DistributionRelease'
        -
          properties:
            currentBranchId:
              type: integer
              example: 8
              nullable: true
    StringBasedDistribution:
      title: Distribution
      description: 'Class DistributionResponseModel'
      properties:
        hash:
          type: string
          example: 50fb350641274ba88296f97dc7e3e0c3
        manifestUrl:
          type: string
          example: 'https://distributions.crowdin.net/{distribution_hash}/manifest.json'
        name:
          type: string
          example: 'Export Bundle'
        bundleIds:
          type: array
          items:
            type: integer
          example:
            - 45
            - 62
        createdAt:
          type: string
          format: date-time
          example: '2019-09-16T13:48:04+00:00'
        updatedAt:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-19T13:25:27+00:00'
      type: object
    ExternalQaCheckCollectionResource:
      description: 'External QA Check Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ExternalQaCheckResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ExternalQaCheckResource:
      description: 'External QA Check Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ExternalQaCheck'
    ExternalQaCheck:
      title: 'External QA Check'
      properties:
        id:
          type: integer
          example: 1
        name:
          type: string
          example: 'Test QA check'
        description:
          type: string
          example: 'Do some QA checks'
          nullable: true
        config:
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2024-09-19T14:14:00+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2024-09-19T14:14:00+00:00'
          nullable: true
      type: object
    FieldPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/FieldOperation'
    FieldOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /description
            - /config
            - /entities
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/FieldOperationReplace'
    FieldOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/FieldOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
                -
                  type: array
                  items: { type: string }
                -
                  type: array
                  items: { type: object }
    ListFieldConfig:
      title: 'List Field Config'
      properties:
        options:
          type: array
          items:
            properties:
              label:
                type: string
              value:
                type: string
            type: object
        locations:
          type: array
          items:
            properties:
              place:
                type: string
                enum:
                  - projectCreateModal
                  - projectHeader
                  - projectDetails
                  - projectCrowdsourceDetails
                  - projectSettings
                  - projectTaskEditCreate
                  - projectTaskDetails
                  - projectTaskBoardCard
                  - fileDetails
                  - fileSettings
                  - userEditModal
                  - userDetails
                  - userPopover
                  - stringEditModal
                  - stringDetails
                  - translationUnderContent
                  - termDetails
                  - termEditModal
                  - conceptDetails
                  - conceptEditModal
            type: object
      type: object
    NumberFieldConfig:
      title: 'Number Field Config'
      properties:
        min:
          description: 'Minimal value of the field'
          type: number
        max:
          description: 'Maximum value of the field'
          type: number
        units:
          description: 'Units label that will be display next to input'
          type: string
        locations:
          type: array
          items:
            properties:
              place:
                type: string
                enum:
                  - projectCreateModal
                  - projectHeader
                  - projectDetails
                  - projectCrowdsourceDetails
                  - projectSettings
                  - projectTaskEditCreate
                  - projectTaskDetails
                  - projectTaskBoardCard
                  - fileDetails
                  - fileSettings
                  - userEditModal
                  - userDetails
                  - userPopover
                  - stringEditModal
                  - stringDetails
                  - translationUnderContent
                  - termDetails
                  - termEditModal
                  - conceptDetails
                  - conceptEditModal
            type: object
      type: object
    OtherTypesFieldConfig:
      title: 'Other Type Field Config'
      properties:
        locations:
          type: array
          items:
            properties:
              place:
                type: string
                enum:
                  - projectCreateModal
                  - projectHeader
                  - projectDetails
                  - projectCrowdsourceDetails
                  - projectSettings
                  - projectTaskEditCreate
                  - projectTaskDetails
                  - projectTaskBoardCard
                  - fileDetails
                  - fileSettings
                  - userEditModal
                  - userDetails
                  - userPopover
                  - stringEditModal
                  - stringDetails
                  - translationUnderContent
                  - termDetails
                  - termEditModal
                  - conceptDetails
                  - conceptEditModal
            type: object
      type: object
    FieldConfig:
      title: 'Field Config'
      type: object
      oneOf:
        -
          $ref: '#/components/schemas/ListFieldConfig'
        -
          $ref: '#/components/schemas/NumberFieldConfig'
        -
          $ref: '#/components/schemas/OtherTypesFieldConfig'
    FieldCreateForm:
      required:
        - slug
        - name
        - type
        - entities
        - config
      properties:
        name:
          description: 'Field name'
          type: string
          example: 'Client company'
        slug:
          description: 'Field slug'
          type: string
          example: client-company
        type:
          description: 'Field type'
          type: string
          enum:
            - checkbox
            - radiobuttons
            - date
            - datetime
            - number
            - labels
            - select
            - multiselect
            - text
            - textarea
            - url
          example: select
        description:
          description: 'Field description'
          type: string
          example: 'Client company field is appointed to store info about client company'
        entities:
          description: 'Entities that will be associated with field'
          type: array
          items:
            type: string
            enum:
              - project
              - user
              - task
              - file
              - translation
              - string
              - term
              - concept
            example: task
        config:
          $ref: '#/components/schemas/FieldConfig'
      type: object
    FieldCollectionResource:
      description: 'Field Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/FieldResource'
            pagination:
              $ref: '#/components/schemas/AdvancedPagination'
    FieldResource:
      description: 'Field Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Field'
    Field:
      title: Field
      description: 'Class FieldResponseModel'
      properties:
        id:
          type: integer
          example: 2
        name:
          type: string
          example: 'Custom field'
        slug:
          type: string
          example: custom-field
        description:
          type: string
          example: 'Custom field description'
        type:
          type: string
          example: select
        config:
          type: object
        entities:
          description: 'Entities that will be associated with field'
          type: array
          items:
            type: string
            enum:
              - project
              - user
              - task
              - file
              - translation
              - string
              - term
              - concept
            example: task
        createdAt:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-23T09:04:29+00:00'
        updatedAt:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-23T09:04:29+00:00'
      type: object
    FilePatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/FileOperation'
    FileOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /branchId
            - /directoryId
            - /name
            - /title
            - /context
            - /priority
            - /importOptions/cleanTagsAggressively
            - /importOptions/translateHiddenText
            - /importOptions/translateHyperlinkUrls
            - /importOptions/translateHiddenRowsAndColumns
            - /importOptions/importNotes
            - /importOptions/importHiddenSlides
            - /importOptions/firstLineContainsHeader
            - /importOptions/importKeyAsSource
            - /importOptions/importTranslations
            - /importOptions/scheme
            - /importOptions/translateContent
            - /importOptions/importHiddenSheets
            - /importOptions/translateAttributes
            - /importOptions/contentSegmentation
            - /importOptions/translatableElements
            - /importOptions/srxStorageId
            - /importOptions/hideAttributeValues
            - /importOptions/customSegmentation
            - /importOptions/excludedElements
            - /importOptions/excludeIncludeDirectives
            - /importOptions/excludedFrontMatterElements
            - /importOptions/excludeCodeBlocks
            - /importOptions/inlineTags
            - /importOptions/inlineHyperlinkText
            - /importOptions/translateDocProperties
            - /importOptions/translateComments
            - /importOptions/ignoreWhitespaceStyles
            - /importOptions/addTabAsCharacter
            - /importOptions/addLineSeparatorAsCharacter
            - /importOptions/lineSeparatorReplacement
            - /importOptions/replaceNoBreakHyphenTag
            - /importOptions/ignoreSoftHyphenTag
            - /importOptions/complexFieldDefinitionsToExtract
            - /importOptions/translateWordHeadersFooters
            - /importOptions/translateWordGraphicName
            - /importOptions/translateWordGraphicDescription
            - /importOptions/ignoreWordFontColors
            - /importOptions/wordFontColorsMinIgnoranceThreshold
            - /importOptions/wordFontColorsMaxIgnoranceThreshold
            - /importOptions/excludeWordStyles
            - /importOptions/translateWordInExcludeStyleMode
            - /importOptions/wordHighlightColors
            - /importOptions/translateWordInExcludeHighlightMode
            - /importOptions/translateWordExcludeColors
            - /importOptions/wordExcludedColors
            - /importOptions/translateExcelCellsCopied
            - /importOptions/translateExcelSheetNames
            - /importOptions/excelExcludedColors
            - /importOptions/translateExcelDiagramData
            - /importOptions/translateExcelDrawings
            - /exportOptions/exportPattern
            - /exportOptions/escapeQuotes
            - /exportOptions/exportQuotes
            - /exportOptions/escapeSpecialCharacters
            - /exportOptions/allowWordStyleOptimization
            - /exportOptions/translateExcelExcludeColors
            - /excludedTargetLanguages
            - /attachLabelIds
            - /detachLabelIds
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/FileOperationReplace'
          test: '#/components/schemas/FileOperationTest'
    FileOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/FileOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: array
                  items: { type: string }
                -
                  type: array
                  items: { type: integer }
    FileOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/FileOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
    ProjectFileType:
      description: "Values available:\n- empty value or 'auto' — Try to detect file type by extension or MIME type\n- 'android' — Android (*.xml)\n- 'macosx' — Mac OS X / iOS (*.strings)\n- 'resx' — .NET, Windows Phone (*.resx)\n- 'properties' — Java (*.properties)\n- 'gettext' — GNU GetText (*.po, *.pot)\n- 'yaml' — Ruby On Rails (*.yaml, *.yml)\n- 'php' — Hypertext Preprocessor (*.php)\n- 'json' — Generic JSON (*.json)\n- 'xml' — Generic XML (*.xml)\n- 'ini' — Generic INI (*.ini)\n- 'rc' — Windows Resources (*.rc)\n- 'resw' — Windows 8 Metro (*.resw)\n- 'resjson' — Windows 8 Metro (*.resjson)\n- 'qtts' — Nokia Qt (*.ts)\n- 'joomla' — Joomla localizable resources (*.ini)\n- 'chrome' — Google Chrome Extension (*.json)\n- 'dtd' — Mozilla DTD (*.dtd)\n- 'dklang' — Delphi DKLang (*.dklang)\n- 'flex' — Flex (*.properties)\n- 'nsh' — NSIS Installer Resources (*.nsh)\n- 'wxl' — WiX Installer (*.wxl)\n- 'xliff' — XLIFF (*.xliff, *.xlf)\n- 'xliff_two' — XLIFF 2.0 (*.xliff, *.xlf)\n- 'html' — HTML (*.html, *.htm, *.xhtml, *.xhtm, *.xht, *.hbs, *.liquid)\n- 'haml' — Haml (*.haml)\n- 'txt' — Plain Text (*.txt)\n- 'csv' — Comma Separated Values (*.csv)\n- 'md' — Markdown (*.md, *.text, *.markdown...)\n- 'flsnp' — MadCap Flare (*.flnsp, .flpgpl .fltoc)\n- 'fm_html' — Jekyll HTML (*.html)\n- 'fm_md' — Jekyll Markdown (*.md)\n- 'mediawiki' — MediaWiki (*.wiki, *.wikitext, *.mediawiki)\n- 'docx' — Microsoft Office, OpenOffice.org Documents, Adobe InDesign, Adobe FrameMaker(*.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm, *.odt, *.ods, *.odg, *.odp, *.imdl, *.mif)\n- 'vsdx' — Microsoft Visio (*.vsdx, *.vsdm)\n- 'xlsx' — Microsoft Excel (*.xlsx)\n- 'sbv' — Youtube .sbv (*.sbv)\n- 'properties_play' — Play Framework\n- 'properties_xml' — Java Application (*.xml)\n- 'maxthon' — Maxthon Browser (*.ini)\n- 'go_json' — Go (*.gotext.json)\n- 'dita' — DITA Document (*.dita, *.ditamap)\n- 'mif' — Adobe FrameMaker (*.mif)\n- 'idml' — Adobe InDesign (*.idml)\n- 'stringsdict' — iOS (*.stringsdict)\n- 'plist' — Mac OS property list (*.plist)\n- 'vtt' — Video Subtitling and WebVTT (*.vtt)\n- 'vdf' — Steamworks Localization Valve Data File (*.vdf)\n- 'srt' — SubRip .srt (*.srt)\n- 'stf' — Salesforce (*.stf)\n- 'toml' — Toml (*.toml)\n- 'contentful_rt' — Contentful (*.json)\n- 'svg' — SVG (*.svg)\n- 'js' — JavaScript (*.js)\n- 'coffee' — CoffeeScript (*.coffee)\n- 'nestjs_i18n' - NestJS i18n\n- 'loc' — LOC (*.loc)\n\n__Note__: Use `docx` type to import each cell as a separate source string for XLSX file"
      type: string
      default: auto
      enum:
        - auto
        - android
        - macosx
        - resx
        - properties
        - gettext
        - yaml
        - php
        - json
        - xml
        - ini
        - rc
        - resw
        - resjson
        - qtts
        - joomla
        - chrome
        - dtd
        - dklang
        - flex
        - nsh
        - wxl
        - xliff
        - xliff_two
        - html
        - haml
        - txt
        - csv
        - md
        - mdx_v1
        - mdx_v2
        - flsnp
        - fm_html
        - fm_md
        - mediawiki
        - docx
        - vsdx
        - xlsx
        - sbv
        - properties_play
        - properties_xml
        - maxthon
        - go_json
        - dita
        - idml
        - mif
        - stringsdict
        - plist
        - vtt
        - vdf
        - srt
        - stf
        - toml
        - contentful_rt
        - svg
        - js
        - coffee
        - ts
        - i18next_json
        - xaml
        - arb
        - adoc
        - fbt
        - webxml
        - nestjs_i18n
        - loc
      example: xliff
    SpreadsheetLanguageCodeColumnNumber:
      title: 'Language Code Column Number'
      description: 'Defines column number for the specified language. Use language identifier as a key (e.g., `en`, `de`) and column number as a value'
      type: integer
    SpreadsheetFileImportSchema:
      title: 'Spreadsheet File Import Schema'
      description: 'Defines data columns mapping. The column numbering starts at 0'
      properties:
        none:
          description: 'Defines empty column'
          type: integer
        identifier:
          description: 'Defines identifier column number'
          type: integer
        sourcePhrase:
          description: 'Defines source phrase column number'
          type: integer
        sourceOrTranslation:
          description: 'Defines source or translation column number'
          type: integer
        translation:
          description: 'Defines translation column number'
          type: integer
        context:
          description: 'Defines context column number'
          type: integer
        maxLength:
          description: 'Defines max length column number'
          type: integer
        translatable:
          description: 'Defines visible status `yes` as show and `no` as hidden'
          type: integer
        labels:
          description: 'Defines labels column number'
          type: integer
      type: object
      example:
        identifier: 0
        sourcePhrase: 1
        en: 2
        de: 3
      additionalProperties:
        $ref: '#/components/schemas/SpreadsheetLanguageCodeColumnNumber'
    SpreadsheetFileImportOptions:
      title: 'Spreadsheet File Import Options'
      properties:
        firstLineContainsHeader:
          description: 'Defines whether the file includes a first-row header that should not be imported'
          type: boolean
          default: false
          example: false
        importHiddenSheets:
          description: 'Defines whether hidden sheets that should be imported'
          type: boolean
          default: true
          example: false
        importHiddenRows:
          description: 'Defines whether hidden rows that should be imported'
          type: boolean
          default: true
          example: false
        importEqSuggestions:
          description: 'Defines whether to import translations identical to sources'
          type: boolean
          default: false
          example: true
        autoApproveImported:
          description: 'Defines whether to auto-approve imported translations'
          type: boolean
          default: false
          example: true
        translateHidden:
          description: 'Defines whether to import translations for hidden strings'
          type: boolean
          default: false
          example: false
        addToTm:
          description: 'Defines whether to add imported translations to TM'
          type: boolean
          default: true
          example: true
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n  __Important!__ This option disables the possibility to upload existing translations for Spreadsheet files when enabled."
          type: boolean
          default: false
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        importTranslations:
          description: 'Defines whether to import translations from the file'
          type: boolean
          default: false
          example: true
        scheme:
          $ref: '#/components/schemas/SpreadsheetFileImportSchema'
      type: object
    XmlFileImportOptions:
      title: 'Xml File Import Options'
      properties:
        translateContent:
          description: 'Defines whether to translate texts placed inside the tags'
          type: boolean
          default: true
        translateAttributes:
          description: 'Defines whether to translate tags attributes'
          type: boolean
          default: true
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n  __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        translatableElements:
          description: "This is an array of strings, where each item is the XPaths to DOM element that should be imported.\n\nSupported XPath patterns:\n- `/path/to/node` — Absolute path to a specific node\n- `/path/to/attribute[@attr]` — Absolute path to an attribute\n- `//node` — All nodes with the specified name\n- `//[@attr]` — All elements with the specified attribute\n- `nodeone/nodetwo` — Relative path\n- `/nodeone//nodetwo` — Mixed absolute and descendant path\n- `//node[@attr]` — All nodes with the specified name and attribute"
          type: array
          items:
            type: string
          example:
            - /path/to/node
            - '//node[@attr]'
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          example: 61
      type: object
    WebXmlFileImportOptions:
      title: 'WebXml File Import Options'
      properties:
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        hideAttributeValues:
          description: 'HTML attributes (e.g., src, href, data) will be imported as hidden strings.'
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n   Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    DocxFileImportOptions:
      title: 'Docx File Import Options'
      properties:
        cleanTagsAggressively:
          description: "When checked, strips additional formatting tags related to text spacing.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        translateHiddenText:
          description: "When checked, exposes hidden text for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        translateHyperlinkUrls:
          description: "When checked, exposes hidden hyperlinks for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        translateHiddenRowsAndColumns:
          description: "When checked, exposes hidden rows and columns for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        importNotes:
          description: "When checked, expose slide notes for translation.\n\n__Note:__ Works only for files with the following extensions: *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: true
        importHiddenSlides:
          description: "When checked, exposes hidden slides for translation.\n\n__Note:__ Works only for files with the following extensions: *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n  __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        translateDocProperties:
          description: "When checked, exposes document properties such as title, subject, and creator for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        translateComments:
          description: "When checked, exposes comments for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: true
        ignoreWhitespaceStyles:
          description: "When checked, formatting that differs only in whitespace no longer produces separate tags.\n\n__Note:__ Can be set only when `cleanTagsAggressively` is enabled"
          type: boolean
          default: false
        addTabAsCharacter:
          description: 'When checked, a tab inside a text run is exposed as a character instead of a tag.'
          type: boolean
          default: false
        addLineSeparatorAsCharacter:
          description: 'When checked, a line break inside a text run is exposed as `lineSeparatorReplacement` instead of a tag.'
          type: boolean
          default: false
        lineSeparatorReplacement:
          description: "Character that replaces a line break when `addLineSeparatorAsCharacter` is enabled.\n\n__Note:__ Must be exactly one character"
          type: string
          default: "\n"
          example: "\n"
        replaceNoBreakHyphenTag:
          description: 'When checked, a non-breaking hyphen is exposed as a character instead of a tag.'
          type: boolean
          default: false
        ignoreSoftHyphenTag:
          description: 'When checked, soft hyphens are removed instead of being exposed as tags.'
          type: boolean
          default: false
        complexFieldDefinitionsToExtract:
          description: "Word complex field types whose text is exposed for translation.\n\n__Note:__ `HYPERLINK` is always extracted and can't be removed"
          type: array
          items:
            type: string
          default: []
          example:
            - PAGE
        translateWordHeadersFooters:
          description: "When checked, exposes headers and footers for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        translateWordGraphicName:
          description: "When checked, exposes the name of a shape or image for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: true
        translateWordGraphicDescription:
          description: "When checked, exposes the alternative text of a shape or image for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        ignoreWordFontColors:
          description: "When checked, excludes text whose font color falls between `wordFontColorsMinIgnoranceThreshold` and `wordFontColorsMaxIgnoranceThreshold` from translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        wordFontColorsMinIgnoranceThreshold:
          description: "Darkest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means black. Must not be lighter than `wordFontColorsMaxIgnoranceThreshold` in any color channel.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: string
          default: ''
          example: A6A6A6
        wordFontColorsMaxIgnoranceThreshold:
          description: "Lightest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means white.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: string
          default: ''
          example: FFFFFF
        excludeWordStyles:
          description: "Paragraph style names singled out by `translateWordInExcludeStyleMode`, for example `Heading1`.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - Heading1
        translateWordInExcludeStyleMode:
          description: "How `excludeWordStyles` is read. If `true`, the listed styles are excluded from translation; if `false`, only they are translated.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        wordHighlightColors:
          description: "Word highlight colors singled out by `translateWordInExcludeHighlightMode`. One of: `black`, `blue`, `cyan`, `green`, `magenta`, `red`, `yellow`, `white`, `darkBlue`, `darkCyan`, `darkGreen`, `darkMagenta`, `darkRed`, `darkYellow`, `darkGray`, `lightGray`, `none`.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - yellow
        translateWordInExcludeHighlightMode:
          description: "How `wordHighlightColors` is read. If `true`, text with the listed highlights is excluded from translation; if `false`, only it is translated.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        translateWordExcludeColors:
          description: "When checked, excludes text whose color is listed in `wordExcludedColors` from translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        wordExcludedColors:
          description: "Text colors excluded from translation when `translateWordExcludeColors` is enabled, each six hexadecimal digits with an optional leading hash.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - FF0000
        translateExcelCellsCopied:
          description: "When checked, a cell whose text is shared with another cell is exposed once for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: true
        translateExcelSheetNames:
          description: "When checked, exposes worksheet names for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        excelExcludedColors:
          description: "Cell fill colors whose cells are excluded from translation, each the six-digit RGB with an optional leading hash, not the eight-digit ARGB stored in the file.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: array
          items:
            type: string
          default: []
          example:
            - A6A6A6
        translateExcelDiagramData:
          description: "When checked, exposes text inside SmartArt and diagram data for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        translateExcelDrawings:
          description: "When checked, exposes text inside drawings and shapes on a worksheet for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
      type: object
    VsdxFileImportOptions:
      title: 'Vsdx File Import Options'
      properties:
        cleanTagsAggressively:
          description: 'When checked, strips additional formatting tags related to text spacing.'
          type: boolean
          default: false
        translateHyperlinkUrls:
          description: 'When checked, exposes hidden hyperlinks for translation.'
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    IdmlFileImportOptions:
      title: 'Idml File Import Options'
      properties:
        inlineHyperlinkText:
          description: "When checked, a hyperlink's text is extracted as part of the surrounding sentence so it can be translated in context, instead of appearing as a separate non-editable tag.\n\n__Note:__ Works only for files imported with the `idml8` parser."
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    HtmlFileImportOptions:
      title: 'Html File Import Options'
      properties:
        excludedElements:
          description: 'Specify CSS selectors for elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - code
            - 'pre > code'
            - .code-block
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        hideAttributeValues:
          description: 'HTML attributes (e.g., src, href, data) will be imported as hidden strings.'
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    StringCatalogImportOptions:
      title: 'StringCatalog File Import Options'
      properties:
        importKeyAsSource:
          description: 'Determines whether to import the key as source string if it does not exist.'
          type: boolean
          default: true
        importTranslations:
          description: 'Defines whether to import translations from the file'
          type: boolean
          default: false
      type: object
    AdocFileImportOptions:
      title: 'Adoc File Import Options'
      properties:
        excludeIncludeDirectives:
          description: 'Skip Include Directives'
          type: boolean
          default: false
      type: object
    FMHtmlFileImportOptions:
      title: 'Html with Front Matter File Import Options'
      properties:
        excludedElements:
          description: 'Specify CSS selectors for elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - code
            - 'pre > code'
            - .code-block
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        hideAttributeValues:
          description: 'HTML attributes (e.g., src, href, data) will be imported as hidden strings.'
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    MdFileImportOptions:
      title: 'Md File Import Options'
      properties:
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        excludeCodeBlocks:
          description: 'Defines whether to import code blocks.'
          type: boolean
          default: false
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n   Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    MdxV1FileImportOptions:
      title: 'Mdx v1 File Import Options'
      properties:
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        excludeCodeBlocks:
          description: 'Defines whether to import code blocks.'
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    MdxV2FileImportOptions:
      title: 'Mdx v2 File Import Options'
      properties:
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        excludeCodeBlocks:
          description: 'Defines whether to import code blocks.'
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    VdfFileImportOptions:
      title: 'Vdf File Import Options'
      properties:
        convertIcu:
          description: 'Defines whether to convert placeholders to the ICU MessageFormat syntax.'
          type: boolean
          default: true
        addGenderArgument:
          description: "Defines whether to append _gender suffix to variable names when converting gender ICU to ICU MessageFormat.\n\n__Note:__ Can be enabled only when `convertIcu` is `true`."
          type: boolean
          default: false
      type: object
    XmlFileUpdateOptions:
      title: 'Xml File Import Options'
      properties:
        translateContent:
          description: 'Defines whether to translate texts placed inside the tags'
          type: boolean
          default: true
        translateAttributes:
          description: 'Defines whether to translate tags attributes'
          type: boolean
          default: true
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n  __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          example: 61
      type: object
    DocxFileUpdateOptions:
      title: 'Docx File Import Options'
      properties:
        cleanTagsAggressively:
          description: "When checked, strips additional formatting tags related to text spacing.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        translateHiddenText:
          description: "When checked, exposes hidden text for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        translateHyperlinkUrls:
          description: "When checked, exposes hidden hyperlinks for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        translateHiddenRowsAndColumns:
          description: "When checked, exposes hidden rows and columns for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        importNotes:
          description: "When checked, expose slide notes for translation.\n\n__Note:__ Works only for files with the following extensions: *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: true
        importHiddenSlides:
          description: "When checked, exposes hidden slides for translation.\n\n__Note:__ Works only for files with the following extensions: *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        translateDocProperties:
          description: "When checked, exposes document properties such as title, subject, and creator for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        translateComments:
          description: "When checked, exposes comments for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: true
        ignoreWhitespaceStyles:
          description: "When checked, formatting that differs only in whitespace no longer produces separate tags.\n\n__Note:__ Can be set only when `cleanTagsAggressively` is enabled"
          type: boolean
          default: false
        addTabAsCharacter:
          description: 'When checked, a tab inside a text run is exposed as a character instead of a tag.'
          type: boolean
          default: false
        addLineSeparatorAsCharacter:
          description: 'When checked, a line break inside a text run is exposed as `lineSeparatorReplacement` instead of a tag.'
          type: boolean
          default: false
        lineSeparatorReplacement:
          description: "Character that replaces a line break when `addLineSeparatorAsCharacter` is enabled.\n\n__Note:__ Must be exactly one character"
          type: string
          default: "\n"
          example: "\n"
        replaceNoBreakHyphenTag:
          description: 'When checked, a non-breaking hyphen is exposed as a character instead of a tag.'
          type: boolean
          default: false
        ignoreSoftHyphenTag:
          description: 'When checked, soft hyphens are removed instead of being exposed as tags.'
          type: boolean
          default: false
        complexFieldDefinitionsToExtract:
          description: "Word complex field types whose text is exposed for translation.\n\n__Note:__ `HYPERLINK` is always extracted and can't be removed"
          type: array
          items:
            type: string
          default: []
          example:
            - PAGE
        translateWordHeadersFooters:
          description: "When checked, exposes headers and footers for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        translateWordGraphicName:
          description: "When checked, exposes the name of a shape or image for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: true
        translateWordGraphicDescription:
          description: "When checked, exposes the alternative text of a shape or image for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        ignoreWordFontColors:
          description: "When checked, excludes text whose font color falls between `wordFontColorsMinIgnoranceThreshold` and `wordFontColorsMaxIgnoranceThreshold` from translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        wordFontColorsMinIgnoranceThreshold:
          description: "Darkest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means black. Must not be lighter than `wordFontColorsMaxIgnoranceThreshold` in any color channel.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: string
          default: ''
          example: A6A6A6
        wordFontColorsMaxIgnoranceThreshold:
          description: "Lightest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means white.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: string
          default: ''
          example: FFFFFF
        excludeWordStyles:
          description: "Paragraph style names singled out by `translateWordInExcludeStyleMode`, for example `Heading1`.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - Heading1
        translateWordInExcludeStyleMode:
          description: "How `excludeWordStyles` is read. If `true`, the listed styles are excluded from translation; if `false`, only they are translated.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        wordHighlightColors:
          description: "Word highlight colors singled out by `translateWordInExcludeHighlightMode`. One of: `black`, `blue`, `cyan`, `green`, `magenta`, `red`, `yellow`, `white`, `darkBlue`, `darkCyan`, `darkGreen`, `darkMagenta`, `darkRed`, `darkYellow`, `darkGray`, `lightGray`, `none`.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - yellow
        translateWordInExcludeHighlightMode:
          description: "How `wordHighlightColors` is read. If `true`, text with the listed highlights is excluded from translation; if `false`, only it is translated.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        translateWordExcludeColors:
          description: "When checked, excludes text whose color is listed in `wordExcludedColors` from translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        wordExcludedColors:
          description: "Text colors excluded from translation when `translateWordExcludeColors` is enabled, each six hexadecimal digits with an optional leading hash.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - FF0000
        translateExcelCellsCopied:
          description: "When checked, a cell whose text is shared with another cell is exposed once for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: true
        translateExcelSheetNames:
          description: "When checked, exposes worksheet names for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        excelExcludedColors:
          description: "Cell fill colors whose cells are excluded from translation, each the six-digit RGB with an optional leading hash, not the eight-digit ARGB stored in the file.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: array
          items:
            type: string
          default: []
          example:
            - A6A6A6
        translateExcelDiagramData:
          description: "When checked, exposes text inside SmartArt and diagram data for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        translateExcelDrawings:
          description: "When checked, exposes text inside drawings and shapes on a worksheet for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
      type: object
    HtmlFileUpdateOptions:
      title: 'Html File Import Options'
      properties:
        excludedElements:
          description: 'Specify CSS selectors for elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - code
            - 'pre > code'
            - .code-block
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    FMHtmlFileUpdateOptions:
      title: 'Html with Front Matter File Import Options'
      properties:
        excludedElements:
          description: 'Specify CSS selectors for elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - code
            - 'pre > code'
            - .code-block
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    MdxV1FileUpdateOptions:
      title: 'Mdx v1 File Import Options'
      properties:
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        excludeCodeBlocks:
          description: 'Defines whether to import code blocks.'
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    MdxV2FileUpdateOptions:
      title: 'Mdx v2 File Import Options'
      properties:
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        excludeCodeBlocks:
          description: 'Defines whether to import code blocks.'
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
      type: object
    OtherFilesImportOptions:
      title: 'Other Files Import Options'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments. Only for __xml__, __flsnp__, __docx__, __mif__, __idml__, __dita__, __android8__, __xliff13__, __xliff_two4__ files.\n\n__Note:__ When Content segmentation is enabled, the translation upload is handled by an experimental machine learning technology. To achieve the best results, we recommend uploading translation files with the same or as close as possible file structure as in source files."
          type: boolean
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n  Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          example: 61
      type: object
    GeneralFileExportOptions:
      title: 'General File Export Options'
      properties:
        exportPattern:
          description: "File export pattern. Defines file name and path in resulting translations bundle\n\n__Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
      type: object
    PropertyFileExportOptions:
      title: 'Property File Export Options'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            escapeQuotes:
              description: "Values available:\n- 0 - Do not escape single quote\n- 1 - Escape single quote by another single quote\n- 2 - Escape single quote by a backslash\n- 3 - Escape single quote by another single quote only in strings containing variables (`{0}`)"
              type: integer
              enum:
                - 0
                - 1
                - 2
                - 3
            escapeSpecialCharacters:
              description: "Defines whether any special characters (=, :, ! and #) should be escaped by backslash in exported translations. You can add escape_special_characters per-file option.\n\nAcceptable values are: 0, 1. Default is 0.\n- 0 - Do not escape special characters\n- 1 - Escape special characters by a backslash"
              type: integer
              enum:
                - 0
                - 1
    MdFileExportOptions:
      title: 'Md File Export Options'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            strongMarker:
              description: 'Marker to use for strong.'
              type: string
              default: asterisk
              enum:
                - asterisk
                - underscore
            emphasisMarker:
              description: 'Marker to use for emphasis.'
              type: string
              default: underscore
              enum:
                - asterisk
                - underscore
            unorderedListBullet:
              description: 'Marker to use for unordered list bullet.'
              type: string
              default: dash
              enum:
                - asterisks
                - plus
                - dash
            tableColumnWidth:
              description: 'Table formatting.'
              type: string
              default: evenly_distribute_cells
              enum:
                - consolidate
                - evenly_distribute_cells
            frontMatterQuotes:
              description: 'Export front matter values in quotes.'
              type: string
              default: auto
              enum:
                - auto
                - single
                - double
    MdxV1FileExportOptions:
      title: 'Mdx v1 File Export Options'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            strongMarker:
              description: 'Marker to use for strong.'
              type: string
              default: asterisk
              enum:
                - asterisk
                - underscore
            emphasisMarker:
              description: 'Marker to use for emphasis.'
              type: string
              default: underscore
              enum:
                - asterisk
                - underscore
            unorderedListBullet:
              description: 'Marker to use for unordered list bullet.'
              type: string
              default: dash
              enum:
                - asterisks
                - plus
                - dash
            tableColumnWidth:
              description: 'Table formatting.'
              type: string
              default: evenly_distribute_cells
              enum:
                - consolidate
                - evenly_distribute_cells
    MdxV2FileExportOptions:
      title: 'Mdx v2 File Export Options'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            strongMarker:
              description: 'Marker to use for strong.'
              type: string
              default: asterisk
              enum:
                - asterisk
                - underscore
            emphasisMarker:
              description: 'Marker to use for emphasis.'
              type: string
              default: underscore
              enum:
                - asterisk
                - underscore
            unorderedListBullet:
              description: 'Marker to use for unordered list bullet.'
              type: string
              default: dash
              enum:
                - asterisks
                - plus
                - dash
            tableColumnWidth:
              description: 'Table formatting.'
              type: string
              default: evenly_distribute_cells
              enum:
                - consolidate
                - evenly_distribute_cells
    DocxFileExportOptions:
      title: 'Docx File Export Options'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            allowWordStyleOptimization:
              description: 'When checked, run properties in the exported document are minified against the style definitions instead of being kept verbatim.'
              type: boolean
              default: true
            translateExcelExcludeColors:
              description: "When checked, excludes colored text runs inside a spreadsheet cell from translation.\n\n__Note:__ Applied when the file is parsed, even though it is set through `exportOptions`"
              type: boolean
              default: false
    JavaScriptFileExportOptions:
      title: 'JavaScript File Export Options'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            exportQuotes:
              description: "Acceptable values are: 'single', 'double'. Default is 'single'.\n- 'single' - Output will be enclosed in single quotes\n- 'double' - Output will be enclosed in double quotes"
              type: string
              enum:
                - single
                - double
    FileImportOptions:
      title: 'File Import Options'
      type: object
      example:
        firstLineContainsHeader: true
        importHiddenSheets: true
        contentSegmentation: false
        scheme:
          identifier: 0
          sourcePhrase: 1
          en: 2
          de: 3
      oneOf:
        -
          $ref: '#/components/schemas/SpreadsheetFileImportOptions'
        -
          $ref: '#/components/schemas/XmlFileImportOptions'
        -
          $ref: '#/components/schemas/WebXmlFileImportOptions'
        -
          $ref: '#/components/schemas/DocxFileImportOptions'
        -
          $ref: '#/components/schemas/VsdxFileImportOptions'
        -
          $ref: '#/components/schemas/IdmlFileImportOptions'
        -
          $ref: '#/components/schemas/HtmlFileImportOptions'
        -
          $ref: '#/components/schemas/FMHtmlFileImportOptions'
        -
          $ref: '#/components/schemas/MdxV1FileImportOptions'
        -
          $ref: '#/components/schemas/MdxV2FileImportOptions'
        -
          $ref: '#/components/schemas/MdFileImportOptions'
        -
          $ref: '#/components/schemas/StringCatalogImportOptions'
        -
          $ref: '#/components/schemas/AdocFileImportOptions'
        -
          $ref: '#/components/schemas/VdfFileImportOptions'
        -
          $ref: '#/components/schemas/OtherFilesImportOptions'
    FileUpdateImportOptions:
      title: 'File Import Options'
      type: object
      example:
        firstLineContainsHeader: true
        importHiddenSheets: true
        contentSegmentation: false
        scheme:
          identifier: 0
          sourcePhrase: 1
          en: 2
          de: 3
      oneOf:
        -
          $ref: '#/components/schemas/SpreadsheetFileImportOptions'
        -
          $ref: '#/components/schemas/XmlFileUpdateOptions'
        -
          $ref: '#/components/schemas/WebXmlFileImportOptions'
        -
          $ref: '#/components/schemas/DocxFileUpdateOptions'
        -
          $ref: '#/components/schemas/VsdxFileImportOptions'
        -
          $ref: '#/components/schemas/IdmlFileImportOptions'
        -
          $ref: '#/components/schemas/HtmlFileUpdateOptions'
        -
          $ref: '#/components/schemas/FMHtmlFileUpdateOptions'
        -
          $ref: '#/components/schemas/MdFileImportOptions'
        -
          $ref: '#/components/schemas/MdxV1FileUpdateOptions'
        -
          $ref: '#/components/schemas/MdxV2FileUpdateOptions'
        -
          $ref: '#/components/schemas/VdfFileImportOptions'
        -
          $ref: '#/components/schemas/OtherFilesImportOptions'
    FileExportOptions:
      title: 'File Export Options'
      type: object
      example:
        escapeQuotes: 3
      oneOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          $ref: '#/components/schemas/PropertyFileExportOptions'
        -
          $ref: '#/components/schemas/JavaScriptFileExportOptions'
        -
          $ref: '#/components/schemas/MdFileExportOptions'
        -
          $ref: '#/components/schemas/MdxV1FileExportOptions'
        -
          $ref: '#/components/schemas/MdxV2FileExportOptions'
        -
          $ref: '#/components/schemas/DocxFileExportOptions'
    FileCreateForm:
      required:
        - storageId
        - name
      properties:
        storageId:
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          type: integer
          format: int64
          example: 61
        name:
          description: "File name\n\n__Note:__ Can't contain `\\ / : * ? \" < > |` symbols.\n\n  `ZIP` files are not allowed."
          type: string
          example: umbrella_app.xliff
        branchId:
          description: "Branch Identifier — defines branch to which file will be added. Get via [List Branches](#operation/api.projects.branches.getMany)\n\n__Note:__ Can't be used with `directoryId` in same request"
          type: integer
          example: 34
        directoryId:
          description: "Directory Identifier — defines directory to which file will be added. Get via [List Directories](#operation/api.projects.directories.getMany)\n\n__Note:__ Can't be used with `branchId` in same request"
          type: integer
          example: 4
        title:
          description: 'Use to provide more details for translators. Title is available in UI only'
          type: string
          example: source_app_info
        context:
          description: 'Use to provide context about whole file'
          type: string
          example: 'Additional context valuable for translators'
        type:
          $ref: '#/components/schemas/ProjectFileType'
        parserVersion:
          description: "Using latest parser version by default.\n\n__Note:__ Must be used together with `type`"
          type: integer
          example: 1
        importOptions:
          $ref: '#/components/schemas/FileImportOptions'
        exportOptions:
          $ref: '#/components/schemas/FileExportOptions'
        excludedTargetLanguages:
          description: 'Set Target Languages the file should not be translated into. Do not use this option if the file should be available for all project languages.'
          type: array
          items:
            type: string
          example:
            - en
            - es
            - pl
          nullable: true
        attachLabelIds:
          description: 'Attach labels to strings. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
      type: object
    FileReplaceFromStorageForm:
      title: 'Replace File From Storage'
      required:
        - storageId
      properties:
        storageId:
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          type: integer
          format: int64
          example: 61
        name:
          description: "File name\n\n __Note:__ Can't contain `\\ / : * ? \" < > |` symbols."
          type: string
          example: umbrella_app.xliff
        updateOption:
          description: 'Defines whether to keep existing translations and approvals for updated strings'
          type: string
          default: clear_translations_and_approvals
          enum:
            - clear_translations_and_approvals
            - keep_translations
            - keep_translations_and_approvals
        importOptions:
          $ref: '#/components/schemas/FileUpdateImportOptions'
        exportOptions:
          $ref: '#/components/schemas/FileExportOptions'
        attachLabelIds:
          description: 'Attach labels to updated strings. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
        detachLabelIds:
          description: 'Detach labels from updated strings. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
        replaceModifiedContext:
          description: 'Enable to replace context, that have been modified in Crowdin.'
          type: boolean
          default: false
          example: false
      type: object
    FileRestoreForm:
      title: 'Restore File'
      required:
        - revisionId
      properties:
        revisionId:
          description: 'Revision Identifier. Get via [List File Revisions](#operation/api.projects.files.revisions.getMany)'
          type: integer
      type: object
    CrowdinFileCollectionResource:
      description: 'File Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinFileResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinFileInfoCollectionResource:
      description: 'File Info Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinFileInfoResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinFileInfoResource:
      description: 'File Info Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileInfo'
    CrowdinFileResource:
      description: 'File Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/File'
    NodeDeleteResource:
      description: 'Node Delete Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/NodeDeleteResponseModel'
    AdocFileImportOptionsResponseModel:
      title: 'Adoc File Import Options'
      properties:
        contentSegmentation:
          type: boolean
          example: true
        customSegmentation:
          type: boolean
          example: false
        excludeIncludeDirectives:
          type: boolean
          example: false
      type: object
    CustomSegmentationImportOptionsResponseModel:
      title: 'Custom Segmentation File Import Options'
      properties:
        customSegmentation:
          type: boolean
          example: true
      type: object
    Docx15FileImportOptionsResponseModel:
      title: 'Docx15 File Import Options'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/DocxFileImportOptionsResponseModel'
        -
          properties:
            translateDocProperties:
              description: 'When checked, exposes document properties such as title, subject, and creator for translation.'
              type: boolean
              default: false
            translateComments:
              description: 'When checked, exposes comments for translation.'
              type: boolean
              default: true
            ignoreWhitespaceStyles:
              description: "When checked, formatting that differs only in whitespace no longer produces separate tags.\n\n__Note:__ Can be set only when `cleanTagsAggressively` is enabled"
              type: boolean
              default: false
            addTabAsCharacter:
              description: 'When checked, a tab inside a text run is exposed as a character instead of a tag.'
              type: boolean
              default: false
            addLineSeparatorAsCharacter:
              description: 'When checked, a line break inside a text run is exposed as `lineSeparatorReplacement` instead of a tag.'
              type: boolean
              default: false
            lineSeparatorReplacement:
              description: "Character that replaces a line break when `addLineSeparatorAsCharacter` is enabled.\n\n__Note:__ Must be exactly one character"
              type: string
              default: "\n"
              example: "\n"
            replaceNoBreakHyphenTag:
              description: 'When checked, a non-breaking hyphen is exposed as a character instead of a tag.'
              type: boolean
              default: false
            ignoreSoftHyphenTag:
              description: 'When checked, soft hyphens are removed instead of being exposed as tags.'
              type: boolean
              default: false
            complexFieldDefinitionsToExtract:
              description: "Word complex field types whose text is exposed for translation.\n\n__Note:__ `HYPERLINK` is always extracted and can't be removed"
              type: array
              items:
                type: string
              default: []
              example:
                - PAGE
            translateWordHeadersFooters:
              description: 'When checked, exposes headers and footers for translation.'
              type: boolean
              default: true
            translateWordGraphicName:
              description: 'When checked, exposes the name of a shape or image for translation.'
              type: boolean
              default: true
            translateWordGraphicDescription:
              description: 'When checked, exposes the alternative text of a shape or image for translation.'
              type: boolean
              default: false
            ignoreWordFontColors:
              description: 'When checked, excludes text whose font color falls between `wordFontColorsMinIgnoranceThreshold` and `wordFontColorsMaxIgnoranceThreshold` from translation.'
              type: boolean
              default: false
            wordFontColorsMinIgnoranceThreshold:
              description: 'Darkest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means black. Must not be lighter than `wordFontColorsMaxIgnoranceThreshold` in any color channel.'
              type: string
              default: ''
              example: A6A6A6
            wordFontColorsMaxIgnoranceThreshold:
              description: 'Lightest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means white.'
              type: string
              default: ''
              example: FFFFFF
            excludeWordStyles:
              description: 'Paragraph style names singled out by `translateWordInExcludeStyleMode`, for example `Heading1`.'
              type: array
              items:
                type: string
              default: []
              example:
                - Heading1
            translateWordInExcludeStyleMode:
              description: 'How `excludeWordStyles` is read. If `true`, the listed styles are excluded from translation; if `false`, only they are translated.'
              type: boolean
              default: true
            wordHighlightColors:
              description: 'Word highlight colors singled out by `translateWordInExcludeHighlightMode`. One of: `black`, `blue`, `cyan`, `green`, `magenta`, `red`, `yellow`, `white`, `darkBlue`, `darkCyan`, `darkGreen`, `darkMagenta`, `darkRed`, `darkYellow`, `darkGray`, `lightGray`, `none`.'
              type: array
              items:
                type: string
              default: []
              example:
                - yellow
            translateWordInExcludeHighlightMode:
              description: 'How `wordHighlightColors` is read. If `true`, text with the listed highlights is excluded from translation; if `false`, only it is translated.'
              type: boolean
              default: true
            translateWordExcludeColors:
              description: 'When checked, excludes text whose color is listed in `wordExcludedColors` from translation.'
              type: boolean
              default: false
            wordExcludedColors:
              description: 'Text colors excluded from translation when `translateWordExcludeColors` is enabled, each six hexadecimal digits with an optional leading hash.'
              type: array
              items:
                type: string
              default: []
              example:
                - FF0000
            translateExcelCellsCopied:
              description: 'When checked, a cell whose text is shared with another cell is exposed once for translation.'
              type: boolean
              default: true
            translateExcelSheetNames:
              description: 'When checked, exposes worksheet names for translation.'
              type: boolean
              default: false
            excelExcludedColors:
              description: 'Cell fill colors whose cells are excluded from translation, each the six-digit RGB with an optional leading hash, not the eight-digit ARGB stored in the file.'
              type: array
              items:
                type: string
              default: []
              example:
                - A6A6A6
            translateExcelDiagramData:
              description: 'When checked, exposes text inside SmartArt and diagram data for translation.'
              type: boolean
              default: false
            translateExcelDrawings:
              description: 'When checked, exposes text inside drawings and shapes on a worksheet for translation.'
              type: boolean
              default: false
    DocxFileExportOptionsResponseModel:
      title: 'Docx File Export Options'
      properties:
        exportPattern:
          type: string
          example: /localization/%locale%/%file_name%.%file_extension%
          nullable: true
        allowWordStyleOptimization:
          description: 'When checked, run properties in the exported document are minified against the style definitions instead of being kept verbatim.'
          type: boolean
          default: true
        translateExcelExcludeColors:
          description: "When checked, excludes colored text runs inside a spreadsheet cell from translation.\n\n__Note:__ Applied when the file is parsed, even though it is set through `exportOptions`"
          type: boolean
          default: false
      type: object
    DocxFileImportOptionsResponseModel:
      title: 'Docx File Import Options'
      properties:
        cleanTagsAggressively:
          description: 'When checked, strips additional formatting tags related to text spacing.'
          type: boolean
          default: false
        translateHiddenText:
          description: 'When checked, exposes hidden text for translation.'
          type: boolean
          default: false
        translateHyperlinkUrls:
          description: 'When checked, exposes hidden hyperlinks for translation.'
          type: boolean
          default: false
        translateHiddenRowsAndColumns:
          description: 'When checked, exposes hidden rows and columns for translation.'
          type: boolean
          default: false
        importNotes:
          description: 'When checked, expose slide notes for translation.'
          type: boolean
          default: true
        importHiddenSlides:
          description: 'When checked, exposes hidden slides for translation.'
          type: boolean
          default: false
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n     *\n     * Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
      type: object
    FileInfo:
      title: 'Project File'
      description: 'Class FileInfoResponseModel'
      properties:
        id:
          type: integer
          example: 44
        projectId:
          type: integer
          example: 2
        branchId:
          type: integer
          example: 34
          nullable: true
        directoryId:
          type: integer
          example: 4
          nullable: true
        name:
          type: string
          example: umbrella_app.xliff
        title:
          type: string
          example: source_app_info
          nullable: true
        context:
          type: string
          example: 'Context for translators'
          nullable: true
        type:
          type: string
          example: xliff
        path:
          type: string
          example: /directory1/directory2/filename.extension
        status:
          type: string
          example: active
      type: object
    File:
      title: 'Project File'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/FileInfo'
        -
          properties:
            revisionId:
              type: integer
              example: 1
            status:
              type: string
              example: active
            priority:
              type: string
              example: normal
            importOptions:
              type: object
              nullable: true
              oneOf:
                -
                  $ref: '#/components/schemas/SpreadsheetFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/WebXmlFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/XlsxFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/HtmlFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/FmHtmlFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/MdxV1FileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/MdxV2FileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/MdFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/XmlFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/Docx15FileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/DocxFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/VsdxFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/IdmlFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/VdfFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/SegmentationImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/CustomSegmentationImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/StringCatalogFileImportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/AdocFileImportOptionsResponseModel'
            exportOptions:
              type: object
              nullable: true
              oneOf:
                -
                  $ref: '#/components/schemas/GeneralFileExportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/DocxFileExportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/PropertyFileExportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/JavaScriptFileExportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/MdFileExportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/MdxV1FileExportOptionsResponseModel'
                -
                  $ref: '#/components/schemas/MdxV2FileExportOptionsResponseModel'
            excludedTargetLanguages:
              type: array
              items:
                type: string
              example:
                - en
                - es
                - pl
              nullable: true
            parserVersion:
              type: integer
              example: 12
              nullable: true
            createdAt:
              type: string
              format: date-time
              example: '2019-09-19T15:10:43+00:00'
              nullable: true
            updatedAt:
              type: string
              format: date-time
              example: '2019-09-19T15:10:46+00:00'
              nullable: true
    FmHtmlFileImportOptionsResponseModel:
      title: 'Html with Front Matter File Import Options'
      properties:
        contentSegmentation:
          type: boolean
          example: true
        customSegmentation:
          type: boolean
          example: false
        excludedElements:
          type: array
          items:
            type: string
          example:
            - code
            - 'pre > code'
            - .code-block
        inlineTags:
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        excludedFrontMatterElements:
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        hideAttributeValues:
          type: boolean
          example: true
      type: object
    GeneralFileExportOptionsResponseModel:
      title: 'General File Export Options'
      properties:
        exportPattern:
          type: string
          example: /localization/%locale%/%file_name%.%file_extension%
          nullable: true
      type: object
    HtmlFileImportOptionsResponseModel:
      title: 'Html File Import Options'
      properties:
        contentSegmentation:
          type: boolean
          example: true
        customSegmentation:
          type: boolean
          example: false
        excludedElements:
          type: array
          items:
            type: string
          example:
            - code
            - 'pre > code'
            - .code-block
        inlineTags:
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        hideAttributeValues:
          type: boolean
          example: true
      type: object
    IdmlFileImportOptionsResponseModel:
      title: 'IDML File Import Options'
      properties:
        inlineHyperlinkText:
          description: "When checked, a hyperlink's text is extracted as part of the surrounding sentence so it can be translated in context, instead of appearing as a separate non-editable tag."
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
      type: object
    JavaScriptFileExportOptionsResponseModel:
      title: 'JavaScript File Export Options'
      properties:
        exportQuotes:
          type: string
          example: single
        exportPattern:
          type: string
          example: /localization/%locale%/%file_name%.%file_extension%
          nullable: true
      type: object
    MdFileExportOptionsResponseModel:
      title: 'Md File Export Options'
      properties:
        exportPattern:
          type: string
          example: /localization/%locale%/%file_name%.%file_extension%
          nullable: true
        strongMarker:
          type: string
          example: asterisks
        emphasisMarker:
          type: string
          example: asterisks
        unorderedListBullet:
          type: string
          example: asterisks
        tableColumnWidth:
          type: string
          example: consolidate
        frontMatterQuotes:
          type: string
          example: single
      type: object
    MdFileImportOptionsResponseModel:
      title: 'Md File Import Options'
      properties:
        contentSegmentation:
          type: boolean
          example: true
        customSegmentation:
          type: boolean
          example: false
        excludeCodeBlocks:
          type: boolean
          example: false
        excludedFrontMatterElements:
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        inlineTags:
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
      type: object
    MdxV1FileExportOptionsResponseModel:
      title: 'Mdx v1 File Export Options'
      properties:
        exportPattern:
          type: string
          example: /localization/%locale%/%file_name%.%file_extension%
          nullable: true
        strongMarker:
          type: string
          example: asterisks
        emphasisMarker:
          type: string
          example: asterisks
        unorderedListBullet:
          type: string
          example: asterisks
        tableColumnWidth:
          type: string
          example: consolidate
      type: object
    MdxV1FileImportOptionsResponseModel:
      title: 'Mdx v1 File Import Options'
      properties:
        contentSegmentation:
          type: boolean
          example: true
        customSegmentation:
          type: boolean
          example: false
        excludeCodeBlocks:
          type: boolean
          example: false
        excludedFrontMatterElements:
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
      type: object
    MdxV2FileExportOptionsResponseModel:
      title: 'Mdx v2 File Export Options'
      properties:
        exportPattern:
          type: string
          example: /localization/%locale%/%file_name%.%file_extension%
          nullable: true
        strongMarker:
          type: string
          example: asterisks
        emphasisMarker:
          type: string
          example: asterisks
        unorderedListBullet:
          type: string
          example: asterisks
        tableColumnWidth:
          type: string
          example: consolidate
      type: object
    MdxV2FileImportOptionsResponseModel:
      title: 'Mdx v2 File Import Options'
      properties:
        contentSegmentation:
          type: boolean
          example: true
        customSegmentation:
          type: boolean
          example: false
        excludeCodeBlocks:
          type: boolean
          example: false
        excludedFrontMatterElements:
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
      type: object
    NodeDeleteResponseModel:
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          enum:
            - created
            - in_progress
            - finished
            - failed
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          description: 'The deleted node identifier, keyed by resource type.'
          type: object
          oneOf:
            -
              required:
                - branchId
              properties:
                branchId:
                  type: integer
                  example: 12000
              type: object
            -
              required:
                - directoryId
              properties:
                directoryId:
                  type: integer
                  example: 12000
              type: object
            -
              required:
                - fileId
              properties:
                fileId:
                  type: integer
                  example: 12000
              type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        error:
          description: 'Only present when the operation failed with a user-actionable reason.'
          properties:
            message:
              type: string
              example: '2 files are being processed by another process and could not be deleted.'
          type: object
      type: object
    PropertyFileExportOptionsResponseModel:
      title: 'Property File Export Options'
      properties:
        escapeQuotes:
          type: integer
          example: 0
          nullable: true
        escapeSpecialCharacters:
          type: integer
          example: 0
          nullable: true
        exportPattern:
          type: string
          example: /localization/%locale%/%file_name%.%file_extension%
          nullable: true
      type: object
    SegmentationImportOptionsResponseModel:
      title: 'Xml File Import Options'
      properties:
        contentSegmentation:
          type: boolean
          example: true
        customSegmentation:
          type: boolean
          example: true
      type: object
    SpreadsheetFileImportOptionsResponseModel:
      title: 'Spreadsheet File Import Options'
      properties:
        importTranslations:
          type: boolean
          example: false
          deprecated: true
        firstLineContainsHeader:
          type: boolean
          example: false
        contentSegmentation:
          type: boolean
          example: false
        customSegmentation:
          type: boolean
          example: false
        scheme:
          properties:
            identifier:
              type: integer
            sourcePhrase:
              type: integer
          type: object
          example:
            identifier: 0
            sourcePhrase: 1
            en: 2
            de: 3
          additionalProperties:
            $ref: '#/components/schemas/SpreadsheetLanguageCodeColumnNumber'
      type: object
    StringCatalogFileImportOptionsResponseModel:
      title: 'String Catalog File Import Options'
      properties:
        importKeyAsSource:
          type: boolean
          example: true
        importTranslations:
          type: boolean
          example: true
      type: object
    VdfFileImportOptionsResponseModel:
      title: 'Vdf File Import Options'
      properties:
        convertIcu:
          description: 'Defines whether to convert placeholders to the ICU MessageFormat syntax.'
          type: boolean
          default: true
          example: true
        addGenderArgument:
          description: "Defines whether to append _gender suffix to variable names when converting gender ICU to ICU MessageFormat.\n\n__Note:__ Can be enabled only when `convertIcu` is `true`."
          type: boolean
          default: false
          example: false
      type: object
    VsdxFileImportOptionsResponseModel:
      title: 'VSDX File Import Options'
      properties:
        cleanTagsAggressively:
          description: 'When checked, strips additional formatting tags related to text spacing.'
          type: boolean
          default: false
        translateHyperlinkUrls:
          description: 'When checked, exposes hidden hyperlinks for translation.'
          type: boolean
          default: false
        contentSegmentation:
          description: 'Defines whether to split long texts into smaller text segments.'
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
      type: object
    WebXmlFileImportOptionsResponseModel:
      title: 'WebXml File Import Options'
      properties:
        contentSegmentation:
          type: boolean
          example: true
        customSegmentation:
          type: boolean
          example: false
        inlineTags:
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        hideAttributeValues:
          type: boolean
          example: true
      type: object
    XlsxFileImportOptionsResponseModel:
      title: 'XLSX File Import Options'
      properties:
        importTranslations:
          type: boolean
          example: false
          deprecated: true
        firstLineContainsHeader:
          type: boolean
          example: false
        importHiddenSheets:
          type: boolean
          example: false
        importHiddenRows:
          type: boolean
          example: false
        contentSegmentation:
          type: boolean
          example: false
        customSegmentation:
          type: boolean
          example: false
        scheme:
          properties:
            identifier:
              type: integer
            sourcePhrase:
              type: integer
          type: object
          example:
            identifier: 0
            sourcePhrase: 1
            en: 2
            de: 3
          additionalProperties:
            $ref: '#/components/schemas/SpreadsheetLanguageCodeColumnNumber'
      type: object
    XmlFileImportOptionsResponseModel:
      title: 'Xml File Import Options'
      properties:
        translateContent:
          type: boolean
          example: true
        translateAttributes:
          type: boolean
          example: true
        contentSegmentation:
          type: boolean
          example: true
        translatableElements:
          description: "This is an array of strings, where each item is the XPaths to DOM element that should be imported.\n\nSupported XPath patterns:\n- `/path/to/node` — Absolute path to a specific node\n- `/path/to/attribute[@attr]` — Absolute path to an attribute\n- `//node` — All nodes with the specified name\n- `//[@attr]` — All elements with the specified attribute\n- `nodeone/nodetwo` — Relative path\n- `/nodeone//nodetwo` — Mixed absolute and descendant path\n- `//node[@attr]` — All nodes with the specified name and attribute"
          type: array
          items:
            type: string
          example:
            - //node
            - '//node[@attr]'
        customSegmentation:
          type: boolean
          example: false
        inlineTags:
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
      type: object
    GlossaryPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/GlossaryOperation'
    GlossaryOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /languageId
            - /isShared
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/GlossaryOperationReplace'
          test: '#/components/schemas/GlossaryOperationTest'
    GlossaryOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GlossaryOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
    GlossaryOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GlossaryOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
    GlossaryConcordanceForm:
      required:
        - sourceLanguageId
        - targetLanguageId
        - expressions
      properties:
        sourceLanguageId:
          description: 'Source Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: de
        expressions:
          description: "Expressions to search\n\n__Note:__ Can't be used with `expression` in same request"
          type: array
          items:
            type: string
          example:
            - Welcome!
            - 'Save as...'
            - View
            - About...
        expression:
          description: "Expression to search\n\n__Note:__ Can't be used with `expressions` in same request"
          type: string
          example: Welcome!
          deprecated: true
      type: object
    CrowdinGlossaryCreateForm:
      required:
        - name
        - languageId
      properties:
        name:
          description: 'Glossary name'
          type: string
          example: "Be My Eyes iOS's Glossary"
        languageId:
          description: 'Glossary Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: fr
        isShared:
          description: 'Whether glossary should be shared to all projects within the account'
          type: boolean
          example: false
      type: object
    GlossaryExportForm:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GlossaryExportFormBase'
        -
          properties:
            exportFields:
              description: "Array fields for export.\n\n__Note:__ Used for export CSV or XLSX format only"
              type: array
              items:
                type: string
                enum:
                  - term
                  - description
                  - partOfSpeech
                  - type
                  - status
                  - gender
                  - note
                  - url
                  - conceptDefinition
                  - conceptSubject
                  - conceptNote
                  - conceptUrl
                  - conceptFigure
              default:
                - term
                - description
                - partOfSpeech
              example:
                - term
                - description
                - partOfSpeech
    GlossaryImportForm:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GlossaryImportFormBase'
        -
          properties:
            scheme:
              description: "Defines data columns mapping. Acceptable value is combination of following constants:\n * `term_{%language_code%}` – column with terms\n * `description_{%language_code%}` – column with terms description\n * `partOfSpeech_{%language_code%}` – column with terms part of speech\n * `status_{%language_code%}` – column with terms status\n * `type_{%language_code%}` – column with terms type\n * `gender_{%language_code%}` – column with terms gender\n * `url_{%language_code%}` – column with terms url\n * `note_{%language_code%}` – column with terms note where `%language_code%` – placeholder for your language code\n * `conceptDefinition` – column with concepts definition\n * `conceptSubject` – column with concepts subject\n * `conceptNote` – column with concepts note\n * `conceptUrl` – column with concepts url\n * `conceptFigure` – column with concepts figure\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
              type: object
              example:
                term_en: 0
                description_en: 1
    CrowdinOrganizationGlossaryConcordanceForm:
      allOf:
        -
          $ref: '#/components/schemas/OrganizationGlossaryConcordanceForm'
        -
          properties:
            userId:
              description: 'Owner (user) whose glossaries to search. Only glossaries you own or manage are searched. Defaults to your own account.'
              type: integer
              nullable: true
          type: object
    GlossaryExportFormBase:
      properties:
        format:
          description: "Supported formats:\n * 'tbx'\n * 'tbx_v3'\n * 'csv'\n * 'xlsx'"
          type: string
          default: tbx
          enum:
            - tbx
            - tbx_v3
            - csv
            - xlsx
          example: csv
        exportType:
          description: "Determines whether the export keeps every term of a matching concept (`concepts`, default)\n * or only the terms that match the active filters (`terms`)."
          type: string
          default: concepts
          enum:
            - concepts
            - terms
          example: terms
        text:
          type: string
          example: value
        caseSensitive:
          description: '__Note:__ Must be used together with `text`'
          type: boolean
          default: 'false'
          example: 'true'
        searchStrict:
          description: '__Note:__ Must be used together with `text`'
          type: boolean
          default: 'false'
          example: 'true'
        searchFullMatch:
          description: '__Note:__ Must be used together with `text`'
          type: boolean
          default: 'false'
          example: 'true'
        status:
          description: '__Deprecated:__ use `statuses` instead. Cannot be combined with `statuses`.'
          type: string
          enum:
            - PREFERRED
            - ADMITTED
            - NOT_RECOMMENDED
            - OBSOLETE
            - DRAFT
          example: DRAFT
          deprecated: true
        statuses:
          description: 'Filter terms by one or more statuses.'
          type: array
          items:
            type: string
            enum:
              - PREFERRED
              - ADMITTED
              - NOT_RECOMMENDED
              - OBSOLETE
              - DRAFT
          example:
            - PREFERRED
            - ADMITTED
        partOfSpeech:
          description: '__Deprecated:__ use `partsOfSpeech` instead. Cannot be combined with `partsOfSpeech`.'
          type: string
          enum:
            - NOUN
            - VERB
            - ADJ
            - PRON
            - PROPN
            - DET
            - ADV
            - ADP
            - CCONJ
            - SCONJ
            - NUM
            - INTJ
            - AUX
            - PRT
            - SYM
            - X
          example: VERB
          deprecated: true
        partsOfSpeech:
          description: 'Filter terms by one or more parts of speech.'
          type: array
          items:
            type: string
            enum:
              - NOUN
              - VERB
              - ADJ
              - PRON
              - PROPN
              - DET
              - ADV
              - ADP
              - CCONJ
              - SCONJ
              - NUM
              - INTJ
              - AUX
              - PRT
              - SYM
              - X
          example:
            - NOUN
            - VERB
        type:
          description: '__Deprecated:__ use `types` instead. Cannot be combined with `types`.'
          type: string
          enum:
            - FULL_FORM
            - ACRONYM
            - ABBREVIATION
            - SHORT_FORM
            - PHRASE
            - VARIANT
          example: ACRONYM
          deprecated: true
        types:
          description: 'Filter terms by one or more types.'
          type: array
          items:
            type: string
            enum:
              - FULL_FORM
              - ACRONYM
              - ABBREVIATION
              - SHORT_FORM
              - PHRASE
              - VARIANT
          example:
            - ACRONYM
            - ABBREVIATION
        gender:
          description: '__Deprecated:__ use `genders` instead. Cannot be combined with `genders`.'
          type: string
          enum:
            - MASCULINE
            - FEMININE
            - NEUTER
            - COMMON
            - OTHER
          example: OTHER
          deprecated: true
        genders:
          description: 'Filter terms by one or more genders.'
          type: array
          items:
            type: string
            enum:
              - MASCULINE
              - FEMININE
              - NEUTER
              - COMMON
              - OTHER
          example:
            - MASCULINE
            - FEMININE
        authorId:
          description: '__Deprecated:__ use `authorIds` instead. Cannot be combined with `authorIds`.'
          type: integer
          example: 12
          deprecated: true
        authorIds:
          description: 'Filter terms by one or more authors. Up to 50 values.'
          type: array
          items:
            type: integer
          example:
            - 12
            - 34
        languageIds:
          description: 'Filter terms by one or more language IDs. Up to 50 values.'
          type: array
          items:
            type: string
          example:
            - uk
            - de
        dateFrom:
          description: 'Export date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2024-01-23T07:00:14+00:00'
        dateTo:
          description: 'Export date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2024-09-27T07:00:14+00:00'
      type: object
    GlossaryImportFormBase:
      required:
        - storageId
      properties:
        storageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)\n\n Supported file formats:\n * TBX\n * CSV\n * XLS/XLSX"
          type: integer
          format: int64
        firstLineContainsHeader:
          description: "Defines whether file includes first row header that should not be imported\n\n__Note:__  Used for upload of CSV or XLS/XLSX files only"
          type: boolean
          default: false
      type: object
    OrganizationGlossaryConcordanceForm:
      required:
        - sourceLanguageId
        - targetLanguageId
        - expressions
      properties:
        sourceLanguageId:
          description: 'Source Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: de
        expressions:
          description: 'Expressions to search'
          type: array
          items:
            type: string
          example:
            - Welcome!
            - 'Save as...'
            - View
            - About...
      type: object
    CrowdinGlossaryCollectionResource:
      description: 'Glossary Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinGlossaryResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinGlossaryResource:
      description: 'Glossary Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Glossary'
    GlossaryExportResource:
      description: 'Glossary Export Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/GlossaryExport'
    GlossaryImportResource:
      description: 'Glossary Import Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/GlossaryImport'
    GlossaryConcordanceResultCollectionResource:
      description: 'Glossary Concordance Result Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/GlossaryConcordanceResultResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    GlossaryConcordanceResultResource:
      description: 'Glossary Concordance Result Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/GlossaryConcordanceResult'
    Glossary:
      title: Glossary
      properties:
        id:
          type: integer
          example: 2
        name:
          type: string
          example: "Be My Eyes iOS's Glossary"
          nullable: true
        userId:
          type: integer
          example: 2
        terms:
          type: integer
          example: 25
        languageId:
          type: string
          example: fr
        languageIds:
          type: array
          items:
            type: string
            example: ro
        defaultProjectIds:
          type: array
          items:
            type: integer
            example: 2
        projectIds:
          type: array
          items:
            type: integer
            example: 6
        isShared:
          description: 'Whether glossary should be shared to all projects within the account'
          type: boolean
          example: false
        webUrl:
          type: string
          example: 'https://crowdin.com/profile/username/resources/glossaries/1'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-16T13:42:04+00:00'
      type: object
    GlossaryExport:
      description: 'Class GlossaryExportResponseModel'
      properties:
        identifier:
          type: string
          example: 5ed2ce93-6d47-4402-9e66-516ca835cb20
        status:
          type: string
          example: created
        progress:
          description: 'in percentages'
          type: integer
          example: 0
        attributes:
          properties:
            format:
              type: string
              example: csv
            exportFields:
              type: array
              items:
                type: string
              example:
                - term
                - description
                - partOfSpeech
            text:
              type: string
              example: value
            caseSensitive:
              type: boolean
              example: 'true'
              nullable: true
            searchFullMatch:
              type: boolean
              example: 'true'
              nullable: true
            searchStrict:
              type: boolean
              example: 'true'
              nullable: true
            status:
              type: string
              example: DRAFT
              nullable: true
            partOfSpeech:
              type: string
              example: VERB
              nullable: true
            type:
              type: string
              example: ACRONYM
              nullable: true
            gender:
              type: string
              example: OTHER
              nullable: true
            authorId:
              type: integer
              example: 12
              nullable: true
            dateFrom:
              type: string
              format: date-time
              example: '2024-09-23T11:26:54+00:00'
              nullable: true
            dateTo:
              type: string
              format: date-time
              example: '2024-12-23T11:26:54+00:00'
              nullable: true
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T07:06:43+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T07:06:43+00:00'
        startedAt:
          type: string
          format: date-time
          nullable: true
        finishedAt:
          type: string
          format: date-time
          nullable: true
      type: object
    GlossaryImport:
      description: 'Class GlossaryImportResponseModel'
      properties:
        identifier:
          type: string
          example: c050fba2-200e-4ce1-8de4-f7ba8eb58732
        status:
          type: string
          example: created
        progress:
          description: 'in percentages'
          type: integer
          example: 0
        attributes:
          properties:
            storageId:
              type: integer
              format: int64
              example: 36
            scheme:
              properties:
                term_en:
                  type: integer
                  example: 0
                description_en:
                  type: integer
                  example: 1
              type: object
            firstLineContainsHeader:
              type: boolean
              example: true
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T12:17:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T12:17:54+00:00'
        startedAt:
          type: string
          format: date-time
          nullable: true
        finishedAt:
          type: string
          format: date-time
          nullable: true
      type: object
    ConceptConcordance:
      title: Concept
      properties:
        id:
          type: integer
          example: 2
        subject:
          type: string
          example: general
        definition:
          type: string
          example: 'Some definition'
        translatable:
          type: boolean
          example: 'true'
        note:
          type: string
          example: 'Any kind of note, such as a usage note, explanation, or instruction'
        url:
          type: string
          example: 'Base URL'
        figure:
          type: string
          example: 'Figure URL'
      type: object
    GlossaryConcordance:
      title: Glossary
      properties:
        id:
          type: integer
          example: 2
        name:
          type: string
          example: "Be My Eyes iOS's Glossary"
          nullable: true
      type: object
    GlossaryConcordanceResult:
      title: 'Glossary Concordance Result'
      properties:
        glossary:
          type: object
          allOf:
            -
              $ref: '#/components/schemas/GlossaryConcordance'
        concept:
          type: object
          allOf:
            -
              $ref: '#/components/schemas/ConceptConcordance'
        sourceTerms:
          type: array
          items:
            $ref: '#/components/schemas/Term'
        targetTerms:
          type: array
          items:
            $ref: '#/components/schemas/Term'
      type: object
    BackgroundUploadForm:
      required:
        - storageId
      properties:
        storageId:
          description: 'A unique identifier for the storage. Storage is where you add files, before they can be added to your organization. [More about Storage](#tag/Storage).'
          type: integer
          format: int64
      type: object
    LogoUploadForm:
      required:
        - storageId
      properties:
        storageId:
          description: 'A unique identifier for the storage. Storage is where you add files, before they can be added to your organization. [More about Storage](#tag/Storage).'
          type: integer
          format: int64
      type: object
    IssuePatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/IssueOperation'
    IssueOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /status
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/IssueOperationReplace'
          test: '#/components/schemas/IssueOperationTest'
    IssueOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/IssueOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    IssueOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/IssueOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    IssueCollectionResource:
      description: 'Issue Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/IssueResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    IssueResource:
      description: 'Issue Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Issue'
    IssueStatisticCollectionResource:
      description: 'Issue Statistic Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              description: 'Class IssueStatisticCollectionResource'
              type: array
              items:
                $ref: '#/components/schemas/IssueStatisticResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    IssueStatisticResource:
      description: 'Issue Statistic Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/IssueStatistic'
    Issue:
      title: Issue
      description: 'Issue Response Model'
      properties:
        id:
          type: integer
          example: 2
        text:
          type: string
          example: '@BeMyEyes  Please provide more details on where the text will be used'
        userId:
          type: integer
          example: 6
        stringId:
          type: integer
          example: 742
        user:
          properties:
            id:
              type: integer
              example: 12
            username:
              type: string
              example: john_smith
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
        string:
          properties:
            id:
              type: integer
              example: 742
            text:
              type: string
              example: 'HTML page example'
            type:
              type: string
              example: text
            hasPlurals:
              description: 'Use fields `type` and `text` instead'
              type: boolean
              example: false
              deprecated: true
            isIcu:
              description: 'Use field `type` instead'
              type: boolean
              example: false
              deprecated: true
            context:
              type: string
              example: 'Document Title\r\nXPath: /html/head/title'
            fileId:
              type: integer
              example: 22
          type: object
        languageId:
          type: string
          example: bg
        type:
          type: string
          example: source_mistake
        status:
          type: string
          example: unresolved
        createdAt:
          type: string
          format: date-time
          example: '2019-09-20T11:05:24+00:00'
      type: object
    IssueStatistic:
      title: Issue
      description: 'Issue Statistic Response Model'
      properties:
        total:
          type: integer
          example: 3
        languageId:
          type: integer
          example: 50
      type: object
    LabelPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/LabelOperation'
    LabelOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /title
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/LabelOperationReplace'
          test: '#/components/schemas/LabelOperationTest'
    LabelOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/LabelOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    LabelOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/LabelOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    LabelCreateForm:
      required:
        - title
      properties:
        title:
          description: 'Label title'
          type: string
          example: main
      type: object
    LabelScreenshotAssignForm:
      required:
        - screenshotIds
      properties:
        screenshotIds:
          description: "Screenshot Identifiers. Get via [List Screenshots](#operation/api.projects.screenshots.getMany)\n\n__Note:__ You can assign up to 500 screenshots at a time."
          type: array
          items:
            type: integer
            example: 1
      type: object
    LabelStringAssignForm:
      required:
        - stringIds
      properties:
        stringIds:
          description: "String Identifiers. Get via [List Strings](#operation/api.projects.strings.getMany)\n\n__Note:__ You can assign up to 500 strings at a time."
          type: array
          items:
            type: integer
            example: 1
      type: object
    LabelCollectionResource:
      description: 'Label Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/LabelResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    LabelResource:
      description: 'Label Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Label'
    SystemLabelCollectionResource:
      description: 'System Label Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/SystemLabelResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    SystemLabelResource:
      description: 'System Label Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/SystemLabel'
    Label:
      title: Label
      properties:
        id:
          type: integer
          example: 34
        title:
          type: string
          example: main
      type: object
    SystemLabel:
      title: Label
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Label'
        -
          properties:
            isSystem:
              type: boolean
              example: 'true'
          type: object
    CustomLanguagePatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/CustomLanguageOperation'
    CustomLanguageOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /textDirection
            - /pluralCategoryNames
            - /threeLettersCode
            - /localeCode
            - /dialectOf
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/CustomLanguageOperationReplace'
          test: '#/components/schemas/CustomLanguageOperationTest'
    CustomLanguageOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CustomLanguageOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: array
                  items: { type: string }
    CustomLanguageOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CustomLanguageOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: array
                  items: { type: string }
    LanguageCreateForm:
      required:
        - name
        - code
        - localeCode
        - threeLettersCode
        - textDirection
        - pluralCategoryNames
      properties:
        name:
          description: 'Language name'
          type: string
          example: CustomLanguage
        code:
          description: 'Custom language code'
          type: string
          example: custom
        localeCode:
          description: 'Custom language locale code'
          type: string
          example: custom-Uk
        textDirection:
          description: "Text direction in custom language. Available values:\n * 'ltr' — left-to-right\n * 'rtl' — right-to-left"
          type: string
          enum:
            - ltr
            - rtl
          example: ltr
        pluralCategoryNames:
          description: 'Array with category names'
          type: array
          items:
            type: string
          enum:
            -
              - one
              - other
            -
              - one
              - two
              - other
            -
              - one
              - few
              - other
            -
              - one
              - few
              - many
              - other
            -
              - one
              - two
              - few
              - other
            -
              - one
              - two
              - few
              - many
              - other
            -
              - zero
              - one
              - other
            -
              - zero
              - one
              - two
              - few
              - many
              - other
            -
              - other
          example:
            - one
            - other
        threeLettersCode:
          description: "Custom language 3 letters code\n\n __Format:__ ISO 6393 code"
          type: string
          example: cus
        twoLettersCode:
          description: "Custom language 2 letters code\n\n __Format:__ ISO 6391 code"
          type: string
          example: cu
        dialectOf:
          description: 'Use if custom language is a dialect. Get `id` via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: uk
      type: object
    LanguageCollectionResource:
      description: 'Language Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/LanguageResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    LanguageResource:
      description: 'Language Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Language'
    Language:
      title: Language
      description: 'Class LanguageResponseModel'
      properties:
        id:
          type: string
          example: es
        name:
          type: string
          example: Spanish
        editorCode:
          description: '- alias of internal code'
          type: string
          example: es
        twoLettersCode:
          description: 'alias of iso6391 code'
          type: string
          example: es
        threeLettersCode:
          description: 'alias of iso6393 code'
          type: string
          example: spa
        locale:
          type: string
          example: es-ES
        androidCode:
          type: string
          example: es-rES
        bcp47Code:
          type: string
          example: b+es+ES
        osxCode:
          type: string
          example: es.lproj
        osxLocale:
          type: string
          example: es
        pluralCategoryNames:
          description: 'plural category names'
          type: array
          items:
            type: string
            example: one
        pluralRules:
          description: 'string with plural rules'
          type: string
          example: '(n != 1)'
        pluralExamples:
          description: 'plural examples array'
          type: array
          items:
            type: string
            example: '0, 2-999; 1.2, 2.07...'
        textDirection:
          type: string
          enum:
            - ltr
            - rtl
          example: ltr
        dialectOf:
          type: string
          example: es
          nullable: true
      type: object
    MtTranslateForm:
      required:
        - targetLanguageId
        - strings
      properties:
        languageRecognitionProvider:
          description: "Select a provider for language recognition\n\n__Note:__ Is required if the source language is not selected"
          type: string
          enum:
            - crowdin
            - engine
          example: crowdin
        sourceLanguageId:
          description: 'Source Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: de
        strings:
          description: "Strings that should be translated\n\n__Note:__ You can translate up to 100 strings at a time."
          type: array
          items:
            type: string
          example:
            - Welcome!
            - 'Save as...'
            - View
            - About...
      type: object
    CrowdinMtCollectionResource:
      description: 'MT Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinMtResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinMtResource:
      description: 'Mt Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinMt'
    MtTranslationResource:
      description: 'Mt Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/MtTranslation'
    CrowdinMt:
      title: Mt
      properties:
        id:
          type: integer
          example: 2
        name:
          type: string
          example: 'Crowdin Translate'
        type:
          type: string
          example: crowdin
        credentials:
          properties:
            crowdin_nmt:
              type: integer
              example: 1
            crowdin_nmt_multi_translations:
              type: integer
              example: 1
          type: object
        supportedLanguageIds:
          type: array
          items:
            type: string
          example:
            - en
            - es
            - pl
            - de
            - fr
            - zh-CN
            - ja
        supportedLanguagePairs:
          type: object
          example:
            en:
              - de
              - fr
            fr:
              - en
            zh-CN:
              - en
              - ja
          nullable: true
          additionalProperties:
            type: array
            items:
              type: string
      type: object
    MtTranslation:
      title: 'Mt Translation'
      properties:
        sourceLanguageId:
          type: string
          example: en
        targetLanguageId:
          type: string
          example: de
        strings:
          type: array
          items:
            type: string
          example:
            - Welcome!
            - 'Save as...'
            - View
            - About...
        translations:
          type: array
          items:
            type: string
          example:
            - 'Herzlich willkommen!'
            - 'Speichern als...'
            - Aussicht
            - Etwa...
      type: object
    ChannelSubscriptionForm:
      required:
        - subscriptionId
      properties:
        subscriptionId:
          description: 'Notification channel Subscription Identifier'
          type: string
      type: object
    ChannelSubscriptionCollectionResource:
      description: 'Channel subscription data'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ChannelSubscriptionResource'
    ChannelSubscriptionResource:
      description: 'Subscription for notification channels'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Subscription'
    Subscription:
      title: Subscription
      description: 'Subscription response model'
      properties:
        subscriptionId:
          type: string
          example: ha0Vz86quwKStvrxdAQez5ERa//KDyoHEwTBsQUjEpX7mmNiL6VAnM56a696/rK8gGn6UM+v4y68BAAzSEyudT2uSX/r1SXImw5iC3rkcQY=
        type:
          type: string
          example: email
        status:
          type: string
          example: subscribed
        userLogin:
          type: string
          example: userLogin
      type: object
    AppNotificationForm:
      required:
        - message
      properties:
        message:
          description: 'Message text. __Up to 10000 characters.__'
          type: string
          example: 'New notification message'
      type: object
    NotificationFormByRole:
      title: 'By role'
      required:
        - role
        - message
      properties:
        role:
          type: string
          enum:
            - owner
            - admin
        message:
          description: 'Message text. __Up to 10000 characters.__'
          type: string
          example: 'New notification message'
      type: object
    NotificationFormByRoleInProject:
      title: 'By role'
      required:
        - role
        - message
      properties:
        role:
          type: string
          enum:
            - owner
            - manager
        message:
          description: 'Message text. __Up to 10000 characters.__'
          type: string
          example: 'New notification message'
      type: object
    NotificationFormById:
      title: 'By userIds'
      required:
        - userIds
        - message
      properties:
        userIds:
          description: 'User Identifier. Get via [List Users](#operation/api.users.getMany)'
          type: array
          items:
            description: 'User Identifier. Get via [List Users](#operation/api.users.getMany)'
            type: integer
            example: 2
        message:
          description: 'Message text. __Up to 10000 characters.__'
          type: string
          example: 'New notification message'
      type: object
    NotificationFormForAuthentificatedUser:
      title: 'For Authentificated User'
      required:
        - message
      properties:
        message:
          description: 'Message text. __Up to 10000 characters.__'
          type: string
          example: 'New notification message'
      type: object
    OrganizationWebhookPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/OrganizationWebhookOperation'
    OrganizationWebhookOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /isActive
            - /batchingEnabled
            - /contentType
            - /events
            - /headers
            - /requestType
            - /payload
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/OrganizationWebhookOperationReplace'
          test: '#/components/schemas/OrganizationWebhookOperationTest'
    OrganizationWebhookOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/OrganizationWebhookOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    OrganizationWebhookOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/OrganizationWebhookOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    EnterpriseOrganizationWebhookCreateForm:
      required:
        - name
        - url
        - events
        - requestType
      properties:
        name:
          description: 'Webhook name'
          type: string
          example: Proofread
        url:
          description: 'Webhook URL'
          type: string
          example: 'https://webhook.site/1c20d9b5-6e6a-4522-974d-9da7ea7595c9'
        events:
          description: 'Webhook events'
          type: array
          items:
            $ref: '#/components/schemas/Events'
        requestType:
          description: 'Webhook request type'
          type: string
          enum:
            - POST
            - GET
          example: POST
        isActive:
          description: 'Defines whether webhook is active'
          type: boolean
          default: true
        batchingEnabled:
          description: 'Defines whether webhook batching is enabled'
          type: boolean
          default: false
          example: true
        contentType:
          description: 'Webhook content type'
          type: string
          default: application/json
          enum:
            - multipart/form-data
            - application/json
            - application/x-www-form-urlencoded
        headers:
          description: 'Webhook headers'
          type: object
          example:
            Accept: application/xml
        payload:
          description: 'Custom webhook payload'
          properties:
            project.created:
              description: 'Read more about [Events payload examples](https://developer.crowdin.com/webhooks). Additionally, you can check out Events payloads while creating webhooks via UI in your Crowdin profile settings > Webhooks tab > click Add webhook.'
              type: object
          type: object
          example:
            project.created:
              event: '{{event}}'
              project:
                id: '{{projectId}}'
                userId: '{{projectUserId}}'
                sourceLanguageId: '{{projectSourceLanguageId}}'
                targetLanguageIds: '{{projectTargetLanguageIds}}'
                identifier: '{{projectIdentifier}}'
                name: '{{projectName}}'
                createdAt: '{{projectCreatedAt}}'
                updatedAt: '{{projectUpdatedAt}}'
                lastActivity: '{{projectLastActivity}}'
                description: '{{projectDescription}}'
                url: '{{projectUrl}}'
                cname: '{{projectCname}}'
                logo: '{{projectLogo}}'
                isExternal: '{{projectIsExternal}}'
                externalType: '{{projectExternalType}}'
                hasCrowdsourcing: '{{projectHasCrowdsourcing}}'
                groupId: '{{projectGroupId}}'
              user:
                id: '{{creatorId}}'
                username: '{{creatorUsername}}'
                fullName: '{{creatorFullName}}'
                avatarUrl: '{{creatorAvatarUrl}}'
      type: object
    CrowdinOrganizationWebhookCreateForm:
      required:
        - name
        - url
        - events
        - requestType
      properties:
        name:
          description: 'Webhook name'
          type: string
          example: Proofread
        url:
          description: 'Webhook URL'
          type: string
          example: 'https://webhook.site/1c20d9b5-6e6a-4522-974d-9da7ea7595c9'
        events:
          description: 'Webhook events'
          type: array
          items:
            $ref: '#/components/schemas/Events'
        requestType:
          description: 'Webhook request type'
          type: string
          enum:
            - POST
            - GET
          example: POST
        isActive:
          description: 'Defines whether webhook is active'
          type: boolean
          default: true
        batchingEnabled:
          description: 'Defines whether webhook batching is enabled'
          type: boolean
          default: false
          example: true
        contentType:
          description: 'Webhook content type'
          type: string
          default: application/json
          enum:
            - multipart/form-data
            - application/json
            - application/x-www-form-urlencoded
        headers:
          description: 'Webhook headers'
          type: object
          example:
            Accept: application/xml
        payload:
          description: 'Custom webhook payload'
          properties:
            project.created:
              description: 'Read more about [Events payload examples](https://developer.crowdin.com/webhooks). Additionally, you can check out Events payloads while creating webhooks via UI in your Crowdin profile settings > Webhooks tab > click Add webhook.'
              type: object
          type: object
          example:
            project.created:
              event: '{{event}}'
              project:
                id: '{{projectId}}'
                userId: '{{projectUserId}}'
                sourceLanguageId: '{{projectSourceLanguageId}}'
                targetLanguageIds: '{{projectTargetLanguageIds}}'
                identifier: '{{projectIdentifier}}'
                name: '{{projectName}}'
                createdAt: '{{projectCreatedAt}}'
                updatedAt: '{{projectUpdatedAt}}'
                lastActivity: '{{projectLastActivity}}'
                description: '{{projectDescription}}'
                url: '{{projectUrl}}'
                cname: '{{projectCname}}'
                logo: '{{projectLogo}}'
              user:
                id: '{{creatorId}}'
                username: '{{creatorUsername}}'
                fullName: '{{creatorFullName}}'
                avatarUrl: '{{creatorAvatarUrl}}'
      type: object
    CrowdinOrganizationWebhookCollectionResource:
      description: 'Webhook Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinOrganizationWebhookResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinOrganizationWebhookResource:
      description: 'Webhook Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinOrganizationWebhook'
    CrowdinOrganizationWebhook:
      title: Webhook
      properties:
        id:
          type: integer
          example: 4
        name:
          type: string
          example: Proofread
        url:
          type: string
          example: 'https://webhook.site/1c20d9b5-6e6a-4522-974d-9da7ea7595c9'
          nullable: true
        events:
          type: array
          items:
            type: string
            example: project.created
        headers:
          type: array
          items:
            type: string
          example:
            Authorization: 'Bearer <ACCESS_TOKEN>'
        payload:
          description: 'Read more about [Events payload examples](https://developer.crowdin.com/webhooks). Additionally, you can check out Events payloads while creating webhooks via UI in your Crowdin project > Tools tab > Webhooks section > click Add webhook.'
          type: object
          example:
            project.created:
              event: '{{event}}'
              project:
                id: '{{projectId}}'
                userId: '{{projectUserId}}'
                sourceLanguageId: '{{projectSourceLanguageId}}'
                targetLanguageIds: '{{projectTargetLanguageIds}}'
                identifier: '{{projectIdentifier}}'
                name: '{{projectName}}'
                createdAt: '{{projectCreatedAt}}'
                updatedAt: '{{projectUpdatedAt}}'
                lastActivity: '{{projectLastActivity}}'
                description: '{{projectDescription}}'
                url: '{{projectUrl}}'
                cname: '{{projectCname}}'
                logo: '{{projectLogo}}'
              user:
                id: '{{creatorId}}'
                username: '{{creatorUsername}}'
                fullName: '{{creatorFullName}}'
                avatarUrl: '{{creatorAvatarUrl}}'
          additionalProperties:
            type: array
            items:
              type: string
        isActive:
          type: boolean
          example: true
        batchingEnabled:
          type: boolean
          example: true
        requestType:
          type: string
          example: GET
        contentType:
          type: string
          example: application/json
          nullable: true
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T09:19:07+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T09:19:07+00:00'
      type: object
    PreTranslationMassPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/PreTranslationMassOperation'
      example:
        -
          op: replace
          path: /9e7de270-4f83-41cb-b606-2f90631f26e2/status
          value: canceled
        -
          op: replace
          path: /9e7de270-4f83-41cb-b606-2f90631f26e2/priority
          value: high
    PreTranslationMassOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - '/{jobIdentifier}/status'
            - '/{jobIdentifier}/priority'
          example: '/{jobIdentifier}/status'
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/PreTranslationMassOperationReplace'
    PreTranslationMassOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/PreTranslationMassOperation'
        -
          properties:
            value:
              example: canceled
              oneOf:
                -
                  type: string
    PreTranslationPatch:
      type: array
      items:
        $ref: '#/components/schemas/PreTranslationOperation'
    PreTranslationOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /status
            - /priority
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/PreTranslationOperationReplace'
          test: '#/components/schemas/PreTranslationOperationTest'
    PreTranslationOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/PreTranslationOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    PreTranslationOperationTest:
      description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/PreTranslationOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    FallbackLanguagesScheme:
      title: 'Fallback Languages'
      description: "Defines fallback languages mapping. The passed value should be an associative array containing both language id and array of fallback language ids:\n\n - `{languageId}` – Crowdin id for the specified language. Get via [List Supported Languages](#operation/api.languages.getMany)\n - `Array of strings` – an array containing fallback language ids. Get via [List Supported Languages](#operation/api.languages.getMany)\n\n__Note:__ Available only for TM Auto-Translation"
      properties:
        languageId:
          type: array
          items:
            type: string
            example: uk
      type: object
    PreTranslationForm:
      type: object
      oneOf:
        -
          $ref: '#/components/schemas/PreTranslationByFilesForm'
        -
          $ref: '#/components/schemas/PreTranslationByTaskForm'
    PreTranslationByFilesForm:
      title: 'By Files'
      required:
        - languageIds
      type: object
      allOf:
        -
          properties:
            languageIds:
              description: 'Set of languages to which auto-translation should be applied. Get via [List Supported Languages](#operation/api.languages.getMany)'
              type: array
              items:
                type: string
                example: uk
            fileIds:
              description: "Files array that should be translated\n\n__Note:__ Required unless `directoryIds` or `branchIds` is set"
              type: array
              items:
                type: integer
              x-doc-sections:
                - file-based
            directoryIds:
              description: 'Directories array that should be translated. Includes all nested files'
              type: array
              items:
                type: integer
              x-doc-sections:
                - file-based
            branchIds:
              description: 'Branches array that should be translated. Includes all nested files'
              type: array
              items:
                type: integer
              x-doc-sections:
                - file-based
            translateUntranslatedOnly:
              description: "**Deprecated.** Use the `scope` parameter instead:\n- pass `scope: \"untranslated\"` to apply auto-translation to untranslated strings only (equivalent to the legacy `true`),\n- pass `scope: \"all\"` to apply auto-translation to both untranslated and translated strings (equivalent to the legacy `false`).\n\nKept for backward compatibility with existing API integrations. Cannot be used together with `scope` in the same request."
              type: boolean
              default: true
              deprecated: true
            labelIds:
              description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
              type: array
              items:
                type: integer
            excludeLabelIds:
              description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
              type: array
              items:
                type: integer
            labelMatchRule:
              description: "How a string is matched against `labelIds`. One of: `all` — the string carries every one of the labels, `any` — at least one of them. Default is `all`\n\n__Note:__ Must be used together with `labelIds`"
              type: string
              default: all
              enum:
                - all
                - any
            excludeLabelMatchRule:
              description: "How a string is matched against `excludeLabelIds`. One of: `all` — only a string carrying every one of the labels is skipped, `any` — a string carrying at least one of them is skipped. Default is `all`\n\n__Note:__ Must be used together with `excludeLabelIds`"
              type: string
              default: all
              enum:
                - all
                - any
          type: object
        -
          $ref: '#/components/schemas/PreTranslationSharedForm'
    PreTranslationByTaskForm:
      title: 'By Task'
      description: 'Applies auto-translation to the strings of the specified task. The target language is taken from the task'
      required:
        - taskId
      type: object
      allOf:
        -
          properties:
            taskId:
              description: 'Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
              type: integer
          type: object
        -
          $ref: '#/components/schemas/PreTranslationSharedForm'
    PreTranslationSharedForm:
      properties:
        method:
          description: "Defines auto-translation method. Available values:\n- 'tm' – auto-translation via Translation Memory\n- 'mt' – auto-translation via Machine Translation. 'mt' should be used with `engineId` parameter\n- 'ai' – auto-translation via AI. 'ai' should be used with `aiPromptId` parameter"
          type: string
          default: tm
          enum:
            - tm
            - mt
            - ai
          example: mt
        priority:
          type: string
          default: normal
          enum:
            - low
            - normal
            - high
        engineId:
          description: 'Machine Translation engine Identifier. Read more about how to get the [MT engine identifier](https://support.crowdin.com/configuring-machine-translation-engines#mt-engine-ids).'
          type: integer
        aiPromptId:
          description: 'AI Prompt Identifier. Get via [List AI Prompts](#operation/api.ai.prompts.getMany)'
          type: integer
        autoApproveOption:
          description: "Defines which translations added by TM auto-translation should be auto-approved. Available values:\n- 'all' – all\n- 'perfectMatchOnly' – with perfect TM match\n- 'exceptAutoSubstituted' – all (skip auto-substituted suggestions)\n- 'perfectMatchApprovedOnly' - with perfect TM match (approved previously)\n- 'none' – no auto-approve"
          type: string
          default: none
          enum:
            - all
            - exceptAutoSubstituted
            - perfectMatchApprovedOnly
            - perfectMatchOnly
            - none
        duplicateTranslations:
          description: "Adds translations even if the same translation already exists. Default is `false`.\n\n__Note:__ Cannot be used when `replaceTranslationsOption` is `all` (replacing all translations already overrides duplicate handling)."
          type: boolean
          default: false
        skipApprovedTranslations:
          description: "Skip strings that already have approved translations. Default is `false`.\n\n__Note:__ Cannot be used together with `resetApprovalStatus`."
          type: boolean
          default: false
        scope:
          description: "Which strings to apply auto-translation to. Default is `untranslated`. Available values:\n- 'untranslated' – strings without an existing translation (default)\n- 'translated' – strings that already have a translation (re-translation)\n- 'all' – both untranslated and translated strings\n\n__Note:__ Cannot be used together with the deprecated `translateUntranslatedOnly`."
          type: string
          default: untranslated
          enum:
            - untranslated
            - translated
            - all
        translationModifiedBefore:
          description: "Re-translates only if a string's current translation was modified prior to this date. Useful after modifying contextual resources like screenshots, style guides, or glossaries.\n\n__Note:__ Requires `scope` to be `translated` or `all`. Cannot be used with `scope: \"untranslated\"` or `translateUntranslatedOnly: true`."
          type: string
          format: date-time
          example: '2026-01-01T00:00:00+00:00'
          nullable: true
        translationModifiedAfter:
          description: "Re-translates only if a string's current translation was modified after this date. Can be combined with `translationModifiedBefore` to define a date range.\n\n__Note:__ Cannot be later than `translationModifiedBefore`. Requires `scope` to be `translated` or `all`. Cannot be used with `scope: \"untranslated\"` or `translateUntranslatedOnly: true`."
          type: string
          format: date-time
          example: '2026-01-01T00:00:00+00:00'
          nullable: true
        replaceTranslationsOption:
          description: "Defines whether to replace existing translations with new auto-translations. Default is `none`. Available values:\n- 'none' – add the new translation alongside existing ones (default)\n- 'autoTranslated' – replace auto-generated translations (TM, MT, AI). Human translations are kept\n- 'all' – replace all existing translations\n\n__Note:__ Values other than `none` require `scope` to be `translated` or `all` (cannot be combined with `scope: \"untranslated\"` or `translateUntranslatedOnly: true`)."
          type: string
          default: none
          enum:
            - none
            - autoTranslated
            - all
        resetApprovalStatus:
          description: "Removes approval on existing translations when applying auto-translations. Default is `false`.\n\n__Note:__ Requires `scope` to be `translated` or `all`. Cannot be used together with `skipApprovedTranslations`, `autoApproveOption` (any value other than `none`), or when `replaceTranslationsOption` is `all` (replaced translations lose approval automatically). Cannot be used with `scope: \"untranslated\"` or `translateUntranslatedOnly: true`."
          type: boolean
          default: false
        notifyOnCompletion:
          description: "If `true`, the user who started the Auto-Translation is notified when it finishes, fails or is canceled.\n\n__Note:__ The notification is sent only via the channels the user enabled for the Auto-Translation notification group"
          type: boolean
          default: false
          example: true
        translateWithPerfectMatchOnly:
          description: "Applies auto-translation only for the strings with perfect match (source text and contextual information are identical)\n\n__Note:__ Works only with TM auto-translation method"
          type: boolean
          default: false
        fallbackLanguages:
          $ref: '#/components/schemas/FallbackLanguagesScheme'
        sourceLanguageId:
          description: 'Source language identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: en
        customInstruction:
          description: "Custom instruction for AI auto-translation. This instruction will be appended to the AI prompt text.\n\n__Note:__ Available only for AI auto-translation method"
          type: string
          maxLength: 10000
      type: object
    CrowdinPreTranslationCollectionResource:
      description: 'Auto-Translation Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinPreTranslation'
            pagination:
              $ref: '#/components/schemas/Pagination'
    EnterprisePreTranslationCollectionResource:
      description: 'Auto-Translation Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/EnterprisePreTranslation'
            pagination:
              $ref: '#/components/schemas/Pagination'
    PreTranslationReportResource:
      description: 'Auto-Translation Report Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/PreTranslationReport'
    CrowdinPreTranslationResource:
      description: 'Auto-Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinPreTranslation'
    EnterprisePreTranslationResource:
      description: 'Auto-Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/EnterprisePreTranslation'
    CrowdinPreTranslationUpdatedCollectionResource:
      description: 'Auto-Translation Updated Collection Resource'
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/CrowdinPreTranslationResource'
      type: object
    EnterprisePreTranslationUpdatedCollectionResource:
      description: 'Auto-Translation Updated Collection Resource'
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/EnterprisePreTranslationResource'
      type: object
    PreTranslationReport:
      description: 'Auto-Translation Report'
      properties:
        languages:
          type: array
          items:
            $ref: '#/components/schemas/TargetLanguage'
        preTranslateType:
          type: string
          example: ai
      type: object
    CrowdinPreTranslation:
      properties:
        identifier:
          type: string
          example: 9e7de270-4f83-41cb-b606-2f90631f26e2
        status:
          type: string
          enum:
            - created
            - in_progress
            - canceled
            - failed
            - finished
          example: created
        progress:
          description: 'in percentages'
          type: integer
          example: 90
        attributes:
          $ref: '#/components/schemas/CrowdinPreTranslateAttributes'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-20T14:05:50+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-20T14:05:50+00:00'
        startedAt:
          type: string
          format: date-time
        finishedAt:
          type: string
          format: date-time
      type: object
    EnterprisePreTranslation:
      allOf:
        -
          $ref: '#/components/schemas/CrowdinPreTranslation'
        -
          properties:
            attributes:
              $ref: '#/components/schemas/EnterprisePreTranslateAttributes'
          type: object
    CrowdinPreTranslateAttributes:
      properties:
        languageIds:
          type: array
          items:
            type: string
            example: uk
        fileIds:
          type: array
          items:
            type: integer
            example: 742
          x-doc-sections:
            - file-based
        directoryIds:
          type: array
          items:
            type: integer
            example: 12
          x-doc-sections:
            - file-based
        branchIds:
          type: array
          items:
            type: integer
            example: 18
          x-doc-sections:
            - file-based
        taskId:
          description: 'ID of the task the auto-translation was applied to. Present only when the auto-translation was requested by `taskId`'
          type: integer
        method:
          type: string
          example: tm
        autoApproveOption:
          type: string
          example: all
        duplicateTranslations:
          type: boolean
          example: true
        skipApprovedTranslations:
          type: boolean
          example: true
        translateUntranslatedOnly:
          description: '**Deprecated.** Reflects the legacy value sent in the request (defaults to `true` when not provided). New integrations should rely on `scope` instead.'
          type: boolean
          example: true
          deprecated: true
        scope:
          type: string
          default: untranslated
          enum:
            - untranslated
            - translated
            - all
          example: untranslated
        translationModifiedBefore:
          type: string
          format: date-time
          nullable: true
        translationModifiedAfter:
          type: string
          format: date-time
          nullable: true
        replaceTranslationsOption:
          type: string
          default: none
          enum:
            - none
            - autoTranslated
            - all
          example: none
        resetApprovalStatus:
          type: boolean
          example: false
        translateWithPerfectMatchOnly:
          type: boolean
          example: true
        priority:
          type: string
          enum:
            - low
            - normal
            - high
          example: normal
        notifyOnCompletion:
          type: boolean
          example: true
      type: object
    EnterprisePreTranslateAttributes:
      allOf:
        -
          $ref: '#/components/schemas/CrowdinPreTranslateAttributes'
        -
          properties:
            minimumMatchRatio:
              type: integer
              example: 90
          type: object
    TargetLanguage:
      description: 'Target Language'
      properties:
        id:
          type: string
          example: es
        files:
          type: array
          items:
            properties:
              id:
                type: string
                example: '10191'
              statistics:
                properties:
                  phrases: { type: integer, example: 6 }
                  words: { type: integer, example: 13 }
                type: object
            type: object
        skipped:
          $ref: '#/components/schemas/SkippedInfo'
        skippedQaCheckCategories:
          $ref: '#/components/schemas/SkippedQaCheckCategories'
      type: object
    FileProgressCollectionResource:
      description: 'Language Translation File Progress Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/FileProgressResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    FileProgressResource:
      description: 'Language Translation File Progress Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileProgress'
    LanguageBranchesProgressCollectionResource:
      description: 'Branches Translation Language Progress Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/LanguageBranchesProgressResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    LanguageBranchesProgressResource:
      description: 'Branches Translation Language Progress Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/LanguageBranchesProgress'
    LanguageFilesProgressCollectionResource:
      description: 'Files Translation Language Progress Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/LanguageFilesProgressResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    LanguageFilesProgressResource:
      description: 'Files Translation Language Progress Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/LanguageFilesProgress'
    ProgressCollectionResource:
      description: 'Language Translation Progress Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ProgressResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ProgressResource:
      description: 'Language Translation Progress Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ProjectProgress'
    FileProgress:
      title: 'Language Translation Progress'
      description: 'Language Translation File Progress Response Model'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Progress'
        -
          properties:
            languageId:
              type: string
              example: af
            eTag:
              type: string
              example: fd0ea167420ef1687fd16635b9fb67a3
            language:
              $ref: '#/components/schemas/Language'
    LanguageBranchesProgress:
      title: 'Language Translation Progress'
      description: 'Branches Translation Language Progress Response Model'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Progress'
        -
          properties:
            branchId:
              type: integer
              example: 12
            eTag:
              type: string
              example: fd0ea167420ef1687fd16635b9fb67a3
    LanguageFilesProgress:
      title: 'Language Translation Progress'
      description: 'Files Translation Language Progress Response Model'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Progress'
        -
          properties:
            fileId:
              type: integer
              example: 12
            eTag:
              type: string
              example: fd0ea167420ef1687fd16635b9fb67a3
    Progress:
      title: 'Language Translation Progress'
      description: 'Language Translation Progress Response Model'
      properties:
        words:
          properties:
            total:
              type: integer
              example: 7249
            translated:
              type: integer
              example: 3651
            preTranslateAppliedTo:
              type: integer
              example: 1254
            approved:
              type: integer
              example: 3637
          type: object
        phrases:
          properties:
            total:
              type: integer
              example: 3041
            translated:
              type: integer
              example: 2631
            preTranslateAppliedTo:
              type: integer
              example: 1254
            approved:
              type: integer
              example: 2622
          type: object
        translationProgress:
          type: integer
          example: 86
        approvalProgress:
          type: integer
          example: 86
        qaChecksStatus:
          properties:
            total:
              type: integer
              example: 10
            inProgress:
              type: integer
              example: 5
            passed:
              type: integer
              example: 4
            failed:
              type: integer
              example: 1
          type: object
      type: object
    ProjectProgress:
      title: 'Language Translation Progress'
      description: 'Language Translation Progress Response Model'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Progress'
        -
          properties:
            languageId:
              type: string
              example: af
            language:
              $ref: '#/components/schemas/Language'
    ProjectInfoPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/ProjectSettingOperation'
    ProjectSettingOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - add
            - replace
            - remove
            - test
        path:
          description: 'Where `languageId` is one of project''s languages and `mappingKey` is one of language-based export pattern fields. <p>A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a></p>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /targetLanguageIds
            - /cname
            - /visibility
            - /languageAccessPolicy
            - /glossaryAccess
            - /glossaryAccessOption
            - /description
            - /translateDuplicates
            - /isMtAllowed
            - /taskBasedAccessControl
            - /autoSubstitution
            - /skipUntranslatedStrings
            - /skipUntranslatedFiles
            - /exportApprovedOnly
            - /autoTranslateDialects
            - /publicDownloads
            - /hiddenStringsProofreadersAccess
            - /useGlobalTm
            - /showTmSuggestionsDialects
            - /tmApprovedSuggestionsOnly
            - /normalizePlaceholder
            - /saveMetaInfoInSource
            - /inContext
            - /inContextProcessHiddenStrings
            - /inContextPseudoLanguageId
            - /qaCheckIsActive
            - /qaCheckCategories
            - '/qaCheckCategories/{category}'
            - /qaChecksIgnorableCategories
            - '/qaChecksIgnorableCategories/{category}'
            - /languageMapping
            - '/languageMapping/{languageId}'
            - '/languageMapping/{languageId}/{mappingKey}'
            - /notificationSettings/translatorNewStrings
            - /notificationSettings/managerNewStrings
            - /notificationSettings/managerLanguageCompleted
            - /pseudoLanguageId
            - /defaultTmId
            - /defaultGlossaryId
            - /assignedStyleGuides
            - /assignedGlossaries
            - /assignedTms
            - '/assignedTms/{tmId}'
            - '/tmPenalties/{penaltyKey}'
            - /tmContextType
            - /tmPreTranslate
            - /mtPreTranslate
            - /aiPreTranslate
            - /preTranslationAiPromptId
            - /editorSuggestionAiPromptId
            - /qaCheckActionAiPromptId
            - /contextReviewAiPromptId
            - /savingsReportSettingsTemplateId
          x-doc-sections:
            - file-based
      type: object
      discriminator:
        propertyName: op
        mapping:
          add: '#/components/schemas/ProjectSettingOperationAdd'
          replace: '#/components/schemas/ProjectSettingOperationReplace'
          remove: '#/components/schemas/ProjectSettingOperationRemove'
          test: '#/components/schemas/ProjectSettingOperationTest'
    ProjectSettingOperationAdd:
      description: 'A JSON Patch `Add` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProjectSettingOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: object
    ProjectSettingOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProjectSettingOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: object
    ProjectSettingOperationRemove:
      description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProjectSettingOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: object
    ProjectSettingOperationTest:
      description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProjectSettingOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: object
    FileFormatSettingsPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/FileFormatSettingsOperation'
    FileFormatSettingsOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
          type: string
          format: json-pointer
          enum:
            - /format
            - /settings
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/FileFormatSettingsOperationReplace'
          test: '#/components/schemas/FileFormatSettingsOperationTest'
    FileFormatSettingsOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/FileFormatSettingsOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: array
                  items: { type: string }
    FileFormatSettingsOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/FileFormatSettingsOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    ProjectSystemPlaceholderMassPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/ProjectSystemPlaceholderMassOperation'
    ProjectSystemPlaceholderMassOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: "A JSON Pointer as defined by <a href=\"https://tools.ietf.org/html/rfc6901\" target=\"_blank\">RFC 6901</a>.\n\nThe first segment is the key of the system placeholder, and `/isEnabled` is the only property it accepts. See [Placeholders](#tag/Placeholders) for what each key matches."
          type: string
          format: json-pointer
          enum:
            - /wrappedAmpersand/isEnabled
            - /appleStringsdictPlural/isEnabled
            - /dollarInsideBraces/isEnabled
            - /dollarOutsideBraces/isEnabled
            - /wrappedColon/isEnabled
            - /wrappedDollar/isEnabled
            - /dollarParentheses/isEnabled
            - /i18nextNesting/isEnabled
            - /i18nextLegacy/isEnabled
            - /rubyInterpolation/isEnabled
            - /mailchimpMergeTag/isEnabled
            - /swiftInterpolation/isEnabled
            - /bracesTriple/isEnabled
            - /bracesDouble/isEnabled
            - /bracesSingle/isEnabled
            - /bracesDoubleFormatted/isEnabled
            - /dateTimePattern/isEnabled
            - /appleStringCatalogNamed/isEnabled
            - /printfSpecifier/isEnabled
            - /pythonPercentFormat/isEnabled
            - /railsI18n/isEnabled
            - /javaMessageFormat/isEnabled
            - /dotNetCompositeFormat/isEnabled
            - /twig/isEnabled
            - /phpInterpolation/isEnabled
            - /freemarkerDirective/isEnabled
            - /wrappedPercent/isEnabled
            - /dateTimeSpecifier/isEnabled
        value:
          description: 'Whether Crowdin recognizes the placeholder in this project'
          type: boolean
      type: object
    SystemStringsExporterSettingsPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/SystemStringsExporterSettingsOperation'
    SystemStringsExporterSettingsOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
          type: string
          format: json-pointer
          enum:
            - /format
            - /settings
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/SystemStringsExporterSettingsOperationReplace'
          test: '#/components/schemas/SystemStringsExporterSettingsOperationTest'
    SystemStringsExporterSettingsOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/SystemStringsExporterSettingsOperation'
        -
          properties:
            value:
              description: 'A format name for the `/format` path, or a settings object for the `/settings` path'
              oneOf:
                -
                  type: string
                  enum: [android, macosx, xliff]
                  example: android
                -
                  type: object
                  oneOf: [{ $ref: '#/components/schemas/AndroidSystemStringsExporterSettings.settings' }, { $ref: '#/components/schemas/MacOSXSystemStringsExporterSettings.settings' }, { $ref: '#/components/schemas/XliffSystemStringsExporterSettings.settings' }]
    SystemStringsExporterSettingsOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/SystemStringsExporterSettingsOperation'
        -
          properties:
            value:
              description: 'A format name for the `/format` path, or a settings object for the `/settings` path'
              oneOf:
                -
                  type: string
                  enum: [android, macosx, xliff]
                  example: android
                -
                  type: object
                  oneOf: [{ $ref: '#/components/schemas/AndroidSystemStringsExporterSettings.settings' }, { $ref: '#/components/schemas/MacOSXSystemStringsExporterSettings.settings' }, { $ref: '#/components/schemas/XliffSystemStringsExporterSettings.settings' }]
    ProjectCreateForm:
      title: 'Project Form'
      required:
        - name
        - sourceLanguageId
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CrowdinStringsBasedProjectCreateForm'
        -
          $ref: '#/components/schemas/CrowdinStringsBasedProjectCreateForm'
        -
          properties:
            saveMetaInfoInSource:
              description: 'Context and max.length added in Crowdin will be visible in the downloaded files'
              type: boolean
              example: true
            type:
              description: 'Defines the project type. To create a file-based project, `type` should be set to 0.'
              type: integer
              default: 0
              enum:
                - 0
                - 1
              example: 0
            skipUntranslatedFiles:
              description: 'Defines whether to export only translated file'
              type: boolean
              example: false
            tmContextType:
              description: "TM perfect match searching mode. Available values:\n * segmentContext - searching by context\n * auto - context search for key-value formats and segment search for others\n * prevAndNextSegment - search by previous and next segment"
              type: string
              default: segmentContext
              enum:
                - segmentContext
                - auto
                - prevAndNextSegment
              example: segmentContext
      x-doc-sections:
        - file-based
    CrowdinStringsBasedProjectCreateForm:
      title: 'Strings Based Project Form (BETA)'
      required:
        - name
        - sourceLanguageId
      properties:
        name:
          description: 'Project Name'
          type: string
          example: 'Knowledge Base'
        identifier:
          description: 'Project Identifier'
          type: string
          example: 1f198a4e907688bc65834a6d5a6000c3
        sourceLanguageId:
          description: 'Source Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        targetLanguageIds:
          description: 'Target Languages Identifiers. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: array
          items:
            type: string
            example: es
        visibility:
          description: "Defines how users can join the project. Available values:\n * open – anyone can join the project\n * private – only invited users can join the project"
          type: string
          default: private
          enum:
            - open
            - private
          example: private
        languageAccessPolicy:
          description: "Defines access to project languages. Available values:\n * open – each project user can access all project languages\n * moderate – users should join each project language separately"
          type: string
          default: moderate
          enum:
            - open
            - moderate
          example: moderate
        cname:
          description: 'Custom domain name'
          type: string
          example: my-custom-domain.crowdin.com
        description:
          description: 'Project description'
          type: string
          example: 'Articles and tutorials'
        tagsDetection:
          description: "Values available:\n * 0 - Auto\n * 1 - Count tags\n * 2 - Skip tags"
          type: integer
          default: 0
          enum:
            - 0
            - 1
            - 2
          example: 1
        isMtAllowed:
          description: 'Allows machine translations (Microsoft Translator, Google Translate) be visible for translators in the Editor.'
          type: boolean
          default: true
          example: false
        taskBasedAccessControl:
          description: 'Allow project members work with tasks they assigned to, even if they do not have full access to the language.'
          type: boolean
          default: false
          example: false
        autoSubstitution:
          description: 'Allows auto-substitution'
          type: boolean
          default: true
          example: false
        autoTranslateDialects:
          description: "Automatically fill in regional dialects.\n\nIf `true`, all untranslated strings in regional dialects (e.g. Argentine Spanish) will automatically include translations completed in the primary language (e.g. Spanish)."
          type: boolean
          default: false
          example: true
        publicDownloads:
          description: 'Allows translators to download source files to their machines and upload translations back into the project. Project owner and managers can always download sources and upload translations.'
          type: boolean
          default: false
          example: true
        hiddenStringsProofreadersAccess:
          description: 'Allows proofreaders to work with hidden strings. Project owner and managers can always access hidden strings'
          type: boolean
          default: true
          example: false
        useGlobalTm:
          description: "If `true` - machine translations from connected MT engines (e.g. Microsoft Translator, Google Translate) will appear as suggestions in the Editor.\n\n __Note:__ If your organization plan is free or opensource - default value of this one will be `true`"
          type: boolean
          default: false
          example: false
        showTmSuggestionsDialects:
          description: 'If `true` - show primary language TM suggestions for dialects if there are no dialect-specific ones.'
          type: boolean
          default: true
          example: true
        tmApprovedSuggestionsOnly:
          description: 'If `true` - only approved suggestions will be saved to the project default TM.'
          type: boolean
          default: false
          example: false
        skipUntranslatedStrings:
          description: 'Defines whether to skip untranslated strings'
          type: boolean
          example: false
        exportApprovedOnly:
          description: 'Defines whether to export only approved strings'
          type: boolean
          example: true
        qaCheckIsActive:
          description: 'If `true` - QA checks are active'
          type: boolean
          default: true
          example: true
        qaCheckCategories:
          $ref: '#/components/schemas/qaCheckCategories'
        qaChecksIgnorableCategories:
          $ref: '#/components/schemas/qaChecksIgnorableCategories'
        languageMapping:
          description: 'Language Mapping'
          properties:
            uk:
              $ref: '#/components/schemas/language-mapping-uk'
          type: object
        glossaryAccess:
          description: 'Allow project members to manage glossary terms. The project owner and managers always can add and edit terms.'
          type: boolean
          default: false
          example: false
          deprecated: true
        glossaryAccessOption:
          description: 'Defines how project members will manage glossary terms. The project owner and managers always can add and edit terms.'
          type: string
          default: readOnly
          enum:
            - readOnly
            - fullAccess
            - manageDrafts
          example: readOnly
        normalizePlaceholder:
          description: 'Enable the transformation of the placeholders to the unified format to improve the work with TM suggestions'
          type: boolean
          example: true
        notificationSettings:
          description: 'Notification Settings'
          properties:
            translatorNewStrings:
              description: 'Notify translators about new strings'
              type: boolean
              default: false
              example: false
            managerNewStrings:
              description: 'Notify project managers about new strings'
              type: boolean
              default: false
              example: false
            managerLanguageCompleted:
              description: 'Notify project managers about language translation/validation completion'
              type: boolean
              default: false
              example: false
          type: object
        tmPreTranslate:
          title: TmPreTranslate
          properties:
            enabled:
              type: boolean
              example: true
            autoApproveOption:
              type: string
              enum:
                - all
                - perfectMatchOnly
                - exceptAutoSubstituted
                - perfectMatchApprovedOnly
                - none
              example: all
            minimumMatchRatio:
              type: string
              enum:
                - perfect
                - '100'
              example: perfect
          type: object
        mtPreTranslate:
          title: MtPreTranslate
          properties:
            enabled:
              type: boolean
              example: true
            mts:
              type: array
              items:
                $ref: '#/components/schemas/EngineMtPreTranslateProjectSettings'
          type: object
        aiPreTranslate:
          title: AiPreTranslate
          properties:
            enabled:
              type: boolean
              example: true
            aiPrompts:
              type: array
              items:
                $ref: '#/components/schemas/PromptAiPreTranslateProjectSettings'
          type: object
        preTranslationAiPromptId:
          description: 'AI Prompt ID to be used as prompt for AI auto-translation as default value'
          type: integer
          example: 11
          deprecated: true
        editorSuggestionAiPromptId:
          description: 'AI Prompt ID to be used as prompt for AI Suggestion action in Editor'
          type: integer
          example: 13
        qaCheckActionAiPromptId:
          description: 'AI Prompt ID to be used as prompt for QA check action'
          type: integer
          example: 8
        contextReviewAiPromptId:
          description: 'AI Prompt ID to be used as prompt for Advisor string context review'
          type: integer
          example: 11
        savingsReportSettingsTemplateId:
          description: 'Report Settings Templates Identifier. Get via [List Report Settings Templates](#operation/api.projects.reports.settings-templates.getMany)'
          type: integer
        defaultTmId:
          description: 'Translation Memory ID. If omitted new translation memory will be created. Get via [List TMs](#operation/api.tms.getMany)'
          type: integer
          default: null
          example: 1
        defaultGlossaryId:
          description: 'Glossary ID. If omitted new Glossary will be created. Get via [List Glossaries](#operation/api.glossaries.getMany)'
          type: integer
          default: null
          example: 1
        assignedStyleGuides:
          description: 'Style Guide IDs to assign to project. Get via [List Style Guides](#operation/api.style-guides.getMany)'
          type: array
          items:
            type: integer
            example: 1
        inContext:
          description: "Enable In-Context translations.\n\n__Note:__ Must be used together with `inContextPseudoLanguageId`"
          type: boolean
          default: false
          example: true
        inContextProcessHiddenStrings:
          description: "Export hidden strings via pseudo-language.\n\n__Note:__ If `true` - hidden strings included in the pseudo-language archive will be translatable via In-Context."
          type: boolean
          default: true
          example: true
        inContextPseudoLanguageId:
          description: "In-Context pseudo-language id.\n\n__Note:__ Must be different from project source and target languages"
          type: string
          example: uk
      type: object
    FileFormatSettingsCreateForm:
      required:
        - format
        - settings
      properties:
        format:
          description: 'Defines file format'
          type: string
          example: android
        settings:
          description: 'Defines file format settings'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/PropertyFileFormatSettings'
            -
              $ref: '#/components/schemas/XmlFileFormatSettings'
            -
              $ref: '#/components/schemas/WebXmlFileFormatSettings'
            -
              $ref: '#/components/schemas/HtmlFileFormatSettings'
            -
              $ref: '#/components/schemas/AdocFileFormatSettings'
            -
              $ref: '#/components/schemas/AndroidFileFormatSettings'
            -
              $ref: '#/components/schemas/MdFileFormatSettings'
            -
              $ref: '#/components/schemas/MdxV1FileFormatSettings'
            -
              $ref: '#/components/schemas/MdxV2FileFormatSettings'
            -
              $ref: '#/components/schemas/FmMdFileFormatSettings'
            -
              $ref: '#/components/schemas/FmHtmlFileFormatSettings'
            -
              $ref: '#/components/schemas/MadcapFlsnpFileFormatSettings'
            -
              $ref: '#/components/schemas/DocxFileFormatSettings'
            -
              $ref: '#/components/schemas/IdmlFileFormatSettings'
            -
              $ref: '#/components/schemas/MifFileFormatSettings'
            -
              $ref: '#/components/schemas/DitaFileFormatSettings'
            -
              $ref: '#/components/schemas/MediaWikiFileFormatSettings'
            -
              $ref: '#/components/schemas/ArbFileFormatSettings'
            -
              $ref: '#/components/schemas/JsonFileFormatSettings'
            -
              $ref: '#/components/schemas/FjsFileFormatSettings'
            -
              $ref: '#/components/schemas/MacOSXFileFormatSettings'
            -
              $ref: '#/components/schemas/ChromeFileFormatSettings'
            -
              $ref: '#/components/schemas/CsvFileFormatSettings'
            -
              $ref: '#/components/schemas/XlsxFileFormatSettings'
            -
              $ref: '#/components/schemas/XliffFileFormatSettings'
            -
              $ref: '#/components/schemas/XliffTwoFileFormatSettings'
            -
              $ref: '#/components/schemas/ReactIntlFileFormatSettings'
            -
              $ref: '#/components/schemas/TxtFileFormatSettings'
            -
              $ref: '#/components/schemas/JavaScriptFileFormatSettings'
            -
              $ref: '#/components/schemas/StringCatalogFileFormatSettings'
            -
              $ref: '#/components/schemas/VdfFileFormatSettings'
            -
              $ref: '#/components/schemas/OtherFileFormatSettings'
          x-doc-sections:
            - file-based
      type: object
    PropertyFileFormatSettings:
      title: 'Property file format settings'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            escapeQuotes:
              description: "Values available:\n * 0 - Do not escape single quote\n * 1 - Escape single quote by another single quote\n * 2 - Escape single quote by a backslash\n * 3 - Escape single quote by another single quote only in strings containing variables (`{0}`)"
              type: integer
              default: 1
              enum:
                - 0
                - 1
                - 2
                - 3
            escapeSpecialCharacters:
              description: "Defines whether any special characters (=, :, ! and #) should be escaped by backslash in exported translations. You can add escape_special_characters per-file option.\n\nAcceptable values are: 0, 1. Default is 0.\n * 0 - Do not escape special characters\n * 1 - Escape special characters by a backslash"
              type: integer
              default: 1
              enum:
                - 0
                - 1
            exportPattern:
              description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
              type: string
              default: null
              nullable: true
    JavaScriptFileFormatSettings:
      title: 'JavaScript File Format Settings'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            exportQuotes:
              description: "Acceptable values are: 'single', 'double'. Default is 'single'.\n * 'single' - Output will be enclosed in single quotes\n * 'double' - Output will be enclosed in double quotes"
              type: string
              enum:
                - single
                - double
    XmlFileFormatSettings:
      title: 'Xml file format settings'
      properties:
        translateContent:
          description: 'Defines whether to translate texts placed inside the tags'
          type: boolean
          default: true
        translateAttributes:
          description: 'Defines whether to translate tags attributes'
          type: boolean
          default: true
        translatableElements:
          description: "This is an array of strings, where each item is the XPaths to DOM element that should be imported.\n\nSupported XPath patterns:\n * `/path/to/node` — Absolute path to a specific node\n * `/path/to/attribute[@attr]` — Absolute path to an attribute\n * `//node` — All nodes with the specified name\n * `//[@attr]` — All elements with the specified attribute\n * `nodeone/nodetwo` — Relative path\n * `/nodeone//nodetwo` — Mixed absolute and descendant path\n * `//node[@attr]` — All nodes with the specified name and attribute"
          type: array
          items:
            type: string
          default: []
          example:
            - /path/to/node
            - '//node[@attr]'
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    WebXmlFileFormatSettings:
      title: 'WebXml file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    HtmlFileFormatSettings:
      title: 'Html file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
        excludedElements:
          description: 'Specify CSS selectors for elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - code
            - 'pre > code'
            - .code-block
      type: object
    AdocFileFormatSettings:
      title: 'Adoc file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        excludeIncludeDirectives:
          description: 'Skip Include Directives'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    MdFileFormatSettings:
      title: 'Md file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n__Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        strongMarker:
          description: 'Marker to use for strong.'
          type: string
          default: asterisk
          enum:
            - asterisk
            - underscore
        emphasisMarker:
          description: 'Marker to use for emphasis.'
          type: string
          default: underscore
          enum:
            - asterisk
            - underscore
        unorderedListBullet:
          description: 'Marker to use for unordered list bullet.'
          type: string
          default: dash
          enum:
            - asterisks
            - plus
            - dash
        tableColumnWidth:
          description: 'Table formatting.'
          type: string
          default: evenly_distribute_cells
          enum:
            - consolidate
            - evenly_distribute_cells
        frontMatterQuotes:
          description: 'Export front matter values in quotes.'
          type: string
          default: auto
          enum:
            - auto
            - single
            - double
      type: object
    MdxV1FileFormatSettings:
      title: 'Mdx v1 file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n__Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
        type:
          description: "Values available:\n * 'mdx_v1' — MDX (v1)\n * 'mdx_v2' - MDX (v2)"
          type: string
          default: mdx_v2
          enum:
            - mdx_v1
            - mdx_v2
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        excludeCodeBlocks:
          description: 'Defines whether to import code blocks.'
          type: boolean
          default: false
        strongMarker:
          description: 'Marker to use for strong.'
          type: string
          default: asterisk
          enum:
            - asterisk
            - underscore
        emphasisMarker:
          description: 'Marker to use for emphasis.'
          type: string
          default: underscore
          enum:
            - asterisk
            - underscore
        unorderedListBullet:
          description: 'Marker to use for unordered list bullet.'
          type: string
          default: dash
          enum:
            - asterisks
            - plus
            - dash
        tableColumnWidth:
          description: 'Table formatting.'
          type: string
          default: evenly_distribute_cells
          enum:
            - consolidate
            - evenly_distribute_cells
      type: object
    MdxV2FileFormatSettings:
      title: 'Mdx v2 file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        excludeCodeBlocks:
          description: 'Defines whether to import code blocks.'
          type: boolean
          default: false
        strongMarker:
          description: 'Marker to use for strong.'
          type: string
          default: asterisk
          enum:
            - asterisk
            - underscore
        emphasisMarker:
          description: 'Marker to use for emphasis.'
          type: string
          default: underscore
          enum:
            - asterisk
            - underscore
        unorderedListBullet:
          description: 'Marker to use for unordered list bullet.'
          type: string
          default: dash
          enum:
            - asterisks
            - plus
            - dash
        tableColumnWidth:
          description: 'Table formatting.'
          type: string
          default: evenly_distribute_cells
          enum:
            - consolidate
            - evenly_distribute_cells
      type: object
    MacOSXFileFormatSettings:
      title: 'MacOSX file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for strings files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    AndroidFileFormatSettings:
      title: 'Android file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    XliffFileFormatSettings:
      title: 'Xliff file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n__Important!__ This option disables the possibility to upload existing translations for xliff files when enabled."
          type: boolean
          default: false
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n__Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    ArbFileFormatSettings:
      title: 'Arb file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for ARB files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    XliffTwoFileFormatSettings:
      title: 'xliff 2.0 file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for xliff 2.0 files when enabled."
          type: boolean
          default: false
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    JsonFileFormatSettings:
      title: 'Json file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for JSON files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
        type:
          description: "Values available:\n * 'i18next_json' — i18next (*.json)\n * 'nestjs_i18n' - NestJS i18n"
          type: string
          enum:
            - i18next_json
            - nestjs_i18n
          example: nestjs_i18n
      type: object
    FjsFileFormatSettings:
      title: 'Fjs file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for FJS files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    ChromeFileFormatSettings:
      title: 'Chrome file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for Chrome files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    ReactIntlFileFormatSettings:
      title: 'React intl file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for React intl files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    CsvFileFormatSettings:
      title: 'CSV file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for CSV files when enabled."
          type: boolean
          default: false
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\n Storage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    XlsxFileFormatSettings:
      title: 'XLSX file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XLSX files when enabled."
          type: boolean
          default: false
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    FmMdFileFormatSettings:
      title: 'FmMd file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    FmHtmlFileFormatSettings:
      title: 'FmHtml file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
        excludedElements:
          description: 'Specify CSS selectors for elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - code
            - 'pre > code'
            - .code-block
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
      type: object
    MadcapFlsnpFileFormatSettings:
      title: 'MadcapFlsnp file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    DocxFileFormatSettings:
      title: 'Docx file format settings'
      properties:
        cleanTagsAggressively:
          description: "When checked, strips additional formatting tags related to text spacing.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        translateHiddenText:
          description: "When checked, exposes hidden text for translation.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        translateHyperlinkUrls:
          description: "When checked, exposes hidden hyperlinks for translation.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        translateHiddenRowsAndColumns:
          description: "When checked, exposes hidden rows and columns for translation.\n\n __Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        importNotes:
          description: "When checked, expose slide notes for translation.\n\n __Note:__ Works only for files with the following extensions: *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: true
        importHiddenSlides:
          description: "When checked, exposes hidden slides for translation.\n\n __Note:__ Works only for files with the following extensions: *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
        translateDocProperties:
          description: "When checked, exposes document properties such as title, subject, and creator for translation.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        translateComments:
          description: "When checked, exposes comments for translation.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: true
        ignoreWhitespaceStyles:
          description: "When checked, formatting that differs only in whitespace no longer produces separate tags.\n\n__Note:__ Can be set only when `cleanTagsAggressively` is enabled"
          type: boolean
          default: false
        addTabAsCharacter:
          description: 'When checked, a tab inside a text run is exposed as a character instead of a tag.'
          type: boolean
          default: false
        addLineSeparatorAsCharacter:
          description: 'When checked, a line break inside a text run is exposed as `lineSeparatorReplacement` instead of a tag.'
          type: boolean
          default: false
        lineSeparatorReplacement:
          description: "Character that replaces a line break when `addLineSeparatorAsCharacter` is enabled.\n\n __Note:__ Must be exactly one character"
          type: string
          default: "\n"
          example: "\n"
        replaceNoBreakHyphenTag:
          description: 'When checked, a non-breaking hyphen is exposed as a character instead of a tag.'
          type: boolean
          default: false
        ignoreSoftHyphenTag:
          description: 'When checked, soft hyphens are removed instead of being exposed as tags.'
          type: boolean
          default: false
        complexFieldDefinitionsToExtract:
          description: "Word complex field types whose text is exposed for translation.\n\n __Note:__ `HYPERLINK` is always extracted and can't be removed"
          type: array
          items:
            type: string
          default: []
          example:
            - PAGE
        translateWordHeadersFooters:
          description: "When checked, exposes headers and footers for translation.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        translateWordGraphicName:
          description: "When checked, exposes the name of a shape or image for translation.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: true
        translateWordGraphicDescription:
          description: "When checked, exposes the alternative text of a shape or image for translation.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        ignoreWordFontColors:
          description: "When checked, excludes text whose font color falls between `wordFontColorsMinIgnoranceThreshold` and `wordFontColorsMaxIgnoranceThreshold` from translation.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        wordFontColorsMinIgnoranceThreshold:
          description: "Darkest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means black. Must not be lighter than `wordFontColorsMaxIgnoranceThreshold` in any color channel.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: string
          default: ''
          example: A6A6A6
        wordFontColorsMaxIgnoranceThreshold:
          description: "Lightest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means white.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: string
          default: ''
          example: FFFFFF
        excludeWordStyles:
          description: "Paragraph style names singled out by `translateWordInExcludeStyleMode`, for example `Heading1`.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - Heading1
        translateWordInExcludeStyleMode:
          description: "How `excludeWordStyles` is read. If `true`, the listed styles are excluded from translation; if `false`, only they are translated.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        wordHighlightColors:
          description: "Word highlight colors singled out by `translateWordInExcludeHighlightMode`. One of: `black`, `blue`, `cyan`, `green`, `magenta`, `red`, `yellow`, `white`, `darkBlue`, `darkCyan`, `darkGreen`, `darkMagenta`, `darkRed`, `darkYellow`, `darkGray`, `lightGray`, `none`.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - yellow
        translateWordInExcludeHighlightMode:
          description: "How `wordHighlightColors` is read. If `true`, text with the listed highlights is excluded from translation; if `false`, only it is translated.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        translateWordExcludeColors:
          description: "When checked, excludes text whose color is listed in `wordExcludedColors` from translation.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        wordExcludedColors:
          description: "Text colors excluded from translation when `translateWordExcludeColors` is enabled, each six hexadecimal digits with an optional leading hash.\n\n __Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - FF0000
        translateExcelCellsCopied:
          description: "When checked, a cell whose text is shared with another cell is exposed once for translation.\n\n __Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: true
        translateExcelSheetNames:
          description: "When checked, exposes worksheet names for translation.\n\n __Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        excelExcludedColors:
          description: "Cell fill colors whose cells are excluded from translation, each the six-digit RGB with an optional leading hash, not the eight-digit ARGB stored in the file.\n\n __Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: array
          items:
            type: string
          default: []
          example:
            - A6A6A6
        translateExcelDiagramData:
          description: "When checked, exposes text inside SmartArt and diagram data for translation.\n\n __Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        translateExcelDrawings:
          description: "When checked, exposes text inside drawings and shapes on a worksheet for translation.\n\n __Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        allowWordStyleOptimization:
          description: 'When checked, run properties in the exported document are minified against the style definitions instead of being kept verbatim.'
          type: boolean
          default: true
        translateExcelExcludeColors:
          description: "When checked, excludes colored text runs inside a spreadsheet cell from translation.\n\n __Note:__ Applied when the file is parsed, even though it is set through `exportOptions`"
          type: boolean
          default: false
      type: object
    IdmlFileFormatSettings:
      title: 'Idml file format settings'
      properties:
        inlineHyperlinkText:
          description: "When checked, a hyperlink's text is extracted as part of the surrounding sentence so it can be translated in context, instead of appearing as a separate non-editable tag.\n\n__Note:__ Works only for files imported with the `idml8` parser."
          type: boolean
          default: false
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    MifFileFormatSettings:
      title: 'Mif file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    DitaFileFormatSettings:
      title: 'Dita file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n __Important!__ This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    MediaWikiFileFormatSettings:
      title: 'MediaWiki file format settings'
      properties:
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    TxtFileFormatSettings:
      title: 'Txt file format settings'
      properties:
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          default: null
          example: 61
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    StringCatalogFileFormatSettings:
      title: 'String Catalog file format settings'
      properties:
        importKeyAsSource:
          description: 'Determines whether to import the key as source string if it does not exist.'
          type: boolean
          default: true
          example: true
        importTranslations:
          description: 'Defines whether to import translations from the file'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n__Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    VdfFileFormatSettings:
      title: 'Vdf file format settings'
      properties:
        convertIcu:
          description: 'Defines whether to convert placeholders to the ICU MessageFormat syntax.'
          type: boolean
          default: true
        addGenderArgument:
          description: "Defines whether to append _gender suffix to variable names when converting gender ICU to ICU MessageFormat.\n\n__Note:__ Can be enabled only when `convertIcu` is `true`."
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    OtherFileFormatSettings:
      title: 'Other file format settings'
      properties:
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n __Note:__ Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    SystemStringsExporterSettingsCreateForm:
      required:
        - format
        - settings
      properties:
        format:
          description: 'Defines strings exporter format'
          type: string
          example: android
        settings:
          description: 'Defines strings exporter settings'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/AndroidSystemStringsExporterSettings'
            -
              $ref: '#/components/schemas/MacOSXSystemStringsExporterSettings'
            -
              $ref: '#/components/schemas/XliffSystemStringsExporterSettings'
      type: object
    LanguagePairMapping:
      title: 'Language pair mapping'
      description: 'Defines language pair mapping'
      type: object
      example:
        uk: es
        de: en
      additionalProperties:
        properties:
          sourceLanguageId:
            description: 'Defines language pair mapping the target language for the specified source language'
            type: string
        type: object
    AndroidSystemStringsExporterSettings:
      title: 'Android Strings Exporter Settings'
      required:
        - format
        - settings
      properties:
        format:
          description: 'Defines strings exporter format'
          type: string
          example: android
        settings:
          description: 'Defines strings exporter settings'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/AndroidSystemStringsExporterSettings.settings'
      type: object
    AndroidSystemStringsExporterSettings.settings:
      title: 'Android Strings Exporter Settings'
      properties:
        convertPlaceholders:
          description: 'Convert placeholders to Android format.'
          type: boolean
          default: false
        convertLineBreaks:
          description: 'Сonvert simple line breaks (Enter) to \n (e.g. New\nLine).'
          type: boolean
          default: false
        useCdataForStringsWithTags:
          description: 'Encloses strings with HTML tags in CDATA sections (e.g., `<b>Name</b>` > `<![CDATA[<b>Name</b>]]>`). Does not apply to strings with only `<xliff:g>` tags.'
          type: boolean
          default: false
      type: object
    MacOSXSystemStringsExporterSettings:
      title: 'MacOSX Strings Exporter Settings'
      required:
        - format
        - settings
      properties:
        format:
          description: 'Defines strings exporter format'
          type: string
          example: macosx
        settings:
          description: 'Defines strings exporter settings'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/MacOSXSystemStringsExporterSettings.settings'
      type: object
    MacOSXSystemStringsExporterSettings.settings:
      title: 'MacOSX Strings Exporter Settings'
      properties:
        convertPlaceholders:
          description: 'Convert placeholders to MacOSX format.'
          type: boolean
          default: false
        convertLineBreaks:
          description: 'Сonvert simple line breaks (Enter) to \n (e.g. New\nLine).'
          type: boolean
          default: false
        exportContext:
          description: 'Export string context as a comment above each string (e.g. `/* Context */`).'
          type: boolean
          default: true
      type: object
    XliffSystemStringsExporterSettings:
      title: 'Xliff Strings Exporter Settings'
      required:
        - format
        - settings
      properties:
        format:
          description: 'Defines strings exporter format'
          type: string
          example: xliff
        settings:
          description: 'Defines strings exporter settings'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/XliffSystemStringsExporterSettings.settings'
      type: object
    XliffSystemStringsExporterSettings.settings:
      title: 'Xliff Strings Exporter Settings'
      properties:
        languagePairMapping:
          $ref: '#/components/schemas/LanguagePairMapping'
        copySourceToEmptyTarget:
          description: 'Copy source to empty target.'
          type: boolean
          default: true
        exportTranslatorsComment:
          description: 'Export comments added by translators.'
          type: boolean
          default: true
      type: object
    CrowdinFileBasedProjectResource:
      title: 'Project Settings'
      description: 'Project Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ProjectSettingsResponse'
    CrowdinFileBasedProjectCollectionResource:
      description: 'Project Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                type: object
                oneOf:
                  - { $ref: '#/components/schemas/CrowdinFileBasedProjectResource' }
                  - { $ref: '#/components/schemas/CrowdinProjectInfoResource' }
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinStringBasedProjectCollectionResource:
      description: 'Project Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                type: object
                oneOf:
                  - { $ref: '#/components/schemas/CrowdinStringBasedProjectResource' }
                  - { $ref: '#/components/schemas/CrowdinProjectInfoResource' }
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinProjectInfoResource:
      title: 'Project Info'
      description: 'Project Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ProjectResponse'
    CrowdinStringBasedProjectResource:
      title: 'Project Settings'
      description: 'Project Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinStringBasedProjectSettingsResponse'
    FileBasedFileFormatSettingsCollectionResource:
      description: 'File Format Settings Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/FileBasedFileFormatSettingsResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    FileBasedFileFormatSettingsResource:
      description: 'File Format Settings Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileBasedFileFormatSettings'
    StringBasedFileFormatSettingsCollectionResource:
      description: 'File Format Settings Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/StringBasedFileFormatSettingsResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    StringBasedFileFormatSettingsResource:
      description: 'File Format Settings Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringBasedFileFormatSettings'
    CrowdinProjectAiSettingsResource:
      description: 'Project AI Settings Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinProjectAiSettings'
    ProjectSystemPlaceholderCollectionResource:
      description: 'Project System Placeholder Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ProjectSystemPlaceholderResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ProjectSystemPlaceholderResource:
      description: 'Project System Placeholder Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ProjectSystemPlaceholderResponse'
    ProjectSystemPlaceholderUpdatedCollectionResource:
      description: 'Project System Placeholder Updated Collection Resource'
      required:
        - data
      properties:
        data:
          description: "The rows one batch touched. No pagination: a batch answers with what it changed, not with a\npage of the project's placeholders."
          type: array
          items:
            $ref: '#/components/schemas/ProjectSystemPlaceholderResource'
      type: object
    SystemStringsExporterSettingsCollectionResource:
      description: 'File Format Settings Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/SystemStringsExporterSettingsResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    SystemStringsExporterSettingsResource:
      description: 'Strings exporter Settings Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/SystemStringsExporterSettings'
    ProjectSettingsResponse:
      title: 'Project Settings'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProjectResponse'
        -
          $ref: '#/components/schemas/CrowdinStringBasedProjectSettingsResponse'
        -
          properties:
            saveMetaInfoInSource:
              type: boolean
              example: true
            skipUntranslatedFiles:
              type: boolean
              example: false
            tmContextType:
              type: string
              default: segmentContext
              example: segmentContext
    ProjectResponse:
      title: 'Project Info'
      properties:
        id:
          type: integer
          example: 8
        type:
          type: integer
          example: 0
          x-doc-sections:
            - file-based
        userId:
          type: integer
          example: 6
        sourceLanguageId:
          type: string
          example: en
        targetLanguageIds:
          type: array
          items:
            type: string
            example: es
        languageAccessPolicy:
          type: string
          example: moderate
        name:
          type: string
          example: 'Knowledge Base'
        cname:
          type: string
          example: my-custom-domain.crowdin.com
          nullable: true
        identifier:
          type: string
          example: 1f198a4e907688bc65834a6d5a6000c3
        description:
          type: string
          example: 'Vault of all terms and their explanation'
        visibility:
          type: string
          example: private
        logo:
          type: string
          example: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAGm0lEQVR4nO3cWVCVdRjH8R+HTQQR93BJo1Jz1MrRSS21JDUNRWUxMabVpvXcNuNdl100U2qNuQ+KIiCCCIqYoSPkbiippCKiuBDKvp6FLmzG8Pxf1vO858D7+1z6vA7PMN85Oud//scj0rymBUROZnL1AtQ7MSwSwbBIBMMiEQyLRDAsEsGwSATDIhEMi0QwLBLBsEgEwyIRDItEMCwSwbBIBMMiEQyLRDAsEsGwSATDIhEMi0QwLBLBsEgEwyIRDItEMCwSwbBIBMMiEQyLRDAsEsGwSATDIhEMi0QwLBLBsEgEwyIRDItEMCwSwbBIBMMiEQyLRDAsEsGwSATDIhEMi0QwLBLBsEiEl6sXkLThu2+Vfx6Xmom8C5fEfu7bM6Yh8p25ytmjyip8v3knqmpqxX6+O+ArlpNNmzQBy+e/pZzV1tXjx7g9vT4qgGE51fiQ0fhg6SKYTB4Os8amZqyPT0bZwwoXbKY/huUko4KH4fP3lsPLy9NhZrXa8OuefSguveeCzVyDYTnBkIFB+Ob9KPTx9XGY2e0t2L4vA1duFOu/mAsxrG7q598X5tgVCAzwV84TDx7B2YIrOm/legyrG3x9vGGOjcaQgUHKecaxXOScPq/zVu6BYXWRyeSBL1ZGYFTwMOX8+Nk/kX70hM5buQ+G1UUfRyzG+JDRytn5y4XYfSBL543cC8PqguiFoZg68SXlrPBmCbYk70dLi85LuRmG1UkL3piOudOnKmcld+/jl13JsNnsOm/lfhhWJ0x/eSKWzZujnJU9rMC6nUloarbovJV7YlgdNPHFEMSGL1TOqmpq8VNcAmrq6nXeyn0xrA4YMyIYn0Uvhaen46+rvqERa3ck4mFltQs2c18Mqx1DBw3A16si4ePj7TCzWKz4eddelD74xwWbuTeG1YbAAH+YY1cgwL+vw8xms2NTUhpulNxxwWbuj2Fp6OPrA3NsNAYP6K+cx6cfwsXC6zpv1XMwLAVPTxO+jInAyGeGKuf7so+JflCwN2BYCp9ELsHYMc8qZ0f+OIOsEyd13qjnYVhPWRk2H1MmjFPOTuYXIPnQUZ036pkY1v8smj0Tc6a9qpwVXCtCXGqmzhv1XAzrP69PmYwlobOUs6LbpdiQkAK73eAHgJ3AsABMHvcCYsIWKGd3y8qxbmcSrFabzlv1bIYPK2TUCKyOCle+q15ZXYO1OxLR0Njkgs16NkOHFTxkEL6KiYC3t/p6pa+PDzwVN26ofYYNKyiwH8yx0fDv66f5jF8fX3waFa68zkVtM2RY/n5+MMdGY0D/wHaffW7kcISHztZhq97FkGEtmTsLw4cO7vDz82a+pvkxZFIzZFiq/1MVl95D0e1S5fMmkwc+Wh7W5j+b1Johw3ra5es38cO2XdiUtB919Q3KZ/r3C8CHy97VebOey/BhncwvwPr4JFgsVlRUVSMu7aDms5PGPo9Qjc+7U2uGDutw7ilsT8lo9Y56/tVr+P3UOc2/s2zem5qfeqAnDBmW3d6CPZlHkHI4RzlPzjqKkrv3lTMvL0+sjgrXfO+LHjNkWBk5uW2+KtlsdmxMTNV8x33Y4IGICZsvtV6vYMiwKqrbv/hQXlGF+HTt28wzXpmkeWmVDBpWR50tuIIT5/I156sWL8CgoPbfZDUihtWOhMxszVs4PPLRxrDaYbXasDExFc0aN5x55KPGsDrgQfkjJGRma8555OOIYXVQ3oVLOH3xL+WMRz6OGFYn7Nh/CA/KHylnPPJpjWF1gsVixaakNFgsVuWcRz5PMKxOunO/DMlZ2lfAeOTzGMPqgmNnLuD85ULljEc+jzGsLopLzUR5RZVyxiMfhtVljU3N2JyUpnktzOhHPgyrG4pL7yHtt+OacyMf+TCsbsrOO41Lf99Qzox85MOwnGBbygFUVtcoZ0Y98mFYTlDf0IgtyemaX8NtxCMfhuUk127dRkZOrnJmxCMfhuVEmcfzcLXolnJmtCMfhuVkW/emo7q2Tjkz0pEPw3Ky6to6bN2brvldWkY58mFYAq4W3cLhXPX3lBrlyMcj0ryGX1NHTsdXLBLBsEgEwyIRDItEMCwSwbBIBMMiEQyLRDAsEsGwSATDIhEMi0QwLBLBsEgEwyIRDItEMCwSwbBIBMMiEQyLRDAsEsGwSATDIhEMi0QwLBLBsEgEwyIRDItEMCwSwbBIBMMiEQyLRDAsEsGwSATDIhEMi0QwLBLBsEgEwyIRDItEMCwSwbBIBMMiEQyLRDAsEsGwSMS//tClrE3peLcAAAAASUVORK5CYII='
        publicDownloads:
          type: boolean
          example: true
          nullable: true
        createdAt:
          type: string
          format: date-time
          example: '2019-09-20T11:34:40+00:00'
          nullable: true
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-20T11:34:40+00:00'
          nullable: true
        lastActivity:
          type: string
          format: date-time
          example: '2019-09-20T11:34:40+00:00'
          nullable: true
        sourceLanguage:
          $ref: '#/components/schemas/Language'
        targetLanguages:
          type: array
          items:
            $ref: '#/components/schemas/Language'
        webUrl:
          type: string
          example: 'https://crowdin.com/project/some-project'
        savingsReportSettingsTemplateId:
          type: integer
          example: 1
      type: object
    CrowdinStringBasedProjectSettingsResponse:
      title: 'Project Settings'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ProjectResponse'
        -
          $ref: '#/components/schemas/ProjectResponse'
        -
          properties:
            translateDuplicates:
              type: integer
              example: 2
            tagsDetection:
              type: integer
              example: 0
            glossaryAccess:
              type: boolean
              default: false
              example: false
              deprecated: true
            glossaryAccessOption:
              type: string
              default: readOnly
              enum:
                - readOnly
                - fullAccess
                - manageDrafts
              example: readOnly
            isMtAllowed:
              type: boolean
              example: false
            taskBasedAccessControl:
              type: boolean
              example: false
            hiddenStringsProofreadersAccess:
              type: boolean
              default: true
              example: true
            autoSubstitution:
              type: boolean
              example: true
            exportTranslatedOnly:
              type: boolean
              example: false
            skipUntranslatedStrings:
              type: boolean
              example: false
            exportApprovedOnly:
              type: boolean
              example: false
            autoTranslateDialects:
              type: boolean
              example: true
            useGlobalTm:
              type: boolean
              example: false
            showTmSuggestionsDialects:
              type: boolean
              example: true
            tmApprovedSuggestionsOnly:
              type: boolean
              example: false
            isSuspended:
              type: boolean
              example: false
            qaCheckIsActive:
              type: boolean
              example: true
            qaCheckCategories:
              $ref: '#/components/schemas/qaCheckCategories'
            qaChecksIgnorableCategories:
              $ref: '#/components/schemas/qaChecksIgnorableCategories'
            languageMapping:
              properties:
                uk:
                  $ref: '#/components/schemas/language-mapping-uk'
              type: object
            notificationSettings:
              properties:
                translatorNewStrings:
                  description: 'Notify translators about new strings'
                  type: boolean
                  default: false
                  example: true
                managerNewStrings:
                  description: 'Notify project managers about new strings'
                  type: boolean
                  default: false
                  example: false
                managerLanguageCompleted:
                  description: 'Notify project managers about language translation/validation completion'
                  type: boolean
                  default: false
                  example: false
              type: object
            defaultTmId:
              type: integer
              example: 1
            defaultGlossaryId:
              type: integer
              example: 1
            assignedTms:
              properties:
                '1':
                  $ref: '#/components/schemas/assigned-tm'
              type: object
            assignedGlossaries:
              type: array
              items:
                type: integer
                example: 2
            assignedStyleGuides:
              type: array
              items:
                type: integer
                example: 2
            tmPenalties:
              properties:
                autoSubstitution:
                  type: integer
                  example: 1
                tmPriority:
                  properties: { priority: { type: integer, example: 2 }, penalty: { type: integer, example: 1 } }
                  type: object
                multipleTranslations:
                  type: integer
                  example: 1
                timeSinceLastUsage:
                  properties: { months: { type: integer, example: 2 }, penalty: { type: integer, example: 1 } }
                  type: object
                timeSinceLastModified:
                  properties: { months: { type: integer, example: 2 }, penalty: { type: integer, example: 1 } }
                  type: object
              type: object
            normalizePlaceholder:
              type: boolean
              example: false
            tmPreTranslate:
              $ref: '#/components/schemas/TmPreTranslateProjectSettings'
            mtPreTranslate:
              $ref: '#/components/schemas/MtPreTranslateProjectSettings'
            aiPreTranslate:
              $ref: '#/components/schemas/AiPreTranslateProjectSettings'
            preTranslationAiPromptId:
              type: integer
              example: 1
              nullable: true
              deprecated: true
            editorSuggestionAiPromptId:
              type: integer
              example: 2
              nullable: true
            qaCheckActionAiPromptId:
              type: integer
              example: 8
              nullable: true
            contextReviewAiPromptId:
              type: integer
              example: 11
              nullable: true
            inContext:
              type: boolean
              example: true
            inContextProcessHiddenStrings:
              type: boolean
              example: true
            inContextPseudoLanguageId:
              type: string
              example: uk
              nullable: true
            inContextPseudoLanguage:
              oneOf:
                -
                  $ref: '#/components/schemas/LanguageUk'
              nullable: true
    language-mapping-uk:
      title: "Language Mapping 'uk'"
      properties:
        name:
          type: string
          example: Ukranian
        two_letters_code:
          type: string
          example: ua
        three_letters_code:
          type: string
          example: ukr
        locale:
          type: string
          example: uk-UA
        locale_with_underscore:
          type: string
          example: uk_UA
        android_code:
          type: string
          example: uk-rUA
        osx_code:
          type: string
          example: ua.lproj
        osx_locale:
          type: string
          example: ua
      type: object
    assigned-tm:
      title: 'Assigned TM'
      properties:
        priority:
          type: integer
          example: 1
      type: object
    TmPreTranslateProjectSettings:
      title: TmPreTranslate
      properties:
        enabled:
          type: boolean
          example: true
        autoApproveOption:
          type: string
          enum:
            - all
            - perfectMatchOnly
            - exceptAutoSubstituted
            - perfectMatchApprovedOnly
            - none
          example: all
        minimumMatchRatio:
          type: string
          enum:
            - perfect
            - '100'
          example: perfect
      type: object
    EngineMtPreTranslateProjectSettings:
      title: 'Mt PreTranslate Engine Settings'
      properties:
        mtId:
          type: integer
          example: 1
        languageIds:
          description: 'Specify an array of languageIds to use specific languages, or use the string `all` to include all supported languages. Retrieve languageIds via the [List Supported Languages](#operation/api.languages.getMany) endpoint'
          type: array
          items:
            type: string
            example: uk
      type: object
    MtPreTranslateProjectSettings:
      title: MtPreTranslate
      properties:
        enabled:
          type: boolean
          example: true
        mts:
          type: array
          items:
            $ref: '#/components/schemas/EngineMtPreTranslateProjectSettings'
      type: object
    PromptAiPreTranslateProjectSettings:
      title: 'AI PreTranslate Engine Settings'
      properties:
        aiPromptId:
          description: 'AI Prompt Identifier. Get via [List AI Prompts](#operation/api.ai.prompts.getMany)'
          type: integer
          example: 1
        languageIds:
          description: 'Specify an array of languageIds to use specific languages, or use the string `all` to include all supported languages. Retrieve languageIds via the [List Supported Languages](#operation/api.languages.getMany) endpoint'
          type: array
          items:
            type: string
            example: uk
      type: object
    AiPreTranslateProjectSettings:
      title: AiPreTranslate
      properties:
        enabled:
          type: boolean
          example: true
        aiPrompts:
          type: array
          items:
            $ref: '#/components/schemas/PromptAiPreTranslateProjectSettings'
      type: object
    FileBasedFileFormatSettings:
      title: 'File Format Settings'
      properties:
        id:
          type: integer
          example: 44
        name:
          type: string
          example: 'Android XML'
        format:
          type: string
          example: android
        extensions:
          type: array
          items:
            type: string
          example:
            - xml
        settings:
          description: 'Defines file format settings'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/PropertyFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/XmlFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/WebXmlFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/HtmlFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/AdocFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/MdFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/MdxV1FileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/MdxV2FileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/FmMdFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/FmHtmlFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/MadcapFlsnpFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/DocxFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/VsdxFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/IdmlFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/MifFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/DitaFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/MediaWikiFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/TxtFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/AndroidFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/MacOSXFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/ArbFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/JsonFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/FjsFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/ChromeFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/CsvFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/XlsxFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/XliffFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/XliffTwoFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/ReactIntlFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/JavaScriptFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/VdfFileFormatSettingsResponse'
            -
              $ref: '#/components/schemas/OtherFileFormatSettingsResponse'
          x-doc-sections:
            - file-based
        createdAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:43+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:46+00:00'
          nullable: true
      type: object
    PropertyFileFormatSettingsResponse:
      title: 'Property file format settings'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            escapeQuotes:
              description: "Values available:\n * 0 - Do not escape single quote\n * 1 - Escape single quote by another single quote\n * 2 - Escape single quote by a backslash\n * 3 - Escape single quote by another single quote only in strings containing variables (`{0}`)"
              type: integer
              default: 1
              enum:
                - 0
                - 1
                - 2
                - 3
            escapeSpecialCharacters:
              description: "Defines whether any special characters (=, :, ! and #) should be escaped by backslash in exported translations. You can add escape_special_characters per-file option.\nAcceptable values are: 0, 1. Default is 0.\n * 0 - Do not escape special characters\n * 1 - Escape special characters by a backslash"
              type: integer
              default: 1
              enum:
                - 0
                - 1
            exportPattern:
              description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
              type: string
              default: null
              nullable: true
    JavaScriptFileFormatSettingsResponse:
      title: 'JavaScript File Format Settings Response'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/GeneralFileExportOptions'
        -
          properties:
            exportQuotes:
              description: "Acceptable values are: 'single', 'double'. Default is 'single'.\n * 'single' - Output will be enclosed in single quotes\n * 'double' - Output will be enclosed in double quotes"
              type: string
              enum:
                - single
                - double
    XmlFileFormatSettingsResponse:
      title: 'Xml file format settings'
      properties:
        translateContent:
          description: 'Defines whether to translate texts placed inside the tags'
          type: boolean
          default: true
        translateAttributes:
          description: 'Defines whether to translate tags attributes'
          type: boolean
          default: true
        translatableElements:
          description: "This is an array of strings, where each item is the XPaths to DOM element that should be imported.\n\nSupported XPath patterns:\n * `/path/to/node` — Absolute path to a specific node\n * `/path/to/attribute[@attr]` — Absolute path to an attribute\n * `//node` — All nodes with the specified name\n * `//[@attr]` — All elements with the specified attribute\n * `nodeone/nodetwo` — Relative path\n * `/nodeone//nodetwo` — Mixed absolute and descendant path\n * `//node[@attr]` — All nodes with the specified name and attribute"
          type: array
          items:
            type: string
          default: []
          example:
            - /path/to/node
            - '//node[@attr]'
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    WebXmlFileFormatSettingsResponse:
      title: 'WebXml file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n    Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        hideAttributeValues:
          description: 'HTML attributes (e.g., src, href, data) will be imported as hidden strings.'
          type: boolean
          default: false
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    HtmlFileFormatSettingsResponse:
      title: 'Html file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        hideAttributeValues:
          description: 'HTML attributes (e.g., src, href, data) will be imported as hidden strings.'
          type: boolean
          default: false
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    AdocFileFormatSettingsResponse:
      title: 'Adoc file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        excludeIncludeDirectives:
          description: 'Skip Include Directives'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    MdFileFormatSettingsResponse:
      title: 'Md file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        strongMarker:
          description: 'Marker to use for strong.'
          type: string
          default: asterisk
          enum:
            - asterisk
            - underscore
        emphasisMarker:
          description: 'Marker to use for emphasis.'
          type: string
          default: underscore
          enum:
            - asterisk
            - underscore
        unorderedListBullet:
          description: 'Marker to use for unordered list bullet.'
          type: string
          default: dash
          enum:
            - asterisks
            - plus
            - dash
        tableColumnWidth:
          description: 'Table formatting.'
          type: string
          default: evenly_distribute_cells
          enum:
            - consolidate
            - evenly_distribute_cells
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    MdxV1FileFormatSettingsResponse:
      title: 'Mdx v1 file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for Android files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        excludeCodeBlocks:
          description: 'Defines whether to import code blocks.'
          type: boolean
          default: false
        type:
          description: "Values available:\n * 'mdx_v1' — MDX (v1)\n * 'mdx_v2' - MDX (v2)"
          type: string
          default: mdx_v1
          enum:
            - mdx_v1
            - mdx_v2
        strongMarker:
          description: 'Marker to use for strong.'
          type: string
          default: asterisk
          enum:
            - asterisk
            - underscore
        emphasisMarker:
          description: 'Marker to use for emphasis.'
          type: string
          default: underscore
          enum:
            - asterisk
            - underscore
        unorderedListBullet:
          description: 'Marker to use for unordered list bullet.'
          type: string
          default: dash
          enum:
            - asterisks
            - plus
            - dash
        tableColumnWidth:
          description: 'Table formatting.'
          type: string
          default: evenly_distribute_cells
          enum:
            - consolidate
            - evenly_distribute_cells
      type: object
    MdxV2FileFormatSettingsResponse:
      title: 'Mdx v2 file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for Android files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
        excludedFrontMatterElements:
          description: 'Specify elements that should not be imported'
          type: array
          items:
            type: string
          example:
            - keywords
            - internal.description
            - tag
        excludeCodeBlocks:
          description: 'Defines whether to import code blocks.'
          type: boolean
          default: false
        strongMarker:
          description: 'Marker to use for strong.'
          type: string
          default: asterisk
          enum:
            - asterisk
            - underscore
        emphasisMarker:
          description: 'Marker to use for emphasis.'
          type: string
          default: underscore
          enum:
            - asterisk
            - underscore
        unorderedListBullet:
          description: 'Marker to use for unordered list bullet.'
          type: string
          default: dash
          enum:
            - asterisks
            - plus
            - dash
        tableColumnWidth:
          description: 'Table formatting.'
          type: string
          default: evenly_distribute_cells
          enum:
            - consolidate
            - evenly_distribute_cells
      type: object
    AndroidFileFormatSettingsResponse:
      title: 'Android file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    MacOSXFileFormatSettingsResponse:
      title: 'MacOSX file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for strings files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    ArbFileFormatSettingsResponse:
      title: 'Arb file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for ARB files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    XliffFileFormatSettingsResponse:
      title: 'Xliff file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for xliff files when enabled."
          type: boolean
          default: false
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    XliffTwoFileFormatSettingsResponse:
      title: 'xliff 2.0 file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for xliff 2.0 files when enabled."
          type: boolean
          default: false
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n     Note: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    CsvFileFormatSettingsResponse:
      title: 'CSV file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for CSV files when enabled."
          type: boolean
          default: false
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n     Note: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    XlsxFileFormatSettingsResponse:
      title: 'XLSX file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XLSX files when enabled."
          type: boolean
          default: false
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\n     Note: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    JsonFileFormatSettingsResponse:
      title: 'Json file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\nImportant! This option disables the possibility to upload existing translations for JSON files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
          x-doc-sections:
            - file-based
        type:
          description: "Values available:\n * 'i18next_json' — i18next (*.json)\n * 'nestjs_i18n' - NestJS i18n"
          type: string
          enum:
            - i18next_json
            - nestjs_i18n
          example: nestjs_i18n
      type: object
    FjsFileFormatSettingsResponse:
      title: 'Fjs file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for FJS files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    ChromeFileFormatSettingsResponse:
      title: 'Chrome file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for Chrome files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    ReactIntlFileFormatSettingsResponse:
      title: 'React intl file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for React intl files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    FmMdFileFormatSettingsResponse:
      title: 'FmMd file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    FmHtmlFileFormatSettingsResponse:
      title: 'FmHtml file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        hideAttributeValues:
          description: 'HTML attributes (e.g., src, href, data) will be imported as hidden strings.'
          type: boolean
          default: false
        inlineTags:
          description: 'Specify tags that should be considered inline'
          type: array
          items:
            type: string
          example:
            - code
            - pre
            - item
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    MadcapFlsnpFileFormatSettingsResponse:
      title: 'MadcapFlsnp file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    DocxFileFormatSettingsResponse:
      title: 'Docx file format settings'
      properties:
        cleanTagsAggressively:
          description: "When checked, strips additional formatting tags related to text spacing.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        translateHiddenText:
          description: "When checked, exposes hidden text for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        translateHyperlinkUrls:
          description: "When checked, exposes hidden hyperlinks for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        translateHiddenRowsAndColumns:
          description: "When checked, exposes hidden rows and columns for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        importNotes:
          description: "When checked, expose slide notes for translation.\n\n__Note:__ Works only for files with the following extensions: *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: true
        importHiddenSlides:
          description: "When checked, exposes hidden slides for translation.\n\n__Note:__ Works only for files with the following extensions: *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
        translateDocProperties:
          description: "When checked, exposes document properties such as title, subject, and creator for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        translateComments:
          description: "When checked, exposes comments for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: true
        ignoreWhitespaceStyles:
          description: "When checked, formatting that differs only in whitespace no longer produces separate tags.\n\n__Note:__ Can be set only when `cleanTagsAggressively` is enabled"
          type: boolean
          default: false
        addTabAsCharacter:
          description: 'When checked, a tab inside a text run is exposed as a character instead of a tag.'
          type: boolean
          default: false
        addLineSeparatorAsCharacter:
          description: 'When checked, a line break inside a text run is exposed as `lineSeparatorReplacement` instead of a tag.'
          type: boolean
          default: false
        lineSeparatorReplacement:
          description: "Character that replaces a line break when `addLineSeparatorAsCharacter` is enabled.\n\n__Note:__ Must be exactly one character"
          type: string
          default: "\n"
          example: "\n"
        replaceNoBreakHyphenTag:
          description: 'When checked, a non-breaking hyphen is exposed as a character instead of a tag.'
          type: boolean
          default: false
        ignoreSoftHyphenTag:
          description: 'When checked, soft hyphens are removed instead of being exposed as tags.'
          type: boolean
          default: false
        complexFieldDefinitionsToExtract:
          description: "Word complex field types whose text is exposed for translation.\n\n__Note:__ `HYPERLINK` is always extracted and can't be removed"
          type: array
          items:
            type: string
          default: []
          example:
            - PAGE
        translateWordHeadersFooters:
          description: "When checked, exposes headers and footers for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        translateWordGraphicName:
          description: "When checked, exposes the name of a shape or image for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: true
        translateWordGraphicDescription:
          description: "When checked, exposes the alternative text of a shape or image for translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm, *.pptx, *.potx, *.ppsx, *.pptm, *.potm, *.ppsm"
          type: boolean
          default: false
        ignoreWordFontColors:
          description: "When checked, excludes text whose font color falls between `wordFontColorsMinIgnoranceThreshold` and `wordFontColorsMaxIgnoranceThreshold` from translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        wordFontColorsMinIgnoranceThreshold:
          description: "Darkest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means black. Must not be lighter than `wordFontColorsMaxIgnoranceThreshold` in any color channel.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: string
          default: ''
          example: A6A6A6
        wordFontColorsMaxIgnoranceThreshold:
          description: "Lightest font color ignored when `ignoreWordFontColors` is enabled, as six hexadecimal digits with an optional leading hash. Empty means white.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: string
          default: ''
          example: FFFFFF
        excludeWordStyles:
          description: "Paragraph style names singled out by `translateWordInExcludeStyleMode`, for example `Heading1`.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - Heading1
        translateWordInExcludeStyleMode:
          description: "How `excludeWordStyles` is read. If `true`, the listed styles are excluded from translation; if `false`, only they are translated.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        wordHighlightColors:
          description: "Word highlight colors singled out by `translateWordInExcludeHighlightMode`. One of: `black`, `blue`, `cyan`, `green`, `magenta`, `red`, `yellow`, `white`, `darkBlue`, `darkCyan`, `darkGreen`, `darkMagenta`, `darkRed`, `darkYellow`, `darkGray`, `lightGray`, `none`.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - yellow
        translateWordInExcludeHighlightMode:
          description: "How `wordHighlightColors` is read. If `true`, text with the listed highlights is excluded from translation; if `false`, only it is translated.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: true
        translateWordExcludeColors:
          description: "When checked, excludes text whose color is listed in `wordExcludedColors` from translation.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: boolean
          default: false
        wordExcludedColors:
          description: "Text colors excluded from translation when `translateWordExcludeColors` is enabled, each six hexadecimal digits with an optional leading hash.\n\n__Note:__ Works only for files with the following extensions: *.docx, *.dotx, *.docm, *.dotm"
          type: array
          items:
            type: string
          default: []
          example:
            - FF0000
        translateExcelCellsCopied:
          description: "When checked, a cell whose text is shared with another cell is exposed once for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: true
        translateExcelSheetNames:
          description: "When checked, exposes worksheet names for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        excelExcludedColors:
          description: "Cell fill colors whose cells are excluded from translation, each the six-digit RGB with an optional leading hash, not the eight-digit ARGB stored in the file.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: array
          items:
            type: string
          default: []
          example:
            - A6A6A6
        translateExcelDiagramData:
          description: "When checked, exposes text inside SmartArt and diagram data for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        translateExcelDrawings:
          description: "When checked, exposes text inside drawings and shapes on a worksheet for translation.\n\n__Note:__ Works only for files with the following extensions: *.xlsx, *.xltx, *.xlsm, *.xltm"
          type: boolean
          default: false
        allowWordStyleOptimization:
          description: 'When checked, run properties in the exported document are minified against the style definitions instead of being kept verbatim.'
          type: boolean
          default: true
        translateExcelExcludeColors:
          description: "When checked, excludes colored text runs inside a spreadsheet cell from translation.\n\n__Note:__ Applied when the file is parsed, even though it is set through `exportOptions`"
          type: boolean
          default: false
      type: object
    VsdxFileFormatSettingsResponse:
      title: 'VSDX file format settings'
      properties:
        cleanTagsAggressively:
          description: 'When checked, strips additional formatting tags related to text spacing.'
          type: boolean
          default: false
        translateHyperlinkUrls:
          description: 'When checked, exposes hidden hyperlinks for translation.'
          type: boolean
          default: false
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\nImportant! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    IdmlFileFormatSettingsResponse:
      title: 'Idml file format settings'
      properties:
        inlineHyperlinkText:
          description: "When checked, a hyperlink's text is extracted as part of the surrounding sentence so it can be translated in context, instead of appearing as a separate non-editable tag."
          type: boolean
          default: false
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    MifFileFormatSettingsResponse:
      title: 'Mif file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    DitaFileFormatSettingsResponse:
      title: 'Dita file format settings'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments.\n\n     Important! This option disables the possibility to upload existing translations for XML files when enabled."
          type: boolean
          default: true
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    MediaWikiFileFormatSettingsResponse:
      title: 'MediaWiki file format settings'
      properties:
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    TxtFileFormatSettingsResponse:
      title: 'Txt file format settings'
      properties:
        customSegmentation:
          description: 'Specifies whether custom segmentation rules are used.'
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    VdfFileFormatSettingsResponse:
      title: 'Vdf file format settings'
      properties:
        convertIcu:
          description: 'Defines whether to convert placeholders to the ICU MessageFormat syntax.'
          type: boolean
          default: true
        addGenderArgument:
          description: "Defines whether to append _gender suffix to variable names when converting gender ICU to ICU MessageFormat.\n\n__Note:__ Can be enabled only when `convertIcu` is `true`."
          type: boolean
          default: false
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    OtherFileFormatSettingsResponse:
      title: 'Other file format settings'
      properties:
        exportPattern:
          description: "File format export pattern. Defines file name and path in resulting translations bundle\n\nNote: Can't contain `: * ? \" < > |` symbols"
          type: string
          default: null
          nullable: true
      type: object
    StringBasedFileFormatSettings:
      title: 'File Format Settings'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/FileBasedFileFormatSettings'
    CrowdinProjectAiSettings:
      title: 'Project AI Settings'
      properties:
        preTranslationAiPromptId:
          type: integer
          example: 2
          deprecated: true
        editorSuggestionAiPromptId:
          type: integer
          example: 2
        qaCheckActionAiPromptId:
          type: integer
          example: 8
          nullable: true
        contextReviewAiPromptId:
          type: integer
          example: 11
          nullable: true
      type: object
    ProjectSystemPlaceholderResponse:
      title: 'Project System Placeholder'
      description: 'A placeholder Crowdin ships, turned on or off per project'
      required:
        - id
        - isEnabled
        - label
        - description
        - examples
      properties:
        id:
          description: 'Key of the system placeholder. Name it in the `path` of a batch operation to turn the placeholder on or off'
          type: string
          enum:
            - wrappedAmpersand
            - appleStringsdictPlural
            - dollarInsideBraces
            - dollarOutsideBraces
            - wrappedColon
            - wrappedDollar
            - dollarParentheses
            - i18nextNesting
            - i18nextLegacy
            - rubyInterpolation
            - mailchimpMergeTag
            - swiftInterpolation
            - bracesTriple
            - bracesDouble
            - bracesSingle
            - bracesDoubleFormatted
            - dateTimePattern
            - appleStringCatalogNamed
            - printfSpecifier
            - pythonPercentFormat
            - railsI18n
            - javaMessageFormat
            - dotNetCompositeFormat
            - twig
            - phpInterpolation
            - freemarkerDirective
            - wrappedPercent
            - dateTimeSpecifier
          example: printfSpecifier
        isEnabled:
          description: "If `false`, this project stops recognizing the placeholder in the QA checks and in the Editor. The Editor keeps highlighting a construct another enabled placeholder still claims\n\n__Note:__ A construct that a blocking custom placeholder also matches is reported under that placeholder once this one is off, so its mismatch becomes non-ignorable"
          type: boolean
          example: true
        label:
          description: 'Name of the placeholder, in the language of the request. Carries no syntax example — `examples` does'
          type: string
          example: 'C-style format specifiers'
        examples:
          description: 'Constructs the placeholder matches, written out. Never localized, so they can be rendered as code. A placeholder that merges several patterns lists all of them'
          type: array
          items:
            type: string
          example:
            - '%s'
        description:
          description: 'One line saying where the construct comes from, in the language of the request. Carries no syntax example — `examples` does, and it repeats neither that nor `label`'
          type: string
          example: 'C, PHP, Java, Objective-C, Android, and Qt'
      type: object
    SystemStringsExporterSettings:
      title: 'String Exporter Settings'
      properties:
        id:
          type: integer
          example: 2
        format:
          type: string
          example: android
        settings:
          description: 'Defines file format settings'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/AndroidstringExporterSettingsResponse'
            -
              $ref: '#/components/schemas/MacOSXstringExporterSettingsResponse'
            -
              $ref: '#/components/schemas/XliffStringExporterSettingsResponse'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:43+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:46+00:00'
      type: object
    AndroidstringExporterSettingsResponse:
      title: 'Android strings exporter settings'
      properties:
        convertPlaceholders:
          description: 'Convert placeholders to Android format.'
          type: boolean
          default: false
        convertLineBreaks:
          description: 'Сonvert simple line breaks (Enter) to \n (e.g. New\nLine).'
          type: boolean
          default: false
        useCdataForStringsWithTags:
          description: 'Encloses strings with HTML tags in CDATA sections (e.g., `<b>Name</b>` > `<![CDATA[<b>Name</b>]]>`). Does not apply to strings with only `<xliff:g>` tags.'
          type: boolean
          default: false
      type: object
    MacOSXstringExporterSettingsResponse:
      title: 'MacOSX strings exporter settings'
      properties:
        convertPlaceholders:
          description: 'Convert placeholders to MacOSX format.'
          type: boolean
          default: false
        convertLineBreaks:
          description: 'Сonvert simple line breaks (Enter) to \n (e.g. New\nLine).'
          type: boolean
          default: false
        exportContext:
          description: 'Export string context as a comment above each string (e.g. `/* Context */`).'
          type: boolean
          default: true
      type: object
    XliffStringExporterSettingsResponse:
      title: 'Xliff strings exporter settings'
      properties:
        languagePairMapping:
          $ref: '#/components/schemas/LanguagePairMapping'
      type: object
    QaCheckCollectionResource:
      description: 'QaCheck Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/QaCheckResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    QaCheckFileStatisticCollectionResource:
      description: 'QA Check File Statistic Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/QaCheckFileStatisticResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    QaCheckFileStatisticResource:
      description: 'QA Check File Statistic Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/QaCheckFileStatistic'
    QaCheckResource:
      description: 'QaCheck Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/QaCheck'
    QaCheckRevalidationResource:
      description: 'QA Check Revalidation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/QaCheckRevalidation'
    QaCheckStatisticCollectionResource:
      description: 'QaCheck Statistic Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/QaCheckStatisticResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    QaCheckStatisticResource:
      description: 'QaCheck Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/QaCheck'
    QaCheckRevalidation:
      title: 'QA Check Revalidation'
      properties:
        identifier:
          type: string
          example: b5215a34-1305-4b21-8054-fc2eb252842f
        status:
          type: string
          example: created
        progress:
          description: 'in percentages'
          type: integer
          example: 0
        attributes:
          properties:
            languageIds:
              description: 'Language IDs to revalidate'
              type: array
              items:
                type: string
              example:
                - uk
                - fr
            qaCheckCategories:
              description: 'QA check categories to revalidate'
              type: array
              items:
                type: string
              example:
                - ai
            failedOnly:
              description: 'If true, only languages with failed QA checks will be revalidated'
              type: boolean
              default: false
              example: false
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: null
          nullable: true
      type: object
    QaCheckFileStatistic:
      title: 'QA Check File Statistic'
      properties:
        fileId:
          type: integer
          example: 2
        total:
          type: integer
          example: 5
      type: object
    QaCheck:
      title: 'Translation Quality Assurance'
      description: 'QaCheck Response Model'
      properties:
        stringId:
          type: integer
          example: 1
        languageId:
          type: string
          example: uk
        category:
          type: string
          example: spellcheck
        categoryDescription:
          type: string
          example: Spelling
        validation:
          type: string
          example: spellcheck
        validationDescription:
          type: string
          example: Misspelling
        pluralId:
          type: integer
          example: -1
        text:
          type: string
          example: "Spellcheck failed for the following word: 'локалзація'."
      type: object
    QaCheckStatistic:
      title: 'Translation Quality Assurance'
      description: 'QaCheck Response Model'
      properties:
        total:
          type: integer
          example: 5
        languageId:
          type: integer
          example: 46
      type: object
    ReferenceCreateForm:
      required:
        - storageId
        - name
      properties:
        storageId:
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          type: integer
          example: 67890
        name:
          description: 'Reference file name'
          type: string
          example: design_reference.png
      type: object
    ReferenceCollectionResource:
      description: 'List References'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ReferenceResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ReferenceResource:
      description: 'Asset Reference Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ReferenceResponseModel'
    ReferenceResponseModel:
      title: 'Asset Reference'
      properties:
        id:
          type: integer
          example: 123
        name:
          type: string
          example: design_reference.png
        url:
          type: string
          example: 'https://example.com/reference/design_reference.png'
        user:
          properties:
            id:
              type: integer
              example: 1
            username:
              type: string
              example: john_doe
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-20T11:05:24+00:00'
        mimeType:
          description: 'MIME type of the reference file'
          type: string
          example: image/png
      type: object
    ReportSettingsTemplatePatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/ReportSettingsTemplateOperation'
    ReportSettingsTemplateOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /currency
            - /unit
            - /mode
            - /config
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/ReportSettingsTemplateOperationReplace'
          test: '#/components/schemas/ReportSettingsTemplateOperationTest'
    ReportSettingsTemplateOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ReportSettingsTemplateOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
    ReportSettingsTemplateOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ReportSettingsTemplateOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: array
                  items: { type: string }
    UserReportSettingsTemplatePatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/UserReportSettingsTemplateOperation'
    UserReportSettingsTemplateOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /currency
            - /unit
            - /config
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/UserReportSettingsTemplateOperationReplace'
          test: '#/components/schemas/UserReportSettingsTemplateOperationTest'
    UserReportSettingsTemplateOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/UserReportSettingsTemplateOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
    UserReportSettingsTemplateOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/UserReportSettingsTemplateOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: array
                  items: { type: string }
    CrowdinPEReportProjectSettingsTemplateCreateForm:
      title: 'Report settings template for post-editing'
      required:
        - name
        - currency
        - unit
        - config
      properties:
        name:
          description: 'Template name'
          type: string
          example: 'Default template'
        currency:
          description: 'Defines report currency'
          type: string
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
          example: USD
        unit:
          description: 'Defines report unit'
          type: string
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        config:
          description: 'Defines report config'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template-form.config'
        isPublic:
          description: 'Defines report public'
          type: boolean
          default: false
          example: true
        isGlobal:
          description: 'Defines a report as global'
          type: boolean
          default: false
          example: true
      type: object
    post-edit-report-settings-template-form.config:
      required:
        - baseRates
        - individualRates
        - netRateSchemes
      properties:
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template-form.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages or users)'
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template-form.individual-rate'
        netRateSchemes:
          description: "Net Rate Schemes (Percentage paid of full translation rate)\n\n__Note:__ A new translation will be included in the report at the lowest rate if multiple scheme categories can be applied to the translation"
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template-form.net-rate-schemes'
        calculateInternalMatches:
          type: boolean
          default: false
        includePreTranslatedStrings:
          type: boolean
          default: false
        excludeApprovalsForEditedTranslations:
          description: 'Exclude approvals when the same user has made translations for the string.'
          type: boolean
          default: false
          deprecated: true
        preTranslatedStringsCategorizationAdjustment:
          description: 'Repetitive translations of pre-translated strings are reported under TM or MT match rates instead of Other suggestion match rates, depending on the initial pre-translation type.'
          type: boolean
          default: false
          deprecated: true
        useCategoryBasedProofreadRates:
          description: 'Approvals are treated as submitting an identical translation at the 100% match rate of the corresponding Net Rate Scheme category (TM, MT, AI, or other). When disabled, all approvals use the flat base proofread rate.'
          type: boolean
          default: false
        useTmEditDistance:
          description: 'Calculations are based on the edit distance between the TM match and final translation instead of source segment similarity. Matches recorded before July 13, 2026, fall back to traditional source similarity.'
          type: boolean
          default: false
      type: object
    post-edit-report-settings-template-form.base-rates:
      required:
        - fullTranslation
        - proofread
      properties:
        fullTranslation:
          description: 'Applies to all languages by default'
          type: number
          example: 0.1
        proofread:
          type: number
          example: 0.12
      type: object
    post-edit-report-settings-template-form.individual-rate:
      required:
        - languageIds
        - userIds
        - fullTranslation
        - proofread
      properties:
        languageIds:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: 1
        fullTranslation:
          type: number
          example: 0.1
        proofread:
          type: number
          example: 0.12
      type: object
    post-edit-report-settings-template-form.net-rate-schemes:
      required:
        - tmMatch
        - mtMatch
        - suggestionMatch
      properties:
        tmMatch:
          description: 'Must include the `100` match type, and the `perfect` match type when `useTmEditDistance` is `false`. With `useTmEditDistance` enabled, edit-distance matching produces no perfect matches (capped at `100`).'
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template-form.net-rate-schemes.tm-match.net-rate'
        mtMatch:
          description: 'Must include the `100` match type.'
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template-form.net-rate-schemes.mt-match.net-rate'
        aiMatch:
          description: "\n\n __Note:__ The `aiMatch` field is optional. If this field is not filled in, the schema will be taken from the `mtMatch` field. When filled in, it must include the `100` match type."
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template-form.net-rate-schemes.ai-match.net-rate'
        suggestionMatch:
          description: 'Must include the `100` match type.'
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template-form.net-rate-schemes.suggestion-match.net-rate'
      type: object
    post-edit-report-settings-template-form.net-rate-schemes.tm-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %. Possible values: `perfect`, `100`, or a percentage range (e.g., `99-82`, `81-60`)'
          type: string
          example: 100-82
        price:
          description: 'Price, %'
          type: number
          example: 0.1
      type: object
    post-edit-report-settings-template-form.net-rate-schemes.mt-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %. Possible values: `100` or a percentage range (e.g., `99-82`, `81-60`)'
          type: string
          example: '100'
        price:
          description: 'Price, %'
          type: number
          example: 0.1
      type: object
    post-edit-report-settings-template-form.net-rate-schemes.ai-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %. Possible values: `100` or a percentage range (e.g., `99-82`, `81-60`)'
          type: string
          example: 100-93
        price:
          description: 'Price, %'
          type: number
          example: 0.1
      type: object
    post-edit-report-settings-template-form.net-rate-schemes.suggestion-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %. Possible values: `100` or a percentage range (e.g., `99-82`, `81-60`)'
          type: string
          example: '100'
        price:
          description: 'Price, %'
          type: number
          example: 0.1
      type: object
    CrowdinReportHourlySettingsTemplateCreateForm:
      title: 'Report settings template for hourly'
      required:
        - name
        - currency
        - unit
        - config
      properties:
        name:
          description: 'Template name'
          type: string
          example: 'Default template'
        currency:
          description: 'Defines report currency'
          type: string
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
          example: USD
        unit:
          description: 'Defines report unit'
          type: string
          enum:
            - hours
          example: hours
        config:
          description: 'Defines report config'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/hourly-report-settings-template-form.config'
        isPublic:
          description: 'Defines report public'
          type: boolean
          default: false
          example: true
        isGlobal:
          description: 'Defines a report as global'
          type: boolean
          default: false
          example: true
      type: object
    hourly-report-settings-template-form.config:
      required:
        - baseRates
        - individualRates
      properties:
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/hourly-report-settings-template-form.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages or users)'
          type: array
          items:
            $ref: '#/components/schemas/hourly-report-settings-template-form.individual-rate'
      type: object
    hourly-report-settings-template-form.base-rates:
      required:
        - hourly
      properties:
        hourly:
          type: number
          example: 0.1
      type: object
    hourly-report-settings-template-form.individual-rate:
      required:
        - languageIds
        - userIds
        - hourly
      properties:
        languageIds:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: 1
        hourly:
          type: number
          example: 0.1
      type: object
    PreTranslateAccuracy:
      title: 'Pre-translation Accuracy'
      description: "Calculate the accuracy of the pre-translation process\n\n__Note:__ The strings included in this report must be approved and have at least one \"pre-translate\" type translation. All other human translations will not be considered in this report, except in cases where such a translation is approved and used as a reference."
      required:
        - name
        - schema
      properties:
        name:
          description: 'pre-translate-efficiency(deprecated), pre-translate-accuracy'
          type: string
          enum:
            - pre-translate-efficiency
            - pre-translate-accuracy
          example: pre-translate-accuracy
        schema:
          description: 'Pre-translation Accuracy Report schema'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/pre-translate-accuracy.report.general'
            -
              $ref: '#/components/schemas/pre-translate-accuracy.report.byTask'
      type: object
    pre-translate-accuracy.report.general:
      title: General
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        postEditingCategories:
          description: 'Split into categories by edit distance. **Deprecated**. Use `matchScoreCategories` instead'
          type: array
          items:
            type: string
            example: 0-10
          deprecated: true
        matchScoreCategories:
          description: 'Split into categories by match score. Ranges should be in descending order (e.g., 100-90, 89-80)'
          type: array
          items:
            type: string
            example: 100-90
        languageId:
          description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: ach
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        fileIds:
          description: 'Array of file ids. Get via [List Files](#operation/api.projects.files.getMany)'
          type: array
          items:
            type: integer
            example: 138
          x-doc-sections:
            - file-based
        directoryIds:
          description: 'Array of directory ids. Get via [List Directories](#operation/api.projects.directories.getMany)'
          type: array
          items:
            type: integer
            example: 11
          x-doc-sections:
            - file-based
        branchIds:
          description: 'Array of branch ids. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: array
          items:
            type: integer
            example: 18
        labelIds:
          description: 'Array of label ids. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 13
        labelIncludeType:
          description: 'Defines which strings include in report'
          type: string
          default: strings_with_label
          enum:
            - strings_with_label
            - strings_without_label
          example: strings_without_label
        skipArchiving:
          description: 'If true, the report will not be saved to the archive for historical reference.'
          type: boolean
          default: false
      type: object
    pre-translate-accuracy.report.byTask:
      title: 'By Task'
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        postEditingCategories:
          description: 'Split into categories by edit distance. **Deprecated**. Use `matchScoreCategories` instead'
          type: array
          items:
            type: string
            example: 0-10
          deprecated: true
        matchScoreCategories:
          description: 'Split into categories by match score. Ranges should be in descending order (e.g., 100-90, 89-80)'
          type: array
          items:
            type: string
            example: 100-90
        taskId:
          description: 'Task Identifier for which the report should be generated. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
          type: integer
        skipArchiving:
          description: 'If true, the report will not be saved to the archive for historical reference.'
          type: boolean
          default: false
      type: object
    TranslatorAccuracy:
      title: 'Translator Accuracy'
      description: "Calculate the accuracy of the user process\n\n__Note:__ The strings included in this report must be approved and translated by a human. Any other translations, including those that are only self-approved, will not be included unless they are also approved by another party and used as a reference."
      required:
        - name
        - schema
      properties:
        name:
          description: translator-accuracy
          type: string
          enum:
            - translator-accuracy
          example: translator-accuracy
        schema:
          $ref: '#/components/schemas/translator-accuracy.report.general'
      type: object
    translator-accuracy.report.general:
      title: General
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        postEditingCategories:
          description: 'Split into categories by edit distance. **Deprecated**. Use `matchScoreCategories` instead'
          type: array
          items:
            type: string
            example: 0-10
          deprecated: true
        matchScoreCategories:
          description: 'Split into categories by match score. Ranges should be in descending order (e.g., 100-90, 89-80)'
          type: array
          items:
            type: string
            example: 90-100
        languageId:
          description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: ach
        userIds:
          description: 'Array of user ids. Get via [List Project Members](#operation/api.projects.members.getMany)'
          type: array
          items:
            type: integer
            example: 13
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        fileIds:
          description: 'Array of file ids. Get via [List Files](#operation/api.projects.files.getMany)'
          type: array
          items:
            type: integer
            example: 138
          x-doc-sections:
            - file-based
        directoryIds:
          description: 'Array of directory ids. Get via [List Directories](#operation/api.projects.directories.getMany)'
          type: array
          items:
            type: integer
            example: 11
          x-doc-sections:
            - file-based
        branchIds:
          description: 'Array of branch ids. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: array
          items:
            type: integer
            example: 18
        labelIds:
          description: 'Array of label ids. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 13
        labelIncludeType:
          description: 'Defines which strings include in report'
          type: string
          default: strings_with_label
          enum:
            - strings_with_label
            - strings_without_label
          example: strings_without_label
        skipArchiving:
          description: 'If true, the report will not be saved to the archive for historical reference.'
          type: boolean
          default: false
      type: object
    CostsEstimationPostEditing:
      title: 'Costs Estimation Post-Editing'
      description: 'Calculate the approximate translation costs to help plan your budget'
      required:
        - name
        - schema
      properties:
        name:
          description: costs-estimation-pe
          type: string
          enum:
            - costs-estimation-pe
          example: costs-estimation-pe
        schema:
          description: 'Costs Estimation Post-Editing Report schema'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/costs-estimation-pe.report.general'
            -
              $ref: '#/components/schemas/costs-estimation-pe.report.byTask'
      type: object
    costs-estimation-pe.report.general:
      title: General
      required:
        - baseRates
        - individualRates
        - netRateSchemes
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
        currency:
          description: 'Defines report currency'
          type: string
          default: USD
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/costs-estimation-pe.report.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages or users)'
          type: array
          items:
            $ref: '#/components/schemas/costs-estimation-pe.report.individual-rate'
        netRateSchemes:
          description: "Net Rate Schemes (Percentage paid of full translation rate)\n\n__Note:__ A new translation will be included in the report at the lowest rate if multiple scheme categories can be applied to the translation"
          type: object
          allOf:
            -
              $ref: '#/components/schemas/costs-estimation-pe.report.net-rate-schemes'
        calculateInternalMatches:
          type: boolean
          default: false
        includePreTranslatedStrings:
          type: boolean
          default: false
        languageId:
          description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: ach
        fileIds:
          description: 'Array of file ids. Get via [List Files](#operation/api.projects.files.getMany)'
          type: array
          items:
            type: integer
            example: 138
          x-doc-sections:
            - file-based
        directoryIds:
          description: 'Array of directory ids. Get via [List Directories](#operation/api.projects.directories.getMany)'
          type: array
          items:
            type: integer
            example: 11
          x-doc-sections:
            - file-based
        branchIds:
          description: 'Array of branch ids. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: array
          items:
            type: integer
            example: 18
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        labelIds:
          description: 'Array of label ids. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 13
        labelIncludeType:
          description: 'Defines which strings include in report'
          type: string
          default: strings_with_label
          enum:
            - strings_with_label
            - strings_without_label
        skipArchiving:
          description: 'If true, the report will not be saved to the archive for historical reference.'
          type: boolean
          default: false
      type: object
    costs-estimation-pe.report.byTask:
      title: 'By Task'
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
        currency:
          description: 'Defines report currency'
          type: string
          default: USD
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/costs-estimation-pe.report.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages or users)'
          type: array
          items:
            $ref: '#/components/schemas/costs-estimation-pe.report.individual-rate'
        netRateSchemes:
          description: "Net Rate Schemes (Percentage paid of full translation rate)\n\n__Note:__ A new translation will be included in the report at the lowest rate if multiple scheme categories can be applied to the translation"
          type: object
          allOf:
            -
              $ref: '#/components/schemas/costs-estimation-pe.report.net-rate-schemes'
        calculateInternalMatches:
          type: boolean
          default: false
        includePreTranslatedStrings:
          type: boolean
          default: false
        taskId:
          description: 'Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
          type: integer
          deprecated: true
        taskIds:
          description: 'Array of task ids. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
          type: array
          items:
            type: integer
            example: 138
        skipArchiving:
          description: 'If true, the report will not be saved to the archive for historical reference.'
          type: boolean
          default: false
      type: object
    costs-estimation-pe.report.base-rates:
      required:
        - fullTranslation
        - proofread
      properties:
        fullTranslation:
          description: 'Applies to all languages by default'
          type: number
          format: float
          example: 0.1
        proofread:
          type: number
          format: float
          example: 0.12
      type: object
    costs-estimation-pe.report.individual-rate:
      required:
        - languageIds
        - fullTranslation
        - proofread
      properties:
        languageIds:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        fullTranslation:
          type: number
          format: float
          example: 0.1
        proofread:
          type: number
          format: float
          example: 0.12
      type: object
    costs-estimation-pe.report.net-rate-schemes:
      required:
        - tmMatch
      properties:
        tmMatch:
          description: 'Must include the `perfect` and `100` match types.'
          type: array
          items:
            $ref: '#/components/schemas/costs-estimation-pe.report.net-rate-schemes.tm-match.net-rate'
      type: object
    costs-estimation-pe.report.net-rate-schemes.tm-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %. Possible values: `perfect`, `100`, or a percentage range (e.g., `99-82`, `81-60`)'
          type: string
          example: perfect
        price:
          description: 'Price, %'
          type: number
          format: float
          example: 0.1
      type: object
    TranslationCostsPostEditing:
      title: 'Translation Costs Post-Editing'
      description: 'Calculate the real translation costs to pay your translators and proofreaders'
      required:
        - name
        - schema
      properties:
        name:
          description: translation-costs-pe
          type: string
          enum:
            - translation-costs-pe
          example: translation-costs-pe
        schema:
          description: 'Translation Costs Post-Editing Report schema'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/translation-costs-pe.report.general'
            -
              $ref: '#/components/schemas/translation-costs-pe.report.byTask'
      type: object
    translation-costs-pe.report.general:
      title: General
      required:
        - baseRates
        - individualRates
        - netRateSchemes
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        currency:
          description: 'Defines report currency'
          type: string
          default: USD
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
          example: USD
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/translation-costs-pe.report.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages or users)'
          type: array
          items:
            $ref: '#/components/schemas/translation-costs-pe.report.individual-rate'
        netRateSchemes:
          description: "Net Rate Schemes (Percentage paid of full translation rate)\n\n__Note:__ A new translation will be included in the report at the lowest rate if multiple scheme categories can be applied to the translation"
          type: object
          allOf:
            -
              $ref: '#/components/schemas/translation-costs-pe.report.net-rate-schemes'
        useCategoryBasedProofreadRates:
          description: 'Approvals are treated as submitting an identical translation at the 100% match rate of the corresponding Net Rate Scheme category (TM, MT, AI, or other). When disabled, all approvals use the flat base proofread rate.'
          type: boolean
          default: false
        useTmEditDistance:
          description: 'Calculations are based on the edit distance between the TM match and final translation instead of source segment similarity. Matches recorded before July 13, 2026, fall back to traditional source similarity.'
          type: boolean
          default: false
        excludeApprovalsForEditedTranslations:
          description: 'Exclude approvals when the same user has made translations for the string.'
          type: boolean
          default: false
          deprecated: true
        preTranslatedStringsCategorizationAdjustment:
          description: 'Repetitive translations of pre-translated strings are reported under TM or MT match rates instead of Other suggestion match rates, depending on the initial pre-translation type.'
          type: boolean
          default: false
          deprecated: true
        groupBy:
          description: 'Defines grouping parameter'
          type: string
          default: user
          enum:
            - user
            - language
          example: user
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        languageId:
          description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: ach
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: 13
        fileIds:
          description: 'Array of file ids. Get via [List Files](#operation/api.projects.files.getMany)'
          type: array
          items:
            type: integer
            example: 138
          x-doc-sections:
            - file-based
        directoryIds:
          description: 'Array of directory ids. Get via [List Directories](#operation/api.projects.directories.getMany)'
          type: array
          items:
            type: integer
            example: 11
          x-doc-sections:
            - file-based
        branchIds:
          description: 'Array of branch ids. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: array
          items:
            type: integer
            example: 18
        labelIds:
          description: 'Array of label ids. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 13
        labelIncludeType:
          description: 'Defines which strings include in report'
          type: string
          default: strings_with_label
          enum:
            - strings_with_label
            - strings_without_label
          example: strings_without_label
        skipArchiving:
          description: 'If true, the report will not be saved to the archive for historical reference.'
          type: boolean
          default: false
      type: object
    translation-costs-pe.report.byTask:
      title: 'By Task'
      required:
        - baseRates
        - individualRates
        - netRateSchemes
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        currency:
          description: 'Defines report currency'
          type: string
          default: USD
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
          example: USD
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/translation-costs-pe.report.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages or users)'
          type: array
          items:
            $ref: '#/components/schemas/translation-costs-pe.report.individual-rate'
        netRateSchemes:
          description: "Net Rate Schemes (Percentage paid of full translation rate)\n\n__Note:__ A new translation will be included in the report at the lowest rate if multiple scheme categories can be applied to the translation"
          type: object
          allOf:
            -
              $ref: '#/components/schemas/translation-costs-pe.report.net-rate-schemes'
        taskId:
          description: 'Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
          type: integer
          deprecated: true
        taskIds:
          description: 'Array of task ids. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
          type: array
          items:
            type: integer
            example: 138
        useCategoryBasedProofreadRates:
          description: 'Approvals are treated as submitting an identical translation at the 100% match rate of the corresponding Net Rate Scheme category (TM, MT, AI, or other). When disabled, all approvals use the flat base proofread rate.'
          type: boolean
          default: false
        useTmEditDistance:
          description: 'Calculations are based on the edit distance between the TM match and final translation instead of source segment similarity. Matches recorded before July 13, 2026, fall back to traditional source similarity.'
          type: boolean
          default: false
        excludeApprovalsForEditedTranslations:
          description: 'Exclude approvals when the same user has made translations for the string.'
          type: boolean
          default: false
          deprecated: true
        preTranslatedStringsCategorizationAdjustment:
          description: 'Repetitive translations of pre-translated strings are reported under TM or MT match rates instead of Other suggestion match rates, depending on the initial pre-translation type.'
          type: boolean
          default: false
          deprecated: true
        skipArchiving:
          description: 'If true, the report will not be saved to the archive for historical reference.'
          type: boolean
          default: false
      type: object
    translation-costs-pe.report.base-rates:
      required:
        - fullTranslation
      properties:
        fullTranslation:
          description: 'Applies to all languages by default'
          type: number
          format: float
          example: 0.1
        proofread:
          description: 'Proofread rate. Required when `useCategoryBasedProofreadRates` is `false`.'
          type: number
          format: float
          example: 0.12
      type: object
    translation-costs-pe.report.individual-rate:
      required:
        - languageIds
        - userIds
        - fullTranslation
      properties:
        languageIds:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: 1
        fullTranslation:
          type: number
          format: float
          example: 0.1
        proofread:
          description: 'Proofread rate. Required when `useCategoryBasedProofreadRates` is `false`.'
          type: number
          format: float
          example: 0.12
      type: object
    translation-costs-pe.report.net-rate-schemes:
      required:
        - tmMatch
        - mtMatch
        - suggestionMatch
      properties:
        tmMatch:
          description: 'Must include the `100` match type, and the `perfect` match type when `useTmEditDistance` is `false`. With `useTmEditDistance` enabled, edit-distance matching produces no perfect matches (capped at `100`).'
          type: array
          items:
            $ref: '#/components/schemas/translation-costs-pe.report.net-rate-schemes.tm-match.net-rate'
        mtMatch:
          description: 'Must include the `100` match type.'
          type: array
          items:
            $ref: '#/components/schemas/translation-costs-pe.report.net-rate-schemes.mt-match.net-rate'
        aiMatch:
          description: "\n\n __Note:__ The `aiMatch` field is optional. If this field is not filled in, the schema will be taken from the `mtMatch` field. When filled in, it must include the `100` match type."
          type: array
          items:
            $ref: '#/components/schemas/translation-costs-pe.report.net-rate-schemes.ai-match.net-rate'
        suggestionMatch:
          description: 'Must include the `100` match type.'
          type: array
          items:
            $ref: '#/components/schemas/translation-costs-pe.report.net-rate-schemes.suggestion-match.net-rate'
      type: object
    translation-costs-pe.report.net-rate-schemes.tm-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %. Possible values: `perfect`, `100`, or a percentage range (e.g., `99-82`, `81-60`)'
          type: string
          example: perfect
        price:
          description: 'Price, %'
          type: number
          format: float
          example: 0.1
      type: object
    translation-costs-pe.report.net-rate-schemes.mt-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %. Possible values: `100` or a percentage range (e.g., `99-82`, `81-60`)'
          type: string
          example: '100'
        price:
          description: 'Price, %'
          type: number
          format: float
          example: 0.1
      type: object
    translation-costs-pe.report.net-rate-schemes.ai-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %. Possible values: `100` or a percentage range (e.g., `99-82`, `81-60`)'
          type: string
          example: '100'
        price:
          description: 'Price, %'
          type: number
          format: float
          example: 0.1
      type: object
    translation-costs-pe.report.net-rate-schemes.suggestion-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %. Possible values: `100` or a percentage range (e.g., `99-82`, `81-60`)'
          type: string
          example: '100'
        price:
          description: 'Price, %'
          type: number
          format: float
          example: 0.1
      type: object
    TopMembers:
      title: 'Top Members'
      description: "Generate a list of translators based on a specific period of time to see who contributed the most to your project's translation."
      required:
        - name
        - schema
      properties:
        name:
          description: top-members
          type: string
          enum:
            - top-members
          example: top-members
        schema:
          description: 'Top Members Report schema'
          properties:
            unit:
              description: 'Defines report unit'
              type: string
              default: words
              enum:
                - strings
                - words
                - chars
                - chars_with_spaces
              example: words
            languageId:
              description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
              type: string
              example: uk
            format:
              description: 'Defines export file format'
              type: string
              default: xlsx
              enum:
                - xlsx
                - csv
                - json
            dateFrom:
              description: 'Report date from in UTC, ISO 8601'
              type: string
              format: date-time
              example: '2019-09-23T07:00:14+00:00'
            dateTo:
              description: 'Report date to in UTC, ISO 8601'
              type: string
              format: date-time
              example: '2019-09-27T07:00:14+00:00'
            userIds:
              description: 'Array of user ids. Get via [List Project Members](#operation/api.projects.members.getMany)'
              type: array
              items:
                type: integer
                example: 13
          type: object
      type: object
    ContributionRawData:
      title: 'Contribution Raw Data'
      description: 'Generate a raw contribution data'
      required:
        - name
        - schema
      properties:
        name:
          description: contribution-raw-data
          type: string
          enum:
            - contribution-raw-data
          example: contribution-raw-data
        schema:
          description: 'Contribution Raw Data Report schema'
          type: object
          oneOf:
            -
              $ref: '#/components/schemas/contribution.report.general'
            -
              $ref: '#/components/schemas/contribution.report.byTask'
      type: object
    contribution.report.general:
      title: General
      required:
        - mode
      properties:
        mode:
          description: 'Defines report mode'
          type: string
          enum:
            - translations
            - approvals
            - votes
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        languageId:
          description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: ach
        userId:
          description: 'User Identifier for which the report should be generated. Get via [List Project Members](#operation/api.projects.members.getMany)'
          type: integer
          example: 1
        columns:
          oneOf:
            -
              $ref: '#/components/schemas/contribution.report.mode.translation'
            -
              $ref: '#/components/schemas/contribution.report.mode.approval'
            -
              $ref: '#/components/schemas/contribution.report.mode.votes'
        tmIds:
          description: 'Array of Tm ids. Get via [List TMs](#operation/api.tms.getMany)'
          type: array
          items:
            type: integer
            example: 18
        mtIds:
          description: 'Array of Mt ids. Get via [List MTs](#operation/api.mts.getMany)'
          type: array
          items:
            type: integer
            example: 18
        aiPromptIds:
          description: 'Array of AI Prompts ids. Get via [List AI Prompts](#operation/api.ai.prompts.getMany)'
          type: array
          items:
            type: integer
            example: 18
        fileIds:
          description: 'Array of file ids. Get via [List Files](#operation/api.projects.files.getMany)'
          type: array
          items:
            type: integer
            example: 138
          x-doc-sections:
            - file-based
        directoryIds:
          description: 'Array of directory ids. Get via [List Directories](#operation/api.projects.directories.getMany)'
          type: array
          items:
            type: integer
            example: 11
          x-doc-sections:
            - file-based
        branchIds:
          description: 'Array of branch ids. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: array
          items:
            type: integer
            example: 18
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
      type: object
    contribution.report.byTask:
      title: 'By Task'
      required:
        - mode
        - taskId
      properties:
        mode:
          description: 'Defines report mode'
          type: string
          enum:
            - translations
            - approvals
            - votes
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        taskId:
          description: 'Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
          type: integer
        columns:
          oneOf:
            -
              $ref: '#/components/schemas/contribution.report.mode.translation'
            -
              $ref: '#/components/schemas/contribution.report.mode.approval'
            -
              $ref: '#/components/schemas/contribution.report.mode.votes'
        tmIds:
          description: 'Array of Tm ids. Get via [List TMs](#operation/api.tms.getMany)'
          type: array
          items:
            type: integer
            example: 18
        mtIds:
          description: 'Array of Mt ids. Get via [List MTs](#operation/api.mts.getMany)'
          type: array
          items:
            type: integer
            example: 18
        aiPromptIds:
          description: 'Array of AI Prompts ids. Get via [List AI Prompts](#operation/api.ai.prompts.getMany)'
          type: array
          items:
            type: integer
            example: 18
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
      type: object
    contribution.report.mode.translation:
      title: 'Mode Translation'
      type: array
      items:
        $ref: '#/components/schemas/contribution.report.mode.translation.items'
      example:
        - userId
        - languageId
    contribution.report.mode.approval:
      title: 'Mode Approval'
      type: array
      items:
        $ref: '#/components/schemas/contribution.report.mode.approval.items'
      example:
        - userId
        - languageId
    contribution.report.mode.votes:
      title: 'Mode Votes'
      type: array
      items:
        $ref: '#/components/schemas/contribution.report.mode.votes.items'
      example:
        - userId
        - languageId
    contribution.report.mode.translation.items:
      type: string
      enum:
        - userId
        - languageId
        - stringId
        - translationId
        - fileId
        - filePath
        - pluralForm
        - sourceStringTextHash
        - mtEngine
        - mtId
        - tmName
        - tmId
        - aiPromptName
        - aiPromptId
        - preTranslated
        - tmMatch
        - mtMatch
        - aiMatch
        - suggestionMatch
        - sourceUnits
        - targetUnits
        - createdAt
        - updatedAt
      x-doc-sections:
        - file-based
    contribution.report.mode.approval.items:
      type: string
      enum:
        - userId
        - languageId
        - stringId
        - translationId
        - fileId
        - filePath
        - pluralForm
        - sourceStringTextHash
        - mtEngine
        - mtId
        - tmName
        - tmId
        - aiPromptName
        - aiPromptId
        - preTranslated
        - wasEdited
        - tmMatch
        - mtMatch
        - aiMatch
        - suggestionMatch
        - sourceUnits
        - targetUnits
        - createdAt
        - updatedAt
      example:
        - userId
        - languageId
      x-doc-sections:
        - file-based
    contribution.report.mode.votes.items:
      type: string
      enum:
        - userId
        - languageId
        - stringId
        - translationId
        - fileId
        - filePath
        - pluralForm
        - sourceStringTextHash
        - mtEngine
        - mtId
        - tmName
        - tmId
        - aiPromptName
        - aiPromptId
        - preTranslated
        - mark
        - sourceUnits
        - targetUnits
        - createdAt
        - updatedAt
      example:
        - userId
        - languageId
      x-doc-sections:
        - file-based
    SourceContentUpdates:
      title: 'Source Content Updates'
      description: 'Generate a report showing changes in source content over time, including added, deleted and modified strings/words/characters'
      required:
        - name
        - schema
      properties:
        name:
          description: source-content-updates
          type: string
          enum:
            - source-content-updates
          example: source-content-updates
        schema:
          $ref: '#/components/schemas/source-content-updates.report'
      type: object
    source-content-updates.report:
      title: 'Source Content Updates'
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-27T07:00:14+00:00'
      type: object
    ProjectMembersStatistics:
      title: 'Project Members'
      description: 'Generate a report showing changes in project members overtime'
      required:
        - name
        - schema
      properties:
        name:
          description: project-members
          type: string
          enum:
            - project-members
          example: project-members
        schema:
          $ref: '#/components/schemas/project-members.report'
      type: object
    project-members.report:
      title: 'Project Members Report'
      properties:
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-05-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-05-27T07:00:14+00:00'
      type: object
    EditorIssues:
      title: 'Editor Issues'
      description: 'Generate a report showing issue statistics, categories, users, and average resolution time.'
      required:
        - name
        - schema
      properties:
        name:
          description: editor-issues
          type: string
          enum:
            - editor-issues
          example: editor-issues
        schema:
          $ref: '#/components/schemas/editor-issues.report'
      type: object
    editor-issues.report:
      title: 'Editor Issues Report'
      properties:
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-27T07:00:14+00:00'
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        issueType:
          description: 'Defines issue type'
          type: string
          enum:
            - general_question
            - translation_mistake
            - context_request
            - source_mistake
          example: general_question
          nullable: true
      type: object
    ProjectQaCheckIssues:
      title: 'Project Qa Check Issues Report'
      description: 'Generate a report showing changes in project qa check issues overtime'
      required:
        - name
        - schema
      properties:
        name:
          description: qa-check-issues
          type: string
          enum:
            - qa-check-issues
          example: qa-check-issues
        schema:
          $ref: '#/components/schemas/project-qa-check-issues.report'
      type: object
    project-qa-check-issues.report:
      title: 'Project Qa Check Issues Report'
      properties:
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        languageId:
          description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: ach
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-05-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-05-27T07:00:14+00:00'
      type: object
    ProjectSavingActivity:
      title: 'Project Saving Activity'
      description: 'Generate a report showing translation savings activity over time, including MT/AI cost savings and efficiency metrics'
      required:
        - name
        - schema
      properties:
        name:
          description: saving-activity
          type: string
          enum:
            - saving-activity
          example: saving-activity
        schema:
          $ref: '#/components/schemas/saving-activity.report'
      type: object
    saving-activity.report:
      title: 'Saving Activity Report'
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        languageId:
          description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: ach
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        mode:
          type: string
          default: relative
          enum:
            - currency
            - relative
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-27T07:00:14+00:00'
        fileIds:
          description: 'Array of file ids. Get via [List Files](#operation/api.projects.files.getMany)'
          type: array
          items:
            type: integer
            example: 138
          x-doc-sections:
            - file-based
        directoryIds:
          description: 'Array of directory ids. Get via [List Directories](#operation/api.projects.directories.getMany)'
          type: array
          items:
            type: integer
            example: 11
          x-doc-sections:
            - file-based
        branchIds:
          description: 'Array of branch ids. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: array
          items:
            type: integer
            example: 18
        userIds:
          description: 'Array of user ids. Get via [List Project Members](#operation/api.projects.members.getMany)'
          type: array
          items:
            type: integer
            example: 1
      type: object
    ProjectTranslationActivity:
      title: 'Project Translation Activity'
      description: 'Generate a report showing project consumption metrics including translation activity and proofreading activity over time'
      required:
        - name
        - schema
      properties:
        name:
          description: translation-activity
          type: string
          enum:
            - translation-activity
          example: translation-activity
        schema:
          $ref: '#/components/schemas/project-consumption.report'
      type: object
    project-consumption.report:
      title: 'Project Translation Activity'
      properties:
        unit:
          description: 'Defines report unit'
          type: string
          default: words
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        languageId:
          description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: ach
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-27T07:00:14+00:00'
        userIds:
          description: 'Array of user ids. Get via [List Project Members](#operation/api.projects.members.getMany)'
          type: array
          items:
            type: integer
            example: 1
      type: object
    TimeSpent:
      title: 'Time Spent'
      description: 'Explore detailed statistics on task creation, workload, progress, and performance.'
      required:
        - name
        - schema
      properties:
        name:
          description: time-spent
          type: string
          enum:
            - time-spent
          example: time-spent
        schema:
          $ref: '#/components/schemas/project-time-spent.report'
      type: object
    project-time-spent.report:
      title: 'Project Time Spent'
      properties:
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
        groupBy:
          description: 'Defines grouping parameter'
          type: string
          default: user
          enum:
            - user
            - language
            - task
          example: user
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/time-spent.report.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages or users)'
          type: array
          items:
            $ref: '#/components/schemas/time-spent.report.individual-rate'
        languageId:
          description: 'Language Identifier for which the report should be generated. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: ach
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: 13
        typeTasks:
          description: "Task type:\n * 0 - Translate by own translators\n * 1 - Proofread by own proofreaders\n * 2 - Translate by vendor\n * 3 - Proofread by vendor"
          type: integer
          enum:
            - 0
            - 1
            - 2
            - 3
        dateFrom:
          description: 'Report date from in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-23T07:00:14+00:00'
        dateTo:
          description: 'Report date to in UTC, ISO 8601'
          type: string
          format: date-time
          example: '2025-09-27T07:00:14+00:00'
        taskIds:
          description: 'Task Identifier for which the report should be generated. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
          type: array
          items:
            type: integer
            example: 645
        skipArchiving:
          description: 'If true, the report will not be saved to the archive for historical reference.'
          type: boolean
          default: false
      type: object
    time-spent.report.base-rates:
      required:
        - hourly
      properties:
        hourly:
          type: number
          format: float
          example: 0.1
      type: object
    time-spent.report.individual-rate:
      required:
        - languageIds
        - userIds
        - hourly
      properties:
        languageIds:
          type: array
          items:
            type: string
            example: uk
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: 1
        hourly:
          type: number
          format: float
          example: 0.1
      type: object
    ReportArchiveExportForm:
      properties:
        format:
          description: 'Defines export file format'
          type: string
          default: xlsx
          enum:
            - xlsx
            - csv
            - json
      type: object
    UserReportHourlySettingsTemplateCreateForm:
      title: 'User Report hourly settings template'
      required:
        - name
        - currency
        - unit
        - config
      properties:
        name:
          description: 'Template name'
          type: string
          example: 'Default hourly template'
        currency:
          description: 'Defines report currency'
          type: string
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
          example: USD
        unit:
          description: 'Defines report unit'
          type: string
          enum:
            - hours
          example: hours
        config:
          description: 'Defines report config'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/user-hourly-report-settings-template-form.config'
      type: object
    user-hourly-report-settings-template-form.config:
      required:
        - baseRates
        - individualRates
      properties:
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/hourly-report-settings-template-form.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages)'
          type: array
          items:
            $ref: '#/components/schemas/user-hourly-report-settings-template-form.individual-rate'
      type: object
    user-hourly-report-settings-template-form.individual-rate:
      required:
        - languageIds
        - hourly
      properties:
        languageIds:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        hourly:
          type: number
          example: 0.1
      type: object
    UserPEReportSettingsTemplateCreateForm:
      title: 'User Report settings template for post-editing'
      required:
        - name
        - currency
        - unit
        - config
      properties:
        name:
          description: 'Template name'
          type: string
          example: 'Default template'
        currency:
          description: 'Defines report currency'
          type: string
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
          example: USD
        unit:
          description: 'Defines report unit'
          type: string
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        config:
          description: 'Defines report config'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/user-post-edit-report-settings-template-form.config'
      type: object
    user-post-edit-report-settings-template-form.config:
      required:
        - baseRates
        - individualRates
        - netRateSchemes
      properties:
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template-form.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages)'
          type: array
          items:
            $ref: '#/components/schemas/user-post-edit-report-settings-template-form.individual-rate'
        netRateSchemes:
          description: "Net Rate Schemes (Percentage paid of full translation rate)\n\n__Note:__ A new translation will be included in the report at the lowest rate if multiple scheme categories can be applied to the translation"
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template-form.net-rate-schemes'
        calculateInternalMatches:
          type: boolean
          default: false
        includePreTranslatedStrings:
          type: boolean
          default: false
        excludeApprovalsForEditedTranslations:
          description: 'Exclude approvals when the same user has made translations for the string.'
          type: boolean
          default: false
          deprecated: true
        preTranslatedStringsCategorizationAdjustment:
          description: 'Repetitive translations of pre-translated strings are reported under TM or MT match rates instead of Other suggestion match rates, depending on the initial pre-translation type.'
          type: boolean
          default: false
          deprecated: true
        useCategoryBasedProofreadRates:
          description: 'Approvals are treated as submitting an identical translation at the 100% match rate of the corresponding Net Rate Scheme category (TM, MT, AI, or other). When disabled, all approvals use the flat base proofread rate.'
          type: boolean
          default: false
        useTmEditDistance:
          description: 'Calculations are based on the edit distance between the TM match and final translation instead of source segment similarity. Matches recorded before July 13, 2026, fall back to traditional source similarity.'
          type: boolean
          default: false
      type: object
    user-post-edit-report-settings-template-form.individual-rate:
      required:
        - languageIds
        - fullTranslation
        - proofread
      properties:
        languageIds:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        fullTranslation:
          type: number
          example: 0.1
        proofread:
          type: number
          example: 0.12
      type: object
    ReportSettingsTemplateCollectionResource:
      description: 'Report Settings Template Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ReportSettingsTemplateResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ReportSettingsTemplateResource:
      description: 'Report Settings Template Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/PEReportSettingsTemplate'
    ReportArchiveCollectionResource:
      description: 'Report Archive Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ReportArchiveResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ReportArchiveResource:
      description: 'Report Archive Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ReportArchive'
    ReportResource:
      description: 'Report Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ReportGenerate'
    UserReportSettingsTemplateCollectionResource:
      description: 'User Report Settings Template Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/UserReportSettingsTemplateResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    UserReportSettingsTemplateResource:
      description: 'User Report Settings Template Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/UserPEReportSettingsTemplate'
    PEReportSettingsTemplate:
      title: 'Report settings template for post-editing'
      required:
        - id
        - name
        - currency
        - unit
        - config
        - createdAt
        - isPublic
      properties:
        id:
          type: integer
          example: 1
        name:
          description: 'Template name'
          type: string
          example: 'Default template'
        currency:
          description: 'Defines report currency'
          type: string
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
          example: USD
        unit:
          description: 'Defines report unit'
          type: string
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        config:
          description: 'Defines report config'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template.config'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
          nullable: true
        isPublic:
          description: 'Defines report public'
          type: boolean
          default: false
          example: true
        isGlobal:
          description: 'Defines a report as global'
          type: boolean
          default: false
          example: true
      type: object
    post-edit-report-settings-template.config:
      required:
        - baseRates
        - individualRates
        - netRateSchemes
      properties:
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages or users)'
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template.individual-rate'
        netRateSchemes:
          description: "Net Rate Schemes (Percentage paid of full translation rate)\n\n__Note:__ A new translation will be included in the report at the lowest rate if multiple scheme categories can be applied to the translation"
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template.net-rate-schemes'
        calculateInternalMatches:
          type: boolean
          default: false
        includePreTranslatedStrings:
          type: boolean
          default: false
        excludeApprovalsForEditedTranslations:
          description: 'Exclude approvals when the same user has made translations for the string.'
          type: boolean
          default: false
          deprecated: true
        preTranslatedStringsCategorizationAdjustment:
          description: 'Repetitive translations of pre-translated strings are reported under TM or MT match rates instead of Other suggestion match rates, depending on the initial pre-translation type.'
          type: boolean
          default: false
          deprecated: true
        useCategoryBasedProofreadRates:
          description: 'Use match proofreading rates.'
          type: boolean
          default: true
        useTmEditDistance:
          description: 'Calculations are based on the edit distance between the TM match and final translation instead of source segment similarity. Matches recorded before July 13, 2026, fall back to traditional source similarity.'
          type: boolean
          default: false
      type: object
    post-edit-report-settings-template.base-rates:
      required:
        - fullTranslation
        - proofread
      properties:
        fullTranslation:
          description: 'Applies to all languages by default'
          type: number
          example: 0.1
        proofread:
          type: number
          example: 0.12
      type: object
    post-edit-report-settings-template.individual-rate:
      required:
        - languageIds
        - userIds
        - fullTranslation
        - proofread
      properties:
        languageIds:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: 1
        fullTranslation:
          type: number
          example: 0.1
        proofread:
          type: number
          example: 0.12
      type: object
    post-edit-report-settings-template.net-rate-schemes:
      required:
        - tmMatch
        - mtMatch
        - aiMatch
        - suggestionMatch
      properties:
        tmMatch:
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template.net-rate-schemes.tm-match.net-rate'
        mtMatch:
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template.net-rate-schemes.mt-match.net-rate'
          nullable: true
        aiMatch:
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template.net-rate-schemes.ai-match.net-rate'
          nullable: true
        suggestionMatch:
          type: array
          items:
            $ref: '#/components/schemas/post-edit-report-settings-template.net-rate-schemes.suggestion-match.net-rate'
          nullable: true
      type: object
    post-edit-report-settings-template.net-rate-schemes.tm-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %'
          type: string
          example: '100'
        price:
          description: 'Price, %'
          type: number
          example: 0.1
      type: object
    post-edit-report-settings-template.net-rate-schemes.mt-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %'
          type: string
          example: 100-82
        price:
          description: 'Price, %'
          type: number
          example: 0.1
      type: object
    post-edit-report-settings-template.net-rate-schemes.ai-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %'
          type: string
          example: 100-74
        price:
          description: 'Price, %'
          type: number
          example: 0.1
      type: object
    post-edit-report-settings-template.net-rate-schemes.suggestion-match.net-rate:
      required:
        - matchType
        - price
      properties:
        matchType:
          description: 'Match type, %'
          type: string
          example: perfect
        price:
          description: 'Price, %'
          type: number
          example: 0.1
      type: object
    ReportArchive:
      title: 'Report Archive'
      properties:
        id:
          type: integer
          example: 12
        scopeType:
          type: string
          example: project
        scopeId:
          type: integer
          example: 35
        userId:
          type: integer
          example: 35
        name:
          type: string
        webUrl:
          type: string
          example: 'https://crowdin.com/project/project-identifier/reports/archive/1'
        scheme:
          type: object
        status:
          type: string
        progress:
          type: integer
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    ReportGenerate:
      description: 'Generate Report Response Model'
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          properties:
            format:
              type: string
              example: xlsx
            reportName:
              type: string
              example: costs-estimation
            schema:
              type: object
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    UserPEReportSettingsTemplate:
      title: 'Report settings template for post-editing'
      required:
        - id
        - name
        - currency
        - unit
        - config
        - createdAt
        - isPublic
      properties:
        id:
          type: integer
          example: 1
        name:
          description: 'Template name'
          type: string
          example: 'Default template'
        currency:
          description: 'Defines report currency'
          type: string
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
          example: USD
        unit:
          description: 'Defines report unit'
          type: string
          enum:
            - strings
            - words
            - chars
            - chars_with_spaces
          example: words
        config:
          description: 'Defines report config'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/user-post-edit-report-settings-template.config'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
          nullable: true
      type: object
    user-post-edit-report-settings-template.config:
      required:
        - baseRates
        - individualRates
        - netRateSchemes
      properties:
        baseRates:
          description: 'Base rates'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template.base-rates'
        individualRates:
          description: 'Individual rates (Custom rates for certain languages or users)'
          type: array
          items:
            $ref: '#/components/schemas/user-post-edit-report-settings-template.individual-rate'
        netRateSchemes:
          description: "Net Rate Schemes (Percentage paid of full translation rate)\n\n__Note:__ A new translation will be included in the report at the lowest rate if multiple scheme categories can be applied to the translation"
          type: object
          allOf:
            -
              $ref: '#/components/schemas/post-edit-report-settings-template.net-rate-schemes'
        calculateInternalMatches:
          type: boolean
          default: false
        includePreTranslatedStrings:
          type: boolean
          default: false
        excludeApprovalsForEditedTranslations:
          description: 'Exclude approvals when the same user has made translations for the string.'
          type: boolean
          default: false
          deprecated: true
        preTranslatedStringsCategorizationAdjustment:
          description: 'Repetitive translations of pre-translated strings are reported under TM or MT match rates instead of Other suggestion match rates, depending on the initial pre-translation type.'
          type: boolean
          default: false
          deprecated: true
        useCategoryBasedProofreadRates:
          description: 'Use match proofreading rates.'
          type: boolean
          default: true
        useTmEditDistance:
          description: 'Calculations are based on the edit distance between the TM match and final translation instead of source segment similarity. Matches recorded before July 13, 2026, fall back to traditional source similarity.'
          type: boolean
          default: false
      type: object
    user-post-edit-report-settings-template.individual-rate:
      required:
        - languageIds
        - userIds
        - fullTranslation
        - proofread
      properties:
        languageIds:
          description: 'Array of language ids'
          type: array
          items:
            type: string
            example: uk
        userIds:
          type: array
          items:
            type: integer
          example: []
        fullTranslation:
          type: number
          example: 0.1
        proofread:
          type: number
          example: 0.12
      type: object
    RevisionCollectionResource:
      description: 'File Revision Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/RevisionResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    RevisionResource:
      description: 'File Revision Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Revision'
    Revision:
      title: Revision
      properties:
        id:
          type: integer
          example: 2
        projectId:
          type: integer
          example: 2
        fileId:
          type: integer
          example: 248
        restoreToRevision:
          type: integer
          example: null
          nullable: true
        date:
          type: string
          format: date-time
          example: '2019-09-20T09:08:16+00:00'
      type: object
    revision-info:
      title: 'Revision Info'
      properties:
        strings:
          type: integer
          example: 17
        words:
          type: integer
          example: 43
        info:
          properties:
            added:
              $ref: '#/components/schemas/revision-info'
            deleted:
              $ref: '#/components/schemas/revision-info'
            updated:
              $ref: '#/components/schemas/revision-info'
          type: object
      type: object
    ScreenshotPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/ScreenshotOperation'
    ScreenshotOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /labelIds
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/ScreenshotOperationReplace'
          test: '#/components/schemas/ScreenshotOperationTest'
    ScreenshotOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ScreenshotOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    ScreenshotOperationTest:
      description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/ScreenshotOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    TagPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/TagOperation'
    TagOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /stringId
            - /position
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/TagOperationReplace'
          test: '#/components/schemas/TagOperationTest'
    TagOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TagOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: integer
                -
                  type: string
    TagOperationTest:
      description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TagOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
    ScreenshotCreateForm:
      required:
        - storageId
        - name
      properties:
        storageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage file must be image in one of the following formats:\n * 'jpeg'\n * 'jpg'\n * 'png'\n * 'gif'"
          type: integer
          format: int64
          example: 71
        name:
          description: 'Screenshot name'
          type: string
          example: translate_with_siri.jpg
        autoTag:
          description: 'Automatically tags screenshot'
          type: boolean
        fileId:
          description: "File Identifier. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Must be used together with `autoTag`. Can't be used with `directoryId` or `branchId` in same request"
          type: integer
          example: 48
          x-doc-sections:
            - file-based
        branchId:
          description: "Branch identifier. Get via [List Branches](#operation/api.projects.branches.getMany)\n\n__Note:__ Must be used together with `autoTag`. Can't be used with `fileId` or `directoryId` in the same request"
          type: integer
          example: null
          x-doc-sections:
            - file-based
        directoryId:
          description: "Directory Identifier. Get via [List Directories](#operation/api.projects.directories.getMany)\n\n__Note:__ Must be used together with `autoTag`. Can't be used with fileId or branchId in same request"
          type: integer
          example: null
          x-doc-sections:
            - file-based
        labelIds:
          description: 'Attach labels to the screenshot. Get label ids via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
      type: object
    ScreenshotReplaceForm:
      required:
        - storageId
        - name
      properties:
        storageId:
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          type: integer
          format: int64
        name:
          description: 'Screenshot name'
          type: string
        usePreviousTags:
          description: 'Use previous tags'
          type: boolean
          default: true
      type: object
    TagCollectionReplaceForm:
      title: 'Replace Tags'
      type: array
      items:
        $ref: '#/components/schemas/TagCreateForm'
    TagPositionScheme:
      title: 'Tag position'
      required:
        - x
        - 'y'
        - width
        - height
      properties:
        x:
          type: integer
        'y':
          type: integer
        width:
          type: integer
        height:
          type: integer
      type: object
      example:
        x: 474
        'y': 147
        width: 490
        height: 99
    TagCollectionCreateForm:
      type: array
      items:
        $ref: '#/components/schemas/TagCreateForm'
    TagCreateForm:
      required:
        - stringId
      properties:
        stringId:
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: integer
        position:
          $ref: '#/components/schemas/TagPositionScheme'
      type: object
    TagReplaceForm:
      title: 'Auto Tag'
      required:
        - autoTag
      properties:
        autoTag:
          description: 'Automatically tags screenshot and replaces old tags with new ones--'
          type: boolean
        fileId:
          description: "File Identifier. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Can't be used with `directoryId` or `branchId` in same request"
          type: integer
          example: 48
          x-doc-sections:
            - file-based
        branchId:
          description: "Branch identifier. Get via [List Branches](#operation/api.projects.branches.getMany)\n\n__Note:__ Can't be used with `fileId` or `directoryId` in the same request"
          type: integer
          example: 34
          x-doc-sections:
            - file-based
        directoryId:
          description: "Directory Identifier. Get via [List Directories](#operation/api.projects.directories.getMany)\n\n__Note:__ Can't be used with `fileId` or `branchId` in same request"
          type: integer
          example: 4
          x-doc-sections:
            - file-based
      type: object
    ScreenshotCollectionResource:
      description: 'Screenshot Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ScreenshotResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ScreenshotResource:
      description: 'Screenshot Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Screenshot'
    TagCollectionResource:
      description: 'Screenshot tag Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TagResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TagResource:
      description: 'Tag Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ScreenshotTag'
    ScreenshotTagPosition:
      title: Position
      description: 'Position Response Model'
      properties:
        x:
          type: integer
          example: 474
        'y':
          type: integer
          example: 147
        width:
          type: integer
          example: 490
        height:
          type: integer
          example: 99
      type: object
    Screenshot:
      title: Screenshot
      properties:
        id:
          type: integer
          example: 2
        userId:
          type: integer
          example: 6
        url:
          type: string
          example: 'https://production-enterprise-screenshots.downloads.crowdin.com/992000002/6/2/middle.jpg?X-Amz-Content-Sha256={sha}&X-Amz-Algorithm={algorithm}&X-Amz-Credential={credentials}&X-Amz-Date={date}&X-Amz-SignedHeaders={headers}&X-Amz-Expires={expires}&X-Amz-Signature={signature}'
          deprecated: true
        webUrl:
          type: string
          example: 'https://production-enterprise-screenshots.downloads.crowdin.com/992000002/6/2/middle.jpg?X-Amz-Content-Sha256={sha}&X-Amz-Algorithm={algorithm}&X-Amz-Credential={credentials}&X-Amz-Date={date}&X-Amz-SignedHeaders={headers}&X-Amz-Expires={expires}&X-Amz-Signature={signature}'
        name:
          type: string
          example: translate_with_siri.jpg
        size:
          properties:
            width:
              type: integer
              example: 267
            height:
              type: integer
              example: 176
          type: object
        tagsCount:
          type: integer
          example: 1
        tags:
          type: array
          items:
            $ref: '#/components/schemas/ScreenshotTag'
        labels:
          description: '[DEPRECATED]. Use field `labelIds` instead.'
          type: array
          items:
            type: integer
            example: 1
          deprecated: true
        labelIds:
          type: array
          items:
            type: integer
            example: 1
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T09:29:19+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T09:29:19+00:00'
      type: object
    ScreenshotTag:
      title: Tag
      properties:
        id:
          type: integer
          example: 98
        screenshotId:
          type: integer
          example: 2
        stringId:
          type: integer
          example: 2822
        position:
          $ref: '#/components/schemas/ScreenshotTagPosition'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T09:35:31+00:00'
      type: object
    SecurityLogCollectionResource:
      description: 'Security Log Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/SecurityLogResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    SecurityLogResource:
      description: 'Security Logs Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/SecurityLog'
    SecurityLog:
      title: SecurityLog
      properties:
        id:
          type: integer
          example: 2
        event:
          type: string
          example: 'Some event'
        info:
          type: string
          example: 'Some info'
        userId:
          type: integer
          example: 4
        location:
          type: string
          example: USA
        ipAddress:
          type: string
          example: 127.0.0.1
        deviceName:
          type: string
          example: 'MacOs on MacBook'
        createdAt:
          type: string
          example: '2019-09-19T15:10:43+00:00'
      type: object
    StorageUpload:
      title: 'Binary file data'
      description: 'File content. Text of file or any other raw binary data.'
      type: string
    StorageCollectionResource:
      description: 'Storage Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/StorageResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    StorageResource:
      description: 'Storage Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Storage'
    Storage:
      title: Storage
      properties:
        id:
          type: integer
          format: int64
          example: 1
        fileName:
          type: string
          example: umbrella_app.xliff
      type: object
    StringCreateSchema:
      description: 'Add String'
      type: object
      oneOf:
        -
          $ref: '#/components/schemas/CrowdinFileBasedStringCreateForm'
        -
          $ref: '#/components/schemas/CrowdinFileBasedStringPluralsCreateForm'
      x-doc-sections:
        - file-based
    StringMassPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/StringMassOperation'
      example:
        -
          op: replace
          path: /2814/isHidden
          value: true
        -
          op: replace
          path: /2814/context
          value: 'some context'
        -
          op: add
          path: /-
          value:
            text: 'new added string'
            identifier: a.b.c
            context: 'context for new string'
            fileId: 5
            isHidden: false
        -
          op: remove
          path: /2815
      x-doc-sections:
        - file-based
    StringMassOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - remove
            - add
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/StringMassOperationReplace'
          remove: '#/components/schemas/StringMassOperationRemove'
          add: '#/components/schemas/StringMassOperationAdd'
    StringMassOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringMassOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - '/{stringId}/identifier'
                - '/{stringId}/text'
                - '/{stringId}/context'
                - '/{stringId}/isHidden'
                - '/{stringId}/maxLength'
                - '/{stringId}/labelIds'
              example: '/{stringId}/isHidden'
            value:
              example: true
              oneOf:
                -
                  type: string
                -
                  type: object
                -
                  type: integer
                -
                  type: boolean
    StringMassOperationRemove:
      description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringMassOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - '/{stringId}'
    StringMassOperationAdd:
      description: 'A JSON Patch `Add` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringMassOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - /-
            value:
              type: object
    StringPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/StringOperation'
    StringOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /identifier
            - /text
            - /context
            - /isHidden
            - /maxLength
            - /labelIds
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/StringOperationReplace'
          test: '#/components/schemas/StringOperationTest'
      example:
        op: replace
        path: /isHidden
        value: true
    StringOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: object
                -
                  type: integer
                -
                  type: boolean
    StringOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
    CrowdinFileBasedStringCreateForm:
      title: 'String Create Form'
      required:
        - text
        - fileId
      properties:
        text:
          description: 'Text for translation'
          type: string
          example: 'Not all videos are shown to users. See more'
        identifier:
          description: "Defines unique string identifier. Max. length is 512 characters\n\n __Note:__ Required for YAML files and XLSX files with identifiers in their schema"
          type: string
          example: 6a1821e6499ebae94de4b880fd93b985
        fileId:
          description: 'File Identifier. Get via [List Files](#operation/api.projects.files.getMany)'
          type: integer
          example: 48
        context:
          description: 'Use to provide additional information for better source text understanding'
          type: string
          example: 'shown on main page'
        isHidden:
          description: 'Defines whether to make string unavailable for translation'
          type: boolean
          default: false
          example: false
        maxLength:
          description: 'Max. length of translated text (0 – unlimited)'
          type: integer
          example: 35
        labelIds:
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
      type: object
    CrowdinStringBasedStringCreateForm:
      title: 'String Create Form'
      required:
        - text
        - branchId
        - identifier
      properties:
        text:
          description: 'Text for translation'
          type: string
          example: 'Not all videos are shown to users. See more'
        identifier:
          description: 'Defines unique string identifier'
          type: string
          example: 6a1821e6499ebae94de4b880fd93b985
        branchId:
          description: 'Branch Identifier. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: integer
          example: 48
        context:
          description: 'Use to provide additional information for better source text understanding'
          type: string
          example: 'shown on main page'
        isHidden:
          description: 'Defines whether to make string unavailable for translation'
          type: boolean
          default: false
          example: false
        maxLength:
          description: 'Max. length of translated text (0 – unlimited)'
          type: integer
          example: 35
        labelIds:
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
      type: object
    CrowdinFileBasedStringPluralsCreateForm:
      title: 'Plural String Create Form'
      required:
        - text
        - fileId
      properties:
        text:
          description: 'Text for translation'
          type: object
          example:
            one: string
            other: strings
        identifier:
          description: "Defines unique string identifier. Max. length is 512 characters\n\n __Note:__ Required for YAML files and XLSX files with identifiers in their schema"
          type: string
          example: 6a1821e6499ebae94de4b880fd93b985
        fileId:
          description: 'File Identifier. Get via [List Files](#operation/api.projects.files.getMany)'
          type: integer
          example: 48
        context:
          description: 'Use to provide additional information for better source text understanding'
          type: string
          example: 'shown on main page'
        isHidden:
          description: 'Defines whether to make string unavailable for translation'
          type: boolean
          default: false
          example: false
        maxLength:
          description: 'Max. length of translated text (0 – unlimited)'
          type: integer
          example: 35
        labelIds:
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
      type: object
    CrowdinStringBasedStringPluralsCreateForm:
      title: 'Plural String Create Form'
      required:
        - text
        - branchId
        - identifier
      properties:
        text:
          description: 'Text for translation'
          type: object
          example:
            one: string
            other: strings
        identifier:
          description: 'Defines unique string identifier. Max. length is 512 characters'
          type: string
          example: 6a1821e6499ebae94de4b880fd93b985
        branchId:
          description: 'Branch Identifier. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: integer
          example: 48
        context:
          description: 'Use to provide additional information for better source text understanding'
          type: string
          example: 'shown on main page'
        isHidden:
          description: 'Defines whether to make string unavailable for translation'
          type: boolean
          default: false
          example: false
        maxLength:
          description: 'Max. length of translated text (0 – unlimited)'
          type: integer
          example: 35
        labelIds:
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
      type: object
    StringBasedProjectFileType:
      description: "Values available:\n * empty value or 'auto' — Try to detect file type by extension or MIME type\n * 'android' — Android (*.xml)\n * 'macosx' — Mac OS X / iOS (*.strings)\n * 'arb' — Application Resource Bundle (*.arb)\n * 'csv' — Comma Separated Values (*.csv)\n * 'json' — Generic JSON (*.json)\n * 'xliff' — XLIFF (*.xliff, *.xlf)\n * 'xliff_two' — XLIFF 2.0 (*.xliff, *.xlf)\n * 'xlsx' — Microsoft Excel (*.xlsx)\n * 'resx' — .NET, Windows Phone (*.resx)\n * 'gettext' — GNU GetText (*.po, *.pot)\n * 'i18next_json' — i18next (*.json)\n * 'properties' — Java (*.properties)\n * 'properties_xml' — Java Application (*.xml)\n * 'properties_play' — Play Framework\n * 'yaml' — Ruby On Rails (*.yaml, *.yml)\n * 'string_catalog' — String Catalog (*.xcstrings)\n * 'nestjs_i18n' — NestJS i18n (*.json)\n * 'stringsdict' — iOS (*.stringsdict)"
      type: string
      default: auto
      enum:
        - auto
        - android
        - macosx
        - arb
        - csv
        - json
        - xlsx
        - xliff
        - xliff_two
        - resx
        - gettext
        - i18next_json
        - properties
        - properties_xml
        - properties_play
        - yaml
        - string_catalog
        - nestjs_i18n
        - stringsdict
      example: xliff
    StringBasedSpreadsheetFileUploadSchema:
      title: 'Spreadsheet File Upload Schema for String-Based Projects'
      description: 'Defines data columns mapping. The column numbering starts at 0'
      properties:
        none:
          description: 'Defines empty column'
          type: integer
        identifier:
          description: 'Defines identifier column number'
          type: integer
        sourcePhrase:
          description: 'Defines source phrase column number'
          type: integer
        sourceOrTranslation:
          description: 'Defines source or translation column number'
          type: integer
        translation:
          description: 'Defines translation column number'
          type: integer
        context:
          description: 'Defines context column number'
          type: integer
        translatable:
          description: 'Defines visible status `yes` as show and `no` as hidden'
          type: integer
      type: object
      example:
        identifier: 0
        sourcePhrase: 1
        en: 2
        de: 3
      additionalProperties:
        $ref: '#/components/schemas/SpreadsheetLanguageCodeColumnNumber'
    StringBasedSpreadsheetFileUploadOptions:
      title: 'Spreadsheet File Upload Options'
      properties:
        scheme:
          $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadSchema'
      type: object
    StringBasedFileUploadOptions:
      title: 'File Upload Options'
      type: object
      example:
        firstLineContainsHeader: true
        importHiddenSheets: true
        contentSegmentation: false
        scheme:
          identifier: 0
          sourcePhrase: 1
          en: 2
          de: 3
      oneOf:
        -
          $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadOptions'
        -
          $ref: '#/components/schemas/StringBasedStringCatalogImportOptions'
        -
          $ref: '#/components/schemas/OtherFilesStringBasedImportOptions'
    OtherFilesStringBasedImportOptions:
      title: 'Other Files Import Options'
      properties:
        contentSegmentation:
          description: "Defines whether to split long texts into smaller text segments. Only for __android__, __arb__, __macosx__, __json__, __xlsx__, __csv__, __xliff13__, __xliff_two4__ files.\n\n__Note:__ When Content segmentation is enabled, the translation upload is handled by an experimental machine learning technology. To achieve the best results, we recommend uploading translation files with the same or as close as possible file structure as in source files."
          type: boolean
        srxStorageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany).\n\nStorage identifier of the SRX segmentation rules file. Read more about [Custom Segmentation](https://support.crowdin.com/custom-segmentation/#segmentation-examples)."
          type: integer
          format: int64
          example: 61
      type: object
    StringBasedStringCatalogImportOptions:
      title: 'StringCatalog File Import Options'
      properties:
        importKeyAsSource:
          description: 'Determines whether to import the key as source string if it does not exist.'
          type: boolean
          default: true
        importTranslations:
          description: 'Defines whether to import translations from the file'
          type: boolean
          default: false
      type: object
    StringBasedStringUploadForm:
      required:
        - storageId
        - branchId
      properties:
        storageId:
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          type: integer
          format: int64
          example: 61
        branchId:
          description: 'Branch Identifier — defines branch to which file will be added. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: integer
          example: 34
        type:
          $ref: '#/components/schemas/StringBasedProjectFileType'
        parserVersion:
          description: "Using latest parser version by default.\n\n__Note:__ Must be used together with `type`"
          type: integer
          example: 1
        labelIds:
          description: 'Attach labels to strings. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
        updateStrings:
          description: 'Update strings that have the same keys'
          type: boolean
          default: false
          example: true
        cleanupMode:
          description: 'If `true`, all strings with a system label that do not exist in the file will be deleted.'
          type: boolean
          default: false
          example: true
        importOptions:
          $ref: '#/components/schemas/StringBasedFileUploadOptions'
        updateOption:
          description: "Defines whether to keep existing translations and approvals for updated strings.\n\n__Note:__  Must be used together with `updateStrings = true`"
          type: string
          default: clear_translations_and_approvals
          enum:
            - clear_translations_and_approvals
            - keep_translations
            - keep_translations_and_approvals
      type: object
    CrowdinFileBasedStringCollectionResource:
      description: 'String Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinFileBasedStringResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
          type: object
        -
          $ref: '#/components/schemas/CollectionResource'
    CrowdinFileBasedStringResource:
      description: 'String Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileBasedString'
    CrowdinFileBasedStringUpdatedCollectionResource:
      description: 'String Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinFileBasedStringResource'
          type: object
    CrowdinStringBasedStringCollectionResource:
      description: 'String Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinStringBasedStringResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
          type: object
        -
          $ref: '#/components/schemas/CollectionResource'
    CrowdinStringBasedStringResource:
      description: 'String Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringBasedString'
    CrowdinStringBasedStringUpdatedCollectionResource:
      description: 'String Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinStringBasedStringResource'
          type: object
    CrowdinStringSearchCollectionResource:
      description: 'A list of matched source strings across projects.'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                oneOf:
                  - { $ref: '#/components/schemas/CrowdinFileBasedStringResource' }
                  - { $ref: '#/components/schemas/CrowdinStringBasedStringResource' }
            pagination:
              $ref: '#/components/schemas/Pagination'
          type: object
        -
          $ref: '#/components/schemas/CollectionResource'
    StringBasedStringUploadResource:
      description: 'String Upload Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringUploadResponseModel'
    FileBasedString:
      title: String
      type: object
      allOf:
        -
          $ref: '#/components/schemas/String'
        -
          properties:
            fileId:
              type: integer
              example: 48
            directoryId:
              type: integer
              example: 13
              nullable: true
            revision:
              type: integer
              example: 1
    StringBasedString:
      title: String
      type: object
      allOf:
        -
          $ref: '#/components/schemas/String'
    String:
      title: String
      properties:
        id:
          type: integer
          example: 2814
        projectId:
          type: integer
          example: 2
        branchId:
          type: integer
          example: 12
          nullable: true
        identifier:
          type: string
          example: name
        text:
          nullable: true
          oneOf:
            -
              title: String
              type: string
              example: 'Not all videos are shown to users. See more'
            -
              title: 'Plural String'
              type: object
              example:
                one: '1 video is shown to users'
                other: '{count} videos are shown to users'
        type:
          type: string
          example: text
        context:
          type: string
          example: 'shown on main page'
        maxLength:
          type: integer
          example: 35
        isHidden:
          type: boolean
          example: false
        isDuplicate:
          type: boolean
          example: true
        masterStringId:
          type: integer
          example: 1
          nullable: true
        hasPlurals:
          description: 'Use fields `type` and `text` instead'
          type: boolean
          example: false
          deprecated: true
        isIcu:
          description: 'Use field `type` instead'
          type: boolean
          example: false
          deprecated: true
        labelIds:
          type: array
          items:
            type: integer
            example: 3
        webUrl:
          type: string
          example: 'https://example.crowdin.com/editor/1/all/en-pl?filter=basic&value=0&view=comfortable#2'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-20T12:43:57+00:00'
          nullable: true
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-20T13:24:01+00:00'
          nullable: true
      type: object
    StringUploadResponseModel:
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          properties:
            branchId:
              type: integer
              example: 38
            storageId:
              type: integer
              format: int64
              example: 38
            fileType:
              type: string
              example: android
            parserVersion:
              type: integer
              example: 8
            labelIds:
              type: array
              items:
                type: integer
              example:
                - 1
                - 2
            updateStrings:
              type: boolean
              example: false
            cleanupMode:
              type: boolean
              example: false
            importOptions:
              $ref: '#/components/schemas/StringBasedFileUploadOptions'
            updateOption:
              type: string
              example: clear_translations_and_approvals
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    StringCommentMassPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/StringCommentMassOperation'
      example:
        -
          op: replace
          path: /2814/text
          value: 'some issue edited'
        -
          op: replace
          path: /2814/issueStatus
          value: resolved
        -
          op: add
          path: /-
          value:
            text: 'some issue'
            stringId: 1
            type: issue
            targetLanguageId: en
            issueType: translation_mistake
        -
          op: remove
          path: /2815
    StringCommentMassOperation:
      description: 'A JSON Patch (222) operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - remove
            - add
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/StringCommentMassOperationReplace'
          remove: '#/components/schemas/StringCommentMassOperationRemove'
          add: '#/components/schemas/StringCommentMassOperationAdd'
    StringCommentMassOperationReplace:
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringCommentMassOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - '/{commentId}/text'
                - '/{commentId}/issueStatus'
              example: '/{commentId}/text'
            value:
              type: string
              example: true
    StringCommentMassOperationRemove:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringCommentMassOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - '/{commentId}'
    StringCommentMassOperationAdd:
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringCommentMassOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - /-
            value:
              type: object
    StringCommentPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/StringCommentOperation'
    StringCommentOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /text
            - /issueStatus
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/StringCommentOperationReplace'
          test: '#/components/schemas/StringCommentOperationTest'
    StringCommentOperationReplace:
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringCommentOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    StringCommentOperationTest:
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringCommentOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    StringCommentCreateForm:
      required:
        - stringId
        - text
        - type
      properties:
        stringId:
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: integer
          example: 1
        text:
          type: string
          example: 'some issue with translation'
        type:
          description: 'Defines comment or issue'
          type: string
          enum:
            - comment
            - issue
          example: issue
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        issueType:
          description: 'Defines issue type'
          type: string
          default: general_question
          enum:
            - general_question
            - translation_mistake
            - context_request
            - source_mistake
          example: translation_mistake
        attachments:
          description: 'List of attachments to be added to the comment. Each object must contain id (Storage Identifier). Get via [List Storages](#operation/api.storages.getMany)'
          type: array
          items:
            properties:
              id:
                description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
                type: integer
                example: 123
            type: object
      type: object
    AssetCommentCreateForm:
      required:
        - fileId
        - text
        - type
      properties:
        fileId:
          description: 'File Identifier. Get via [List Files](#operation/api.projects.files.getMany)'
          type: integer
          example: 42
        text:
          type: string
          example: 'some issue with asset'
        type:
          description: 'Defines comment or issue'
          type: string
          enum:
            - comment
            - issue
          example: issue
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        issueType:
          description: 'Defines issue type'
          type: string
          default: general_question
          enum:
            - general_question
            - translation_mistake
            - context_request
            - source_mistake
          example: translation_mistake
        attachments:
          description: 'List of attachments created via Storage API. Each item must contain storage ID.'
          type: array
          items:
            properties:
              id:
                description: 'Storage ID returned by the Storage API'
                type: integer
                example: 123
            type: object
      type: object
    StringCommentCollectionResource:
      description: 'String Comment Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                type: object
                oneOf:
                  - { $ref: '#/components/schemas/StringCommentResource' }
                  - { $ref: '#/components/schemas/AssetCommentResource' }
            pagination:
              $ref: '#/components/schemas/Pagination'
    StringCommentResource:
      description: 'String Comment Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringComment'
    AssetCommentResource:
      description: 'Asset Comment Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AssetComment'
    StringCommentUpdatedCollectionResource:
      description: 'String Comment Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                type: object
                oneOf:
                  - { $ref: '#/components/schemas/StringCommentResource' }
                  - { $ref: '#/components/schemas/AssetCommentResource' }
    BaseComment:
      title: 'Base Comment'
      description: 'Base Comment Response Model'
      properties:
        id:
          description: 'Comment ID'
          type: integer
          example: 2
        text:
          description: 'Comment text'
          type: string
          example: '@BeMyEyes  Please provide more details on where the text will be used'
        userId:
          description: 'User ID'
          type: integer
          example: 6
        user:
          description: 'User object'
          properties:
            id:
              description: 'User ID'
              type: integer
              example: 12
            username:
              description: 'User username'
              type: string
              example: john_smith
            fullName:
              description: 'User full name'
              type: string
              example: 'John Smith'
            avatarUrl:
              description: 'User avatar URL'
              type: string
              example: ''
          type: object
        projectId:
          description: 'Project ID'
          type: integer
          example: 1
        languageId:
          description: 'Language ID'
          type: string
          example: en
        type:
          description: 'Comment type'
          type: string
          example: issue
        issueType:
          description: 'Issue type'
          type: string
          example: source_mistake
        issueStatus:
          description: 'Issue status'
          type: string
          example: unresolved
        resolverId:
          description: 'Resolver ID'
          type: integer
          example: 12
        resolver:
          description: 'Resolver object'
          type: object
        resolvedAt:
          description: 'Resolved at'
          type: string
          example: '2019-09-20T11:05:24+00:00'
        createdAt:
          description: 'Created at'
          type: string
          example: '2019-09-20T11:05:24+00:00'
        attachments:
          description: 'List of attachments added to the comment'
          type: array
          items:
            properties:
              id:
                description: 'Attachment ID'
                type: integer
                example: 10
              name:
                description: 'Original file name'
                type: string
                example: screenshot.png
              mime:
                description: 'MIME type'
                type: string
                example: image/png
              size:
                description: 'File size in bytes'
                type: integer
                example: 12345
              category:
                description: 'Attachment category (image, video, audio, document, other)'
                type: string
                example: image
              thumbnailUrl:
                description: 'Thumbnail URL'
                type: string
                example: 'https://example.com/thumbnail.png'
                nullable: true
              url:
                description: 'Preview URL'
                type: string
                example: 'https://example.com/original.png'
              downloadUrl:
                description: 'Download URL'
                type: string
                example: 'https://example.com/raw.png'
            type: object
      type: object
    StringComment:
      title: 'String/Asset Comment'
      description: 'String Comment Response Model'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/BaseComment'
        -
          properties:
            stringId:
              description: 'String ID'
              type: integer
              example: 742
            string:
              description: 'String object'
              properties:
                id:
                  description: 'String ID'
                  type: integer
                  example: 742
                text:
                  description: 'String text'
                  type: string
                  example: 'HTML page example'
                type:
                  description: 'String type'
                  type: string
                  example: text
                hasPlurals:
                  description: 'Use fields `type` and `text` instead'
                  type: boolean
                  example: false
                isIcu:
                  description: 'Use field `type` instead'
                  type: boolean
                  example: false
                context:
                  description: 'String context'
                  type: string
                  example: 'Document Title\r\nXPath: /html/head/title'
                fileId:
                  description: 'File ID'
                  type: integer
                  example: 22
              type: object
    AssetComment:
      title: 'Asset Comment'
      description: 'Asset Comment Response Model'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/BaseComment'
        -
          properties:
            fileId:
              description: 'File ID'
              type: integer
              example: 12345
            file:
              description: 'File object'
              properties:
                id:
                  description: 'File ID'
                  type: integer
                  example: 10336
                name:
                  description: 'Asset filename'
                  type: string
                  example: 300.jpeg
                type:
                  description: 'File type'
                  type: string
                  example: asset
                context:
                  description: 'Asset context'
                  type: string
                  example: 'Asset context'
              type: object
    TranslationMassPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/TranslationMassOperation'
      example:
        -
          op: add
          path: /-
          value:
            stringId: 35434
            languageId: fr
            text: 'Цю стрічку перекладено'
            pluralCategoryName: few
            addToTm: false
        -
          op: add
          path: /-
          value:
            fileId: 12345
            languageId: fr
            storageId: 67890
        -
          op: replace
          path: /2814
          value:
            text: 'new translation text'
        -
          op: remove
          path: /2815
    TranslationMassOperation:
      description: 'A JSON Patch (222) operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - remove
            - add
            - replace
      type: object
      discriminator:
        propertyName: op
        mapping:
          remove: '#/components/schemas/TranslationMassOperationRemove'
          add: '#/components/schemas/TranslationMassOperationAdd'
          replace: '#/components/schemas/TranslationMassOperationReplace'
    TranslationMassOperationRemove:
      description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TranslationMassOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - '/{translationId}'
    TranslationMassOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TranslationMassOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - '/{translationId}'
            value:
              required:
                - text
              properties:
                text:
                  description: 'Updated translation text'
                  type: string
                  example: 'new translation text'
              type: object
    TranslationMassOperationAdd:
      description: 'A JSON Patch `Add` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TranslationMassOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - /-
            value:
              type: object
              oneOf:
                -
                  $ref: '#/components/schemas/TranslationCreateForm'
                -
                  $ref: '#/components/schemas/AssetTranslationCreateForm'
    AssetTranslationCreateForm:
      required:
        - fileId
        - languageId
        - storageId
      properties:
        fileId:
          description: 'File Identifier. Get via [List Files](#operation/api.projects.files.getMany)'
          type: integer
          example: 12345
        languageId:
          description: 'Language Identifier. Get via [List Languages](#operation/api.projects.languages.getMany)'
          type: string
          example: uk
        storageId:
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          type: integer
          example: 12345
      type: object
    CorrectionCollectionForm:
      required:
        - stringId
      properties:
        stringId:
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: integer
          example: 35434
        denormalizePlaceholders:
          description: 'Enable denormalize placeholders'
          type: integer
          default: 0
          enum:
            - 0
            - 1
      type: object
    CorrectionCreateForm:
      required:
        - stringId
        - text
      properties:
        stringId:
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: integer
          example: 35434
        text:
          description: 'Correction text'
          type: string
          example: 'This string has been corrected'
        pluralCategoryName:
          description: "Plural form. Acceptable keys are `zero`, `one`, `two`, `few`, `many`, and `other`\n\n_Note:_ This field becomes required for strings with plural forms"
          type: string
          example: few
      type: object
    CorrectionDeleteForm:
      required:
        - stringId
      properties:
        stringId:
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: integer
          example: 35434
      type: object
    TranslationApprovalCreateForm:
      required:
        - translationId
      properties:
        translationId:
          description: 'Translation Identifier. Get via [List String Translations](#operation/api.projects.translations.getMany)'
          type: integer
          example: 200
      type: object
    TranslationAlignmentForm:
      required:
        - sourceLanguageId
        - targetLanguageId
        - text
      properties:
        sourceLanguageId:
          description: 'Source Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: de
        text:
          description: 'Text for alignment'
          type: string
          example: 'Your password has been reset successfully!'
      type: object
    TranslationCreateForm:
      required:
        - stringId
        - languageId
        - text
      properties:
        stringId:
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: integer
          example: 35434
        languageId:
          description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: uk
        text:
          description: 'Translation text'
          type: string
          example: 'Цю стрічку перекладено'
        pluralCategoryName:
          description: "Plural form. Acceptable keys are `zero`, `one`, `two`, `few`, `many`, and `other`\n\n__Note:__ Will be saved only if the source string has plurals and `pluralCategoryName` is equal to the one available for the language you add translations to"
          type: string
          example: few
        addToTm:
          description: 'Defines whether to add translation to TM'
          type: boolean
          default: true
          example: false
        provider:
          description: "Translation provider type. Required when providerId or isPreTranslated is specified\n\n\n__Note__: `global_tm` value can't be used with `providerId` in same request"
          type: string
          default: null
          enum:
            - tm
            - global_tm
            - google
            - microsoft
            - crowdin
            - deepl
            - amazon
            - google_automl
            - modernmt
            - custom_mt
            - ai
          example: tm
          nullable: true
        providerId:
          description: "Provider specific identifier. Get via:\n * If `provider` is `tm` - [List TMs](#operation/api.tms.getMany)\n * If `provider` is `ai` - [List AI Prompts](#operation/api.ai.prompts.getMany)\n * If `provider` is `google`, `microsoft`, `crowdin`, `deepl`, `amazon`, `google_automl`, `modernmt` or `custom_mt` - [List MTs](#operation/api.mts.getMany)\n\n__Note__: Can't be used if `provider` value is `global_tm`"
          type: integer
          example: 123
        isPreTranslated:
          description: 'Defines whether this is an auto-translated translation'
          type: boolean
          default: false
          example: true
      type: object
    TranslationQaCheckValidateCollectionForm:
      type: array
      items:
        $ref: '#/components/schemas/TranslationQaCheckValidateForm'
    TranslationQaCheckValidateForm:
      required:
        - stringId
        - languageId
        - text
      properties:
        stringId:
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: integer
          example: 35434
        languageId:
          description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: uk
        text:
          description: 'Translation text'
          type: string
          example: 'Цю стрічку перекладено'
        pluralCategoryName:
          description: 'Plural form. Acceptable keys are `zero`, `one`, `two`, `few`, `many`, and `other`'
          type: string
          example: few
      type: object
    TranslationVoteCreateForm:
      required:
        - translationId
        - mark
      properties:
        mark:
          description: "Vote type:\n * 'up' — upvote translation\n * 'down' — downvote translation"
          type: string
          enum:
            - up
            - down
          example: up
        translationId:
          description: 'Translation Identifier. Get via [List String Translations](#operation/api.projects.translations.getMany)'
          type: integer
          example: 653412
      type: object
    CorrectionApprovalResource:
      description: 'Correction Approval Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CorrectionApproval'
    CorrectionCollectionResource:
      description: 'Correction Collection Resource'
      allOf:
        -
          $ref: '#/components/schemas/Pagination'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CorrectionResource'
          type: object
        -
          $ref: '#/components/schemas/CollectionResource'
    CorrectionResource:
      description: 'Correction Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringCorrection'
    CrowdinTranslationSearchCollectionResource:
      description: 'A list of matched translations across projects.'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinTranslationSearchResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinTranslationSearchResource:
      description: 'Translation Search Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinSearchTranslation'
    PlainLanguageTranslationCollectionResource:
      title: 'Plain language translations'
      description: 'Plain Language Translation Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/PlainLanguageTranslationResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    PluralLanguageTranslationCollectionResource:
      title: 'Plural language translations'
      description: 'Plural Language Translation Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/PluralLanguageTranslationResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    IcuLanguageTranslationCollectionResource:
      title: 'ICU language translations'
      description: 'ICU Language Translation Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/IcuLanguageTranslationResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    AssetLanguageTranslationCollectionResource:
      title: 'Asset language translations'
      description: 'Asset Language Translation Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/AssetLanguageTranslationResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    PlainLanguageTranslationResource:
      description: 'Plain Language Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/PlainLanguageTranslation'
    PluralLanguageTranslationResource:
      description: 'Plural Language Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/PluralLanguageTranslation'
    IcuLanguageTranslationResource:
      description: 'ICU Language Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/IcuLanguageTranslation'
    AssetLanguageTranslationResource:
      description: 'Asset Language Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AssetLanguageTranslation'
    TranslationAlignmentResource:
      description: 'Translation Alignment Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TranslationAlignment'
    TranslationApprovalCollectionResource:
      description: 'List Translation Approvals'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TranslationApprovalResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CorrectionApprovalCollectionResource:
      description: 'List Correction Approvals'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CorrectionApprovalResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TranslationApprovalResource:
      description: 'Translation Approval Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              oneOf:
                -
                  $ref: '#/components/schemas/StringApproval'
                -
                  $ref: '#/components/schemas/AssetApproval'
    TranslationApprovalUpdatedCollectionResource:
      description: 'Translation Approval Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TranslationApprovalResource'
    TranslationCollectionResource:
      description: 'A list of Translations for a String.'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TranslationResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TranslationQaCheckValidateCollectionResource:
      description: 'QaCheck Validate Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TranslationQaCheckValidateResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TranslationQaCheckValidateResource:
      description: 'QaCheck Validate Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TranslationQaCheckValidate'
    TranslationResource:
      description: 'Translation Resource (can be either string or asset translation)'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
      oneOf:
        -
          $ref: '#/components/schemas/StringTranslationResource'
        -
          $ref: '#/components/schemas/AssetTranslationResource'
    StringTranslationResource:
      description: 'String Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringTranslation'
    AssetTranslationResource:
      description: 'Asset Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/AssetTranslation'
    TranslationUpdatedCollectionResource:
      description: 'Translation Approval Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TranslationResource'
    TranslationVoteCollectionResource:
      description: 'List Translation Votes'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TranslationVoteResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TranslationVoteResource:
      description: 'Translation Vote Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Vote'
    AssetApproval:
      title: 'Asset Approval'
      description: 'Approval for asset translations'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Approval'
        -
          $ref: '#/components/schemas/Approval'
        -
          properties:
            fileId:
              description: 'File Identifier. Get via [List Files](#operation/api.projects.files.getMany)'
              type: integer
              example: 12345
    AssetLanguageTranslation:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/LanguageTranslation'
        -
          properties:
            contentType:
              type: string
              example: image/jpeg
            url:
              type: string
              example: 'https://example.com/file.jpg'
            qaIssuesStatus:
              description: 'QA Issues Status'
              type: string
              enum:
                - inProgress
                - failed
                - passed
              example: passed
    AssetTranslation:
      title: 'Asset Translation'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/BaseTranslation'
        -
          properties:
            url:
              description: 'Asset URL'
              type: string
    CorrectionApproval:
      title: 'Correction Approval'
      properties:
        id:
          description: 'Approval Identifier. Get via [List Translation Approvals](#operation/api.projects.approvals.getMany)'
          type: integer
          example: 190695
        user:
          description: User
          properties:
            id:
              type: integer
              example: 19
            username:
              type: string
              example: john_doe
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
        correctionId:
          description: 'Correction Identifier'
          type: integer
          example: 190695
        stringId:
          description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: integer
          example: 2345
        languageId:
          description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: uk
        createdAt:
          description: 'Approval create date'
          type: string
          format: date-time
          example: '2019-09-19T12:42:12+00:00'
      type: object
    StringCorrection:
      title: 'String Correction'
      properties:
        id:
          description: 'Correction Identifier'
          type: integer
          example: 190695
        text:
          description: 'Correction text'
          type: string
          example: 'This string has been corrected'
        pluralCategoryName:
          description: 'Plural category name'
          type: string
          example: few
        user:
          description: User
          properties:
            id:
              type: integer
              example: 19
            username:
              type: string
              example: john_doe
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    CrowdinSearchTranslation:
      title: 'Search Translation'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringTranslation'
        -
          $ref: '#/components/schemas/StringTranslation'
        -
          properties:
            projectId:
              description: 'Project Identifier'
              type: integer
              example: 8
            stringId:
              description: 'Source String Identifier'
              type: integer
              example: 35
            languageId:
              description: 'Target Language Identifier'
              type: string
              example: uk
    IcuLanguageTranslation:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TranslationProviderInfo'
        -
          $ref: '#/components/schemas/LanguageTranslation'
        -
          properties:
            contentType:
              type: string
              example: application/vnd.crowdin.text+icu
            text:
              type: string
              example: '{count, plural, one {# String} other {# Strings}}'
            qaIssuesStatus:
              description: 'QA Issues Status'
              type: string
              enum:
                - inProgress
                - failed
                - passed
              example: passed
    TranslationProviderInfo:
      properties:
        provider:
          description: 'Translation Provider. `null` when the translation was added manually'
          type: string
          enum:
            - tm
            - google
            - microsoft
            - crowdin
            - deepl
            - amazon
            - watson
            - global_tm
            - google_automl
            - modernmt
            - custom_mt
            - ai
          nullable: true
        providerId:
          description: 'Provider specific identifier: a TM for `tm`, an AI Prompt for `ai`, an MT engine for machine translation providers. `null` when the translation was added manually or without a specific provider entity'
          type: integer
          example: 17
          nullable: true
        isPreTranslated:
          description: 'If `true`, the translation was added by Auto-Translation'
          type: boolean
          example: true
        matchRate:
          description: 'Translation Memory match rate in percent (40–100) recorded when the translation was added — set for manually added translations too. `null` when no TM match was available'
          type: integer
          example: 75
          nullable: true
        matchType:
          description: 'Translation Memory match type. One of: `perfect` (text and context match), `exact` (text match only), `fuzzy` (partial match). `null` when no TM match was available'
          type: string
          enum:
            - perfect
            - exact
            - fuzzy
          example: fuzzy
          nullable: true
      type: object
    LanguageTranslation:
      properties:
        stringId:
          type: integer
          example: 6356
        translationId:
          type: integer
          example: 732
        user:
          description: User
          properties:
            id:
              type: integer
              example: 19
            username:
              type: string
              example: john_doe
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    PlainLanguageTranslation:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TranslationProviderInfo'
        -
          $ref: '#/components/schemas/LanguageTranslation'
        -
          properties:
            contentType:
              type: string
              example: text/plain
            text:
              type: string
              example: 'Confirm New Password'
            qaIssuesStatus:
              description: 'QA Issues Status'
              type: string
              enum:
                - inProgress
                - failed
                - passed
              example: passed
    PluralSuggestionOfLanguageTranslation:
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TranslationProviderInfo'
        -
          properties:
            translationId:
              type: integer
              example: 732
            text:
              type: string
              example: String
            pluralForm:
              type: string
              enum:
                - zero
                - one
                - two
                - few
                - many
                - other
              example: one
            user:
              description: User
              properties:
                id:
                  type: integer
                  example: 19
                username:
                  type: string
                  example: john_doe
                fullName:
                  type: string
                  example: 'John Smith'
                avatarUrl:
                  type: string
                  example: ''
              type: object
            createdAt:
              type: string
              format: date-time
              example: '2019-09-23T11:26:54+00:00'
    PluralLanguageTranslation:
      properties:
        stringId:
          type: integer
          example: 6356
        contentType:
          type: string
          example: application/vnd.crowdin.text+plural
        plurals:
          type: array
          items:
            $ref: '#/components/schemas/PluralSuggestionOfLanguageTranslation'
        qaIssuesStatus:
          description: 'QA Issues Status'
          type: string
          enum:
            - inProgress
            - failed
            - passed
          example: passed
      type: object
    StringApproval:
      title: 'String Approval'
      description: 'Approval for string translations'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Approval'
        -
          $ref: '#/components/schemas/Approval'
        -
          properties:
            stringId:
              description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
              type: integer
              example: 2345
    StringTranslation:
      title: 'String Translation'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/BaseTranslation'
        -
          $ref: '#/components/schemas/TranslationProviderInfo'
        -
          $ref: '#/components/schemas/BaseTranslation'
        -
          properties:
            text:
              description: 'Translation text'
              type: string
              example: 'Цю стрічку перекладено'
            pluralCategoryName:
              description: 'plural category name'
              type: string
              example: few
    Alignment:
      title: Alignment
      properties:
        sourceWord:
          type: string
          example: Password
        sourceLemma:
          type: string
          example: password
        targetWord:
          type: string
          example: Пароль
        targetLemma:
          type: string
          example: пароль
        match:
          type: integer
          example: 2
        probability:
          type: number
          example: 2
      type: object
    WordAlignments:
      title: 'Word Alignments'
      properties:
        text:
          type: string
          example: password
        alignments:
          type: array
          items:
            $ref: '#/components/schemas/Alignment'
      type: object
    TranslationAlignment:
      title: 'Translation Alignment'
      properties:
        words:
          type: array
          items:
            $ref: '#/components/schemas/WordAlignments'
      type: object
    Approval:
      title: Approval
      description: 'Base approval model with common fields'
      properties:
        id:
          description: 'Approval Identifier. Get via [List Translation Approvals](#operation/api.projects.approvals.getMany)'
          type: integer
          example: 190695
        user:
          description: User
          properties:
            id:
              type: integer
              example: 19
            username:
              type: string
              example: john_doe
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
        translationId:
          description: 'Translation Identifier'
          type: integer
          example: 190695
        languageId:
          description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: uk
        createdAt:
          description: 'Approval create date'
          type: string
          format: date-time
          example: '2019-09-19T12:42:12+00:00'
      type: object
    TranslationQaCheckValidate:
      title: 'Text Quality Assurance'
      description: 'QaCheck Validate Response Model'
      properties:
        stringId:
          type: integer
          example: 1
        languageId:
          type: string
          example: uk
        category:
          type: string
          example: spellcheck
        categoryDescription:
          type: string
          example: Spelling
        validation:
          type: string
          example: spellcheck
        validationDescription:
          type: string
          example: Misspelling
        pluralId:
          type: integer
          example: -1
        pluralCategoryName:
          type: string
          example: none
        text:
          type: string
          example: "Spellcheck failed for the following word: 'локалзація'."
        translation:
          type: string
          example: 'Перша локалзація.'
      type: object
    BaseTranslation:
      title: 'Base Translation'
      properties:
        id:
          description: 'Translation Identifier'
          type: integer
          example: 190695
        user:
          description: User
          properties:
            id:
              type: integer
              example: 19
            username:
              type: string
              example: john_doe
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
        rating:
          description: 'Translation Rating (Votes)'
          type: integer
          example: 10
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
      type: object
    Vote:
      title: Vote
      properties:
        id:
          description: 'Vote Identifier'
          type: integer
          example: 6643
        user:
          description: User
          properties:
            id:
              type: integer
              example: 19
            username:
              type: string
              example: john_doe
            fullName:
              type: string
              example: 'John Smith'
            avatarUrl:
              type: string
              example: ''
          type: object
        translationId:
          description: 'Translation Identifier'
          type: integer
          example: 19069345
        votedAt:
          description: 'Vote created date'
          type: string
          format: date-time
          example: '2019-09-19T12:42:12+00:00'
        mark:
          description: 'Vote action'
          type: string
          example: up
      type: object
    StyleGuidePatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/StyleGuideOperation'
    StyleGuideOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /aiInstructions
            - /languageIds
            - /projectIds
            - /isShared
            - /storageId
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/StyleGuideOperationReplace'
          test: '#/components/schemas/StyleGuideOperationTest'
    StyleGuideOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StyleGuideOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
    StyleGuideOperationTest:
      description: 'A JSON Patch `Test` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.6)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StyleGuideOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
    CrowdinStyleGuideCreateForm:
      required:
        - name
        - storageId
      properties:
        name:
          description: 'Style Guide name'
          type: string
          example: "Be My Eyes iOS's Style Guide"
        aiInstructions:
          description: "Style Guide instructions for AI models\n\n__Note:__ `maxLength` counts bytes, not characters — a non-Latin value reaches the limit two to four times sooner than its character count suggests"
          type: string
          maxLength: 10240
          nullable: true
        languageIds:
          description: 'Style Guide Language Identifier list. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: array
          items:
            type: string
          example:
            - uk
            - fr
            - de
        projectIds:
          description: 'Project ids to assign style guide to'
          type: array
          items:
            type: integer
          example:
            - 1
            - 2
            - 3
        isShared:
          description: 'Whether style guide should be shared to all projects within the account'
          type: boolean
          example: false
        storageId:
          description: 'Storage identifier.'
          type: integer
          example: 1
          nullable: true
      type: object
    CrowdinStyleGuideCollectionResource:
      description: 'Style Guide Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinStyleGuideResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinStyleGuideResource:
      description: 'Style Guide Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StyleGuide'
    StyleGuide:
      title: 'Style Guide'
      properties:
        id:
          type: integer
          example: 2
        name:
          type: string
          example: "Be My Eyes iOS's Style Guide"
        aiInstructions:
          type: string
          example: 'Rules to be used by AI models'
          nullable: true
        userId:
          type: integer
          example: 2
        languageIds:
          type: array
          items:
            type: string
            example: uk
          example:
            - uk
            - fr
            - de
          nullable: true
        projectIds:
          type: array
          items:
            type: integer
            example: 6
          nullable: true
        isShared:
          description: 'Whether style guide should be shared to all projects within the account'
          type: boolean
          example: false
        webUrl:
          type: string
          example: 'https://crowdin.com/profile/{userName}/style-guides?id=1'
        downloadLink:
          type: string
          example: 'https://storage.crowdin.com/style-guide/123/456/file.pdf'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-16T13:42:04+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-16T13:42:04+00:00'
      type: object
    TaskSettingsTemplatePatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/TaskSettingsTemplateOperation'
    TaskSettingsTemplateOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /config
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/TaskSettingsTemplateOperationReplace'
          test: '#/components/schemas/TaskSettingsTemplateOperationTest'
    TaskSettingsTemplateOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TaskSettingsTemplateOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: integer
    TaskSettingsTemplateOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TaskSettingsTemplateOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: array
                  items: { type: string }
    TaskPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        oneOf:
          -
            $ref: '#/components/schemas/TaskOperation'
          -
            $ref: '#/components/schemas/VendorTaskOperation'
          -
            $ref: '#/components/schemas/PendingTaskOperation'
          -
            $ref: '#/components/schemas/VendorPendingTaskOperation'
    TaskOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: "A JSON Pointer as defined by <a href=\"https://tools.ietf.org/html/rfc6901\" target=\"_blank\">RFC 6901</a>\n\n__Note__: `splitFiles` is deprecated, use `splitContent` instead"
          type: string
          format: json-pointer
          enum:
            - /status
            - /title
            - /description
            - /deadline
            - /startedAt
            - /resolvedAt
            - /splitFiles
            - /splitContent
            - /fileIds
            - /directoryIds
            - /branchIds
            - /stringIds
            - /assignees
            - /dateFrom
            - /dateTo
            - /translationsUpdatedDateFrom
            - /translationsUpdatedDateTo
            - /labelIds
            - /labelMatchRule
            - /excludeLabelIds
            - /excludeLabelMatchRule
            - /skipAssignedStrings
            - /resetScope
            - /generateCostEstimate
            - /generateTranslationCost
            - /reportSettingsTemplateId
            - /batchId
          x-doc-sections:
            - file-based
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/TaskOperationReplace'
          test: '#/components/schemas/TaskOperationTest'
    TaskOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TaskOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
                -
                  type: array
                  items: { type: object }
    TaskOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TaskOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
                -
                  type: array
                  items: { type: object }
    VendorTaskOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /title
            - /description
            - /status
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/VendorTaskOperationReplace'
          test: '#/components/schemas/VendorTaskOperationTest'
    VendorTaskOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/VendorTaskOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
                -
                  type: array
                  items: { type: object }
    VendorTaskOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/VendorTaskOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
                -
                  type: array
                  items: { type: object }
    PendingTaskOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /title
            - /description
            - /assignees
            - /deadline
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/PendingTaskOperationReplace'
          test: '#/components/schemas/PendingTaskOperationTest'
    PendingTaskOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/PendingTaskOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
                -
                  type: array
                  items: { type: object }
    PendingTaskOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/PendingTaskOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
                -
                  type: array
                  items: { type: object }
    VendorPendingTaskOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /title
            - /description
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/VendorPendingTaskOperationReplace'
          test: '#/components/schemas/VendorPendingTaskOperationTest'
    VendorPendingTaskOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/VendorPendingTaskOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
                -
                  type: array
                  items: { type: object }
    VendorPendingTaskOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/VendorPendingTaskOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
                -
                  type: array
                  items: { type: integer }
                -
                  type: array
                  items: { type: object }
    TaskCommentPatch:
      description: 'A JSON Patch document as defined by RFC 6902'
      type: array
      items:
        $ref: '#/components/schemas/TaskCommentOperation'
    TaskCommentOperation:
      description: 'A JSON Patch operation as defined by RFC 6902'
      required:
        - op
        - path
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer path'
          type: string
          enum:
            - /text
            - /timeSpent
        value:
          description: 'The value to replace with'
          oneOf:
            -
              description: 'For /text path'
              type: string
            -
              description: 'For /timeSpent path'
              type: integer
      type: object
    UserTaskPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/UserTaskOperation'
    UserTaskOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /isArchived
        value:
          description: "Acceptable values:\n\n * `true` – archive task\n * `false` – move a task from archived to a list of all tasks."
          type: boolean
          default: true
          example: true
      type: object
    CrowdinTaskCreateForm:
      title: 'Task Create'
      type: object
      oneOf:
        -
          $ref: '#/components/schemas/CrowdinCreateTaskBySourceIdsForm'
        -
          $ref: '#/components/schemas/CrowdinCreateTaskByStringIds'
      x-doc-sections:
        - file-based
    CrowdinCreateTaskBySourceIdsForm:
      title: 'Create By Source Ids Form'
      required:
        - title
        - languageId
        - type
      properties:
        fileIds:
          description: "Task File Identifiers. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously"
          type: array
          items:
            type: integer
            example: 2401
          x-doc-sections:
            - file-based
        directoryIds:
          description: "Directory Identifiers. Get via [List Directories](#operation/api.projects.directories.getMany)\n\n__Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously"
          type: array
          items:
            type: integer
            example: 2401
          x-doc-sections:
            - file-based
        branchIds:
          description: "Branch Identifiers. Get via [List Branches](#operation/api.projects.branches.getMany)\n\n__Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously"
          type: array
          items:
            type: integer
            example: 2401
          x-doc-sections:
            - file-based
        title:
          description: 'Task title'
          type: string
        languageId:
          description: 'Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: es
        type:
          description: "Task type:\n * 0 - translate\n * 1 - proofread"
          type: integer
          enum:
            - 0
            - 1
        labelIds:
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
        labelMatchRule:
          description: "Match rule for labels:\n- \"all\" - all labels must be present in string\n- \"any\" - any of the labels must be present in string\n\n__Note:__ Can only be used when `labelIds` parameter is provided"
          type: string
          default: all
          enum:
            - all
            - any
          nullable: true
        excludeLabelIds:
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 12
        excludeLabelMatchRule:
          description: "Match rule for excluded labels:\n- \"all\" - all labels must be present in string\n- \"any\" - any of the labels must be present in string\n\n__Note:__ Can only be used when `excludeLabelIds` parameter is provided"
          type: string
          default: all
          enum:
            - all
            - any
          nullable: true
        status:
          description: 'Task status'
          type: string
          default: todo
          enum:
            - todo
            - in_progress
        description:
          description: 'Task description'
          type: string
        splitFiles:
          description: 'Split files for task. Use `splitContent` instead'
          type: boolean
          default: false
          example: true
          deprecated: true
          x-doc-sections:
            - file-based
        splitContent:
          description: 'Split content for task'
          type: boolean
          default: false
          example: true
        skipAssignedStrings:
          description: 'Skip strings already included in other tasks'
          type: boolean
          default: false
          example: true
        includePreTranslatedStringsOnly:
          description: "Defines whether to export only pretranslated strings\n\n__Note:__ `true` value can't be used with `type=0` or `type=2` in same request"
          type: boolean
          default: false
          example: true
        assignees:
          type: array
          items:
            $ref: '#/components/schemas/CrowdinTaskAssignee'
        deadline:
          description: "Defines task deadline date\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        startedAt:
          description: "Defines task started date\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        dateFrom:
          description: "Defines start date for interval when strings were modified\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: "Defines end date for interval when strings were modified\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        translationsUpdatedDateFrom:
          description: "Defines start date for interval when translation were updated (proofread tasks only)\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        translationsUpdatedDateTo:
          description: "Defines end date for interval when translation were updated (proofread tasks only)\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        generateCostEstimate:
          description: 'Generate cost estimate report for the task. Requires `reportSettingsTemplateId`'
          type: boolean
          default: false
          example: false
        generateTranslationCost:
          description: 'Generate translation cost report for the task. Requires `reportSettingsTemplateId`'
          type: boolean
          default: false
          example: false
        reportSettingsTemplateId:
          description: 'Report Settings Templates Identifier. Get via [List Report Settings Templates](#operation/api.projects.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`'
          type: integer
          example: 1
          nullable: true
        batchId:
          description: 'Task Batch Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany). Allows grouping tasks into a batch'
          type: integer
          example: 1
          nullable: true
      type: object
    CrowdinCreateTaskByStringIds:
      title: 'Create By String Ids Form'
      required:
        - title
        - languageId
        - stringIds
        - type
      properties:
        stringIds:
          description: 'Task String Identifiers. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: array
          items:
            type: integer
            example: 2401
        title:
          description: 'Task title'
          type: string
        languageId:
          description: 'Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: es
        type:
          description: "Task type:\n * 0 - translate\n * 1 - proofread"
          type: integer
          enum:
            - 0
            - 1
        status:
          description: 'Task status'
          type: string
          default: todo
          enum:
            - todo
            - in_progress
        description:
          description: 'Task description'
          type: string
        splitFiles:
          description: 'Split files for task. Use `splitContent` instead'
          type: boolean
          default: false
          example: true
          deprecated: true
          x-doc-sections:
            - file-based
        splitContent:
          description: 'Split content for task'
          type: boolean
          default: false
          example: true
        skipAssignedStrings:
          description: 'Skip strings already included in other tasks'
          type: boolean
          default: false
          example: true
        includePreTranslatedStringsOnly:
          description: "Defines whether to export only pretranslated strings\n\n__Note:__ `true` value can't be used with `type=0` or `type=2` in same request"
          type: boolean
          default: false
          example: true
        assignees:
          type: array
          items:
            $ref: '#/components/schemas/CrowdinTaskAssignee'
        deadline:
          description: "Defines task deadline date\n\n __Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        startedAt:
          description: "Defines task started date\n\n __Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        dateFrom:
          description: "Defines start date for interval when strings were modified\n\n __Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: "Defines end date for interval when strings were modified\n\n __Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        translationsUpdatedDateFrom:
          description: "Defines start date for interval when translation were updated (proofread tasks only)\n\n __Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        translationsUpdatedDateTo:
          description: "Defines end date for interval when translation were updated (proofread tasks only)\n\n __Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        generateCostEstimate:
          description: 'Generate cost estimate report for the task. Requires `reportSettingsTemplateId`'
          type: boolean
          default: false
          example: false
        generateTranslationCost:
          description: 'Generate translation cost report for the task. Requires `reportSettingsTemplateId`'
          type: boolean
          default: false
          example: false
        reportSettingsTemplateId:
          description: 'Report Settings Templates Identifier. Get via [List Report Settings Templates](#operation/api.projects.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`'
          type: integer
          example: 1
          nullable: true
        batchId:
          description: 'Task Batch Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany). Allows grouping tasks into a batch'
          type: integer
          example: 1
          nullable: true
      type: object
    CrowdinPendingTaskCreateForm:
      title: 'Pending Task Create'
      required:
        - precedingTaskId
        - type
        - title
      properties:
        precedingTaskId:
          description: 'Translate Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
          type: integer
          example: 1
        type:
          description: "Task type:\n * 1 - proofread\n * 3 - proofread by vendor (requires `vendor` field)"
          type: integer
          enum:
            - 1
            - 3
        title:
          description: 'Task title'
          type: string
        description:
          description: 'Task description'
          type: string
        vendor:
          description: 'Vendor identifier. Required when `type` is `3`. Built-in vendors: `crowdin_language_service`, `oht`, `gengo`, `undertow`. For any other vendor, use its identifier from [Crowdin Store](https://crowdin.com/store/vendors).'
          type: string
          example: crowdin_language_service
          nullable: true
        assignees:
          type: array
          items:
            $ref: '#/components/schemas/CrowdinTaskAssignee'
        deadline:
          description: "Defines task deadline date\n\n __Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
      type: object
    CrowdinVendorTaskCreateForm:
      title: 'Vendor Task Create'
      type: object
      oneOf:
        -
          $ref: '#/components/schemas/CrowdinVendorTaskBySourceIdsForm'
        -
          $ref: '#/components/schemas/CrowdinVendorTaskByStringIds'
      x-doc-sections:
        - file-based
    CrowdinVendorTaskBySourceIdsForm:
      title: 'Create By Source Ids Form'
      description: 'Contains common fields shared across all vendors. Additional vendor-specific settings (e.g. expertise, tone, quality) depend on the selected vendor and are available at [Crowdin Store](https://crowdin.com/store/vendors).'
      required:
        - title
        - languageId
        - type
        - vendor
      properties:
        fileIds:
          description: "Task File Identifiers. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously"
          type: array
          items:
            type: integer
            example: 2401
          x-doc-sections:
            - file-based
        directoryIds:
          description: "Directory Identifiers. Get via [List Directories](#operation/api.projects.directories.getMany)\n\n__Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously"
          type: array
          items:
            type: integer
            example: 2401
          x-doc-sections:
            - file-based
        branchIds:
          description: "Branch Identifiers. Get via [List Branches](#operation/api.projects.branches.getMany)\n\n__Note:__ One of fields `fileIds`, `directoryIds` or `branchIds` is required. They cannot be provided simultaneously"
          type: array
          items:
            type: integer
            example: 2401
          x-doc-sections:
            - file-based
        title:
          description: 'Task title'
          type: string
        languageId:
          description: 'Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: es
        type:
          description: "Task type:\n * 2 - translate by vendor\n * 3 - proofread by vendor"
          type: integer
          enum:
            - 2
            - 3
        vendor:
          description: "Vendor identifier. Built-in vendors: `crowdin_language_service`, `oht`, `gengo`, `undertow`. For any other vendor, use its identifier from [Crowdin Store](https://crowdin.com/store/vendors).\n\n__Note:__ Additional vendor-specific settings (e.g. expertise, tone, quality) are configured per vendor in the store."
          type: string
          example: crowdin_language_service
        labelIds:
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
        labelMatchRule:
          description: "Match rule for labels:\n- \"all\" - all labels must be present in string\n- \"any\" - any of the labels must be present in string\n\n__Note:__ Can only be used when `labelIds` parameter is provided"
          type: string
          default: all
          enum:
            - all
            - any
          nullable: true
        excludeLabelIds:
          description: 'Label Identifiers to exclude. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 12
        excludeLabelMatchRule:
          description: "Match rule for excluded labels:\n- \"all\" - all labels must be present in string\n- \"any\" - any of the labels must be present in string\n\n__Note:__ Can only be used when `excludeLabelIds` parameter is provided"
          type: string
          default: all
          enum:
            - all
            - any
          nullable: true
        status:
          description: 'Task status'
          type: string
          default: todo
          enum:
            - todo
            - in_progress
        description:
          description: 'Task description'
          type: string
        includePreTranslatedStringsOnly:
          description: 'Defines whether to include only pretranslated strings'
          type: boolean
          default: false
          example: true
        skipAssignedStrings:
          description: "Skip strings already included in other tasks.\n\n__Note:__ Not supported by all vendors. Verify with your vendor."
          type: boolean
          default: false
          example: true
        deadline:
          description: "Defines task deadline date.\n\n__Format:__ UTC, ISO 8601\n\n__Note:__ Not supported by all vendors. Verify with your vendor."
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        dateFrom:
          description: "Defines start date for interval when strings were modified\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: "Defines end date for interval when strings were modified\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        translationsUpdatedDateFrom:
          description: "Defines start date for interval when translations were updated. For proofread tasks only.\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        translationsUpdatedDateTo:
          description: "Defines end date for interval when translations were updated. For proofread tasks only.\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        generateCostEstimate:
          description: 'Generate cost estimate report for the task. Requires `reportSettingsTemplateId`'
          type: boolean
          default: false
          example: false
        generateTranslationCost:
          description: 'Generate translation cost report for the task. Requires `reportSettingsTemplateId`'
          type: boolean
          default: false
          example: false
        reportSettingsTemplateId:
          description: 'Report Settings Templates Identifier. Get via [List Report Settings Templates](#operation/api.projects.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`'
          type: integer
          example: 1
          nullable: true
      type: object
    CrowdinVendorTaskByStringIds:
      title: 'Create By String Ids Form'
      description: 'Contains common fields shared across all vendors. Additional vendor-specific settings (e.g. expertise, tone, quality) depend on the selected vendor and are available at [Crowdin Store](https://crowdin.com/store/vendors).'
      required:
        - title
        - languageId
        - type
        - vendor
        - stringIds
      properties:
        stringIds:
          description: 'Task String Identifiers. Get via [List Strings](#operation/api.projects.strings.getMany)'
          type: array
          items:
            type: integer
            example: 2401
        title:
          description: 'Task title'
          type: string
        languageId:
          description: 'Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: es
        type:
          description: "Task type:\n * 2 - translate by vendor\n * 3 - proofread by vendor"
          type: integer
          enum:
            - 2
            - 3
        vendor:
          description: "Vendor identifier. Built-in vendors: `crowdin_language_service`, `oht`, `gengo`, `undertow`. For any other vendor, use its identifier from [Crowdin Store](https://crowdin.com/store/vendors).\n\n__Note:__ Additional vendor-specific settings (e.g. expertise, tone, quality) are configured per vendor in the store."
          type: string
          example: crowdin_language_service
        labelIds:
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
        labelMatchRule:
          description: "Match rule for labels:\n- \"all\" - all labels must be present in string\n- \"any\" - any of the labels must be present in string\n\n__Note:__ Can only be used when `labelIds` parameter is provided"
          type: string
          default: all
          enum:
            - all
            - any
          nullable: true
        excludeLabelIds:
          description: 'Label Identifiers to exclude. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 12
        excludeLabelMatchRule:
          description: "Match rule for excluded labels:\n- \"all\" - all labels must be present in string\n- \"any\" - any of the labels must be present in string\n\n__Note:__ Can only be used when `excludeLabelIds` parameter is provided"
          type: string
          default: all
          enum:
            - all
            - any
          nullable: true
        status:
          description: 'Task status'
          type: string
          default: todo
          enum:
            - todo
            - in_progress
        description:
          description: 'Task description'
          type: string
        includePreTranslatedStringsOnly:
          description: 'Defines whether to include only pretranslated strings'
          type: boolean
          default: false
          example: true
        skipAssignedStrings:
          description: "Skip strings already included in other tasks.\n\n__Note:__ Not supported by all vendors. Verify with your vendor."
          type: boolean
          default: false
          example: true
        deadline:
          description: "Defines task deadline date.\n\n__Format:__ UTC, ISO 8601\n\n__Note:__ Not supported by all vendors. Verify with your vendor."
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        dateFrom:
          description: "Defines start date for interval when strings were modified\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        dateTo:
          description: "Defines end date for interval when strings were modified\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        translationsUpdatedDateFrom:
          description: "Defines start date for interval when translations were updated. For proofread tasks only.\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-23T07:00:14+00:00'
        translationsUpdatedDateTo:
          description: "Defines end date for interval when translations were updated. For proofread tasks only.\n\n__Format:__ UTC, ISO 8601"
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        generateCostEstimate:
          description: 'Generate cost estimate report for the task. Requires `reportSettingsTemplateId`'
          type: boolean
          default: false
          example: false
        generateTranslationCost:
          description: 'Generate translation cost report for the task. Requires `reportSettingsTemplateId`'
          type: boolean
          default: false
          example: false
        reportSettingsTemplateId:
          description: 'Report Settings Templates Identifier. Get via [List Report Settings Templates](#operation/api.projects.reports.settings-templates.getMany). Required when `generateCostEstimate` or `generateTranslationCost` is `true`'
          type: integer
          example: 1
          nullable: true
      type: object
    CrowdinOrganizationTaskCollectionForm:
      description: 'Query parameters for listing organization tasks (Crowdin)'
      properties:
        orderBy:
          description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
          type: string
          example: 'createdAt desc,title'
        offset:
          description: 'Starting offset in the collection'
          type: integer
          minimum: 0
          example: 0
        limit:
          description: 'Maximum number of items to return'
          type: integer
          minimum: 1
          example: 25
        status:
          description: 'Filter by task status. It can be one status or a list of comma-separated status values'
          type: string
          example: 'todo,in_progress'
        type:
          description: 'Filter by task type. It can be one type or a list of comma-separated type values'
          type: string
          example: '1,2'
        projectIds:
          description: 'Filter by project IDs. It can be one ID or a list of comma-separated ID values. Cannot be used together with groupIds'
          type: string
          example: '1,2,3'
        assigneeIds:
          description: 'Filter by assignee user IDs. It can be one ID or a list of comma-separated ID values'
          type: string
          example: '10,20'
        creatorIds:
          description: 'Filter by creator user IDs. It can be one ID or a list of comma-separated ID values'
          type: string
          example: '5,15'
        targetLanguageIds:
          description: 'Filter by target language IDs. It can be one ID or a list of comma-separated ID values'
          type: string
          example: 'uk,fr,de'
        sourceLanguageIds:
          description: 'Filter by source language IDs. It can be one ID or a list of comma-separated ID values'
          type: string
          example: en
        createdAtFrom:
          description: 'Filter tasks created from this date (ISO 8601)'
          type: string
          format: date-time
          example: '2024-01-01T00:00:00Z'
        createdAtTo:
          description: 'Filter tasks created until this date (ISO 8601)'
          type: string
          format: date-time
          example: '2024-12-31T23:59:59Z'
        deadlineFrom:
          description: 'Filter tasks with deadline from this date (ISO 8601)'
          type: string
          format: date-time
          example: '2024-01-01T00:00:00Z'
        deadlineTo:
          description: 'Filter tasks with deadline until this date (ISO 8601)'
          type: string
          format: date-time
          example: '2024-12-31T23:59:59Z'
      type: object
    EnterpriseOrganizationTaskCollectionForm:
      description: 'Query parameters for listing organization tasks (Enterprise)'
      allOf:
        -
          $ref: '#/components/schemas/CrowdinOrganizationTaskCollectionForm'
        -
          properties:
            groupIds:
              description: 'Filter by group IDs. It can be one ID or a list of comma-separated ID values. Cannot be used together with projectIds. Enterprise only'
              type: string
              example: '10,20'
          type: object
    TaskSettingsTemplateCreateForm:
      title: 'Task settings template'
      required:
        - name
        - config
      properties:
        name:
          description: 'Template name'
          type: string
          example: 'Default template'
        config:
          description: 'Defines task config'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/task-settings-template.config'
      type: object
    EnterpriseTaskSettingsTemplateCreateForm:
      title: 'Task settings template'
      required:
        - name
        - config
      properties:
        name:
          description: 'Template name'
          type: string
          example: 'Default template'
        config:
          description: 'Defines task config'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/enterprise-task-settings-template.config'
      type: object
    TaskCommentCreateForm:
      title: 'Task comment'
      properties:
        text:
          description: 'Text comment'
          type: string
          example: 'Work in task'
        timeSpent:
          description: 'Specifies the time spent on the task in seconds.'
          type: integer
          example: 3600
      type: object
    CrowdinFileBasedTaskCollectionResource:
      description: 'Task Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinFileBasedTaskResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinFileBasedTaskResource:
      description: 'Task Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinTask'
    CrowdinStringBasedTaskCollectionResource:
      description: 'Task Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinStringBasedTaskResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinStringBasedTaskResource:
      description: 'String Based Task Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinStringBasedTask'
    CrowdinTaskCollectionResource:
      description: 'Task Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinFileBasedTaskResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
      x-doc-sections:
        - file-based
    CrowdinUserFileBasedTaskResource:
      description: 'User Task Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinUserFileBasedTask'
    CrowdinUserStringBasedTaskResource:
      description: 'User Task Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinUserStringBasedTask'
    CrowdinUserTaskCollectionResource:
      description: 'Task Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinUserFileBasedTaskResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
      x-doc-sections:
        - file-based
    TaskSettingsTemplateCollectionResource:
      description: 'Task Settings Template Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TaskSettingsTemplateResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    EnterpriseTaskSettingsTemplateCollectionResource:
      description: 'Task Settings Template Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/EnterpriseTaskSettingsTemplateResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TaskSettingsTemplateResource:
      description: 'Task Settings Template Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TaskSettingsTemplate'
    EnterpriseTaskSettingsTemplateResource:
      description: 'Task Settings Template Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/EnterpriseTaskSettingsTemplate'
    TaskCommentCollectionResource:
      description: 'Task Comment Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TaskCommentResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TaskCommentResource:
      description: 'Task Statistic Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TaskComment'
    TaskStatisticCollectionResource:
      description: 'Task Statistic Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TaskStatisticResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TaskStatisticResource:
      description: 'Task Statistic Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TaskStatistic'
    TaskTranslateProgress:
      description: 'Is set for some type of vendor tasks, nullable otherwise'
      type: object
      deprecated: true
      allOf:
        -
          $ref: '#/components/schemas/TaskProgress'
    EstimatedTaskCost:
      type: object
      nullable: true
      allOf:
        -
          $ref: '#/components/schemas/TaskCost'
    ActualTaskCost:
      type: object
      nullable: true
      allOf:
        -
          $ref: '#/components/schemas/TaskCost'
    Task:
      title: Task
      properties:
        id:
          type: integer
          example: 2
        projectId:
          type: integer
          example: 2
        creatorId:
          type: integer
          example: 6
        type:
          type: integer
          example: 1
        status:
          type: string
          enum:
            - todo
            - in_progress
            - done
            - closed
          example: todo
        title:
          type: string
          example: French
        batchId:
          type: integer
          example: 1
        assignees:
          type: array
          items:
            $ref: '#/components/schemas/TaskAssignee'
        assignedTeams:
          type: array
          items:
            $ref: '#/components/schemas/TaskAssignedTeam'
        progress:
          $ref: '#/components/schemas/TaskProgress'
        translateProgress:
          $ref: '#/components/schemas/TaskTranslateProgress'
        sourceLanguageId:
          type: string
          example: en
        targetLanguageId:
          type: string
          example: fr
        description:
          example: 'Proofread all French strings'
        translationUrl:
          type: string
          example: '/proofread/9092638ac9f2a2d1b5571d08edc53763/all/en-fr/10?task=dac37aff364d83899128e68afe0de4994'
        webUrl:
          type: string
          example: 'https://crowdin.com/project/example-project/tasks/1'
        wordsCount:
          description: 'Number of words currently in the task'
          type: integer
          example: 24
        originalWordsCount:
          description: 'Number of words when the task was created. Preserved when source strings are later removed.'
          type: integer
          example: 24
        commentsCount:
          type: integer
          example: 0
        deadline:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        startedAt:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        resolvedAt:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-27T07:00:14+00:00'
        timeRange:
          type: string
          example: '2019-08-23T09:04:29+00:00|2019-07-23T09:04:29+00:00'
        translationsUpdatedTimeRange:
          type: string
          example: '2025-06-23T09:04:29+00:00|2025-08-23T09:04:29+00:00'
        workflowStepId:
          type: integer
          example: 10
        buyUrl:
          type: string
          example: 'https://www.paypal.com/cgi-bin/webscr?cmd=...'
        createdAt:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-23T09:04:29+00:00'
        updatedAt:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-23T09:04:29+00:00'
        sourceLanguage:
          $ref: '#/components/schemas/Language'
        targetLanguages:
          type: array
          items:
            $ref: '#/components/schemas/Language'
        labelIds:
          type: array
          items:
            type: integer
          example:
            - 13
            - 27
        labelMatchRule:
          type: string
          enum:
            - all
            - any
          nullable: true
        excludeLabelIds:
          type: array
          items:
            type: integer
          example:
            - 5
            - 8
        excludeLabelMatchRule:
          type: string
          enum:
            - all
            - any
          nullable: true
        precedingTaskId:
          type: integer
          example: 1
        estimatedCost:
          $ref: '#/components/schemas/EstimatedTaskCost'
        actualCost:
          $ref: '#/components/schemas/ActualTaskCost'
        generateCostEstimate:
          type: boolean
          example: true
          nullable: true
        generateTranslationCost:
          type: boolean
          example: true
          nullable: true
        reportSettingsTemplateId:
          type: integer
          example: 1
          nullable: true
      type: object
    UserTask:
      title: 'User Task'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Task'
        -
          properties:
            isArchived:
              type: boolean
              example: false
    TaskAssignedTeam:
      properties:
        id:
          type: integer
          example: 1
        wordsCount:
          type: integer
          example: 5
        timeSpent:
          type: integer
          example: 3600
      type: object
    TaskAssignee:
      properties:
        id:
          type: integer
          example: 12
        username:
          type: string
          example: john_smith
        fullName:
          type: string
          example: 'John Smith'
        avatarUrl:
          type: string
          example: ''
        wordsCount:
          type: integer
          example: 5
        wordsLeft:
          type: integer
          example: 3
        timeSpent:
          type: integer
          example: 3600
      type: object
    TaskCost:
      properties:
        cost:
          type: number
          format: float
          example: '24.12'
        date:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-23T09:04:29+00:00'
        currency:
          type: string
          enum:
            - USD
            - EUR
            - JPY
            - GBP
            - AUD
            - CAD
            - CHF
            - CNY
            - SEK
            - NZD
            - MXN
            - SGD
            - HKD
            - NOK
            - KRW
            - TRY
            - RUB
            - INR
            - BRL
            - ZAR
            - GEL
            - UAH
            - DDK
            - PLN
          example: USD
      type: object
    CrowdinTask:
      title: Task
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Task'
        -
          $ref: '#/components/schemas/Task'
        -
          properties:
            vendor:
              type: string
              example: gengo
            filesCount:
              type: integer
              example: 3
            fileIds:
              type: array
              items:
                type: integer
              example:
                - 24
                - 25
                - 38
    CrowdinStringBasedTask:
      title: Task
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Task'
        -
          $ref: '#/components/schemas/Task'
        -
          properties:
            vendor:
              type: string
              example: gengo
            branchIds:
              type: array
              items:
                type: integer
              example:
                - 24
                - 25
                - 38
    CrowdinUserFileBasedTask:
      title: 'User Task'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/UserTask'
        -
          $ref: '#/components/schemas/UserTask'
        -
          properties:
            vendor:
              type: string
              example: gengo
            filesCount:
              type: integer
              example: 3
            fileIds:
              type: array
              items:
                type: integer
              example:
                - 24
                - 25
                - 38
    CrowdinUserStringBasedTask:
      title: 'User Task'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/UserTask'
        -
          $ref: '#/components/schemas/UserTask'
        -
          properties:
            vendor:
              type: string
              example: gengo
            branchIds:
              type: array
              items:
                type: integer
              example:
                - 24
                - 25
                - 38
    TaskProgress:
      properties:
        total:
          type: integer
          example: 24
        done:
          type: integer
          example: 15
        percent:
          type: integer
          example: 62
      type: object
    TaskSettingsTemplate:
      title: 'Task settings template'
      properties:
        id:
          type: integer
          example: 1
        name:
          description: 'Template name'
          type: string
          example: 'Default template'
        config:
          $ref: '#/components/schemas/task-settings-template.config'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
          nullable: true
      type: object
    EnterpriseTaskSettingsTemplate:
      title: 'Task settings template'
      properties:
        id:
          type: integer
          example: 1
        name:
          description: 'Template name'
          type: string
          example: 'Default template'
        config:
          $ref: '#/components/schemas/enterprise-task-settings-template.config'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
          nullable: true
      type: object
    task-settings-template.config:
      required:
        - languages
      properties:
        languages:
          type: array
          items:
            $ref: '#/components/schemas/task-settings-template.language-data'
      type: object
    task-settings-template.language-data:
      properties:
        languageId:
          description: 'Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: uk
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: 1
      type: object
    enterprise-task-settings-template.config:
      required:
        - languages
      properties:
        languages:
          type: array
          items:
            $ref: '#/components/schemas/enterprise-task-settings-template.language-data'
      type: object
    enterprise-task-settings-template.language-data:
      properties:
        languageId:
          description: 'Task Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: uk
        userIds:
          description: 'Array of user ids'
          type: array
          items:
            type: integer
            example: 1
        teamIds:
          description: 'Team Identifiers. Get via [List Teams](#operation/api.teams.getMany)'
          type: array
          items:
            type: integer
            example: 1
      type: object
    TaskComment:
      title: 'Task Comment'
      description: 'Task Comment Response Model'
      properties:
        id:
          type: integer
          example: 1233
        userId:
          type: integer
          example: 5
        taskId:
          type: integer
          example: 203
        text:
          type: string
          example: 'translate task'
        timeSpent:
          type: integer
          example: 3600
          nullable: true
        createdAt:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-23T09:04:29+00:00'
        updatedAt:
          description: 'in UTC'
          type: string
          format: date-time
          example: '2019-09-23T09:04:29+00:00'
      type: object
    TaskStatistic:
      title: 'Task Statistic'
      description: 'Task Statistic Response Model'
      properties:
        total:
          example: 5
        languageId:
          type: string
          example: uk
      type: object
    TermPatch:
      description: 'A JSON Patch document as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-3)'
      type: array
      items:
        $ref: '#/components/schemas/TermOperation'
    TermOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by [RFC 6901](https://tools.ietf.org/html/rfc6901)'
          type: string
          format: json-pointer
          enum:
            - /text
            - /description
            - /partOfSpeech
            - /status
            - /type
            - /gender
            - /url
            - /note
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/TermOperationReplace'
          test: '#/components/schemas/TermOperationTest'
    TermOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TermOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    TermOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TermOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    TermCreateForm:
      required:
        - languageId
        - text
      properties:
        languageId:
          description: 'Term Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: fr
        text:
          description: Term
          type: string
          example: Voir
        description:
          description: 'Term description'
          type: string
          example: 'use for pages only (check screenshots)'
        partOfSpeech:
          description: 'Term part of speech'
          type: string
          enum:
            - adjective
            - adposition
            - adverb
            - auxiliary
            - 'coordinating conjunction'
            - determiner
            - interjection
            - noun
            - numeral
            - particle
            - pronoun
            - 'proper noun'
            - 'subordinating conjunction'
            - verb
            - other
          example: verb
        status:
          description: 'Term status'
          type: string
          enum:
            - preferred
            - admitted
            - 'not recommended'
            - obsolete
            - draft
          example: preferred
        type:
          description: 'Term type'
          type: string
          enum:
            - 'full form'
            - acronym
            - abbreviation
            - 'short form'
            - phrase
            - variant
          example: abbreviation
        gender:
          description: Gender
          type: string
          enum:
            - masculine
            - feminine
            - neuter
            - other
          example: masculine
        note:
          description: 'Any kind of note, such as a usage note, explanation, or instruction'
          type: string
        url:
          description: 'Base URL'
          type: string
        conceptId:
          description: 'Defines whether to add translation to the existing term. Get `concept_id` via [List Terms](#operation/api.glossaries.terms.getMany) or via [List Concepts](#operation/api.glossaries.concepts.getMany)'
          type: integer
        translationOfTermId:
          description: 'Defines whether to add translation to the existing term. Get `id` via [List Terms](#operation/api.glossaries.terms.getMany)'
          type: integer
          deprecated: true
      type: object
    CrowdinTermCollectionResource:
      description: 'Term Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinTermResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinTermResource:
      description: 'Term Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Term'
    Term:
      title: Term
      properties:
        id:
          type: integer
          example: 2
        userId:
          type: integer
          example: 6
        glossaryId:
          type: integer
          example: 6
        languageId:
          type: string
          example: fr
        text:
          type: string
          example: Voir
        description:
          type: string
          example: 'use for pages only (check screenshots)'
        partOfSpeech:
          type: string
          example: verb
        status:
          type: string
          example: preferred
        type:
          type: string
          example: abbreviation
        gender:
          type: string
          example: masculine
        note:
          type: string
          example: 'Any kind of note, such as a usage note, explanation, or instruction'
        url:
          type: string
          example: 'Base URL'
        conceptId:
          type: integer
          example: 6
        lemma:
          type: string
          example: voir
        createdAt:
          description: 'UTC timezone'
          type: string
          format: date-time
          example: '2019-09-23T07:19:47+00:00'
        updatedAt:
          description: 'UTC timezone'
          type: string
          format: date-time
          example: '2019-09-23T07:19:47+00:00'
      type: object
    TmPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/TmOperation'
    TmOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /languageId
            - /isShared
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/TmOperationReplace'
          test: '#/components/schemas/TmOperationTest'
    TmOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TmOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
    TmOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TmOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
                -
                  type: boolean
    TmSegmentMassOperationAdd:
      description: 'A JSON Patch `Add` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.1)'
      required:
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - add
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /-
        value:
          $ref: '#/components/schemas/TmSegmentCreateForm'
      type: object
    TmSegmentMassOperationAddRecord:
      description: 'A JSON Patch `Add` operation that appends a new record (translation in a previously absent language) to an existing TM segment'
      required:
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - add
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - '/{segmentId}/records/-'
        value:
          properties:
            languageId:
              description: 'Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
              type: string
              example: it
            text:
              type: string
              example: 'Ciao, mondo!'
          type: object
      type: object
    TmSegmentMassOperationRemove:
      description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.2)'
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - remove
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - '/{segmentId}'
      type: object
    TmSegmentMassOperationRemoveRecord:
      description: 'A JSON Patch `Remove` operation that deletes a single record (translation in a specific language) from an existing TM segment'
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - remove
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - '/{segmentId}/records/{recordId}'
      type: object
    TmSegmentMassOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - '/{segmentId}/records/{recordId}/text'
        value:
          type: string
          example: 'Testo tradotto'
      type: object
    TmSegmentPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/TmSegmentOperation'
    TmSegmentOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - add
            - replace
            - remove
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /records/-
            - '/records/{recordId}/text'
            - '/records/{recordId}'
      type: object
      discriminator:
        propertyName: op
        mapping:
          add: '#/components/schemas/TmSegmentRecordOperationAdd'
          replace: '#/components/schemas/TmSegmentRecordOperationReplace'
          remove: '#/components/schemas/TmSegmentRecordOperationRemove'
    TmSegmentRecordOperationAdd:
      description: 'A JSON Patch `Add` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.1). Adds a record with a translation in a language the segment does not have yet'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TmSegmentOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - /records/-
            value:
              properties:
                text:
                  type: string
                  example: 'Перекладений текст'
                languageId:
                  description: 'Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
                  type: string
                  example: uk
              type: object
    TmSegmentRecordOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3). Updates the text of an existing record'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TmSegmentOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - '/records/{recordId}/text'
            value:
              type: string
              example: 'Перекладений текст'
    TmSegmentRecordOperationRemove:
      description: 'A JSON Patch `Remove` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.2). Deletes a record from the segment. The segment itself is deleted with its last record'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TmSegmentOperation'
        -
          properties:
            path:
              description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
              type: string
              format: json-pointer
              enum:
                - '/records/{recordId}'
    TmSegmentRecordPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/TmSegmentRecordOperation'
    TmSegmentRecordOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
        - value
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /text
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/TmSegmentRecordOperationReplaceFromDiscriminator'
    TmSegmentRecordOperationReplaceFromDiscriminator:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TmSegmentRecordOperation'
        -
          properties:
            value:
              type: string
              example: 'some text'
    TmConcordanceForm:
      required:
        - sourceLanguageId
        - targetLanguageId
        - autoSubstitution
        - minRelevant
        - expressions
      properties:
        sourceLanguageId:
          description: 'Source Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: de
        autoSubstitution:
          description: 'Improves TM suggestions'
          type: boolean
        minRelevant:
          description: 'Show TM suggestions with specified minimum match'
          type: integer
          example: 60
        expressions:
          description: "Expressions to search\n\n__Note:__ Can't be used with `expression` in same request"
          type: array
          items:
            type: string
          example:
            - Welcome!
            - 'Save as...'
            - View
            - About...
        expression:
          description: "Expression to search\n\n__Note:__ Can't be used with `expressions` in same request"
          type: string
          example: Welcome!
          deprecated: true
      type: object
    CrowdinOrganizationTmConcordanceForm:
      allOf:
        -
          $ref: '#/components/schemas/OrganizationTmConcordanceForm'
        -
          properties:
            userId:
              description: 'Owner (user) whose translation memories to search. Only translation memories you own or manage are searched. Defaults to your own account.'
              type: integer
              nullable: true
          type: object
    CrowdinTmCreateForm:
      required:
        - name
        - languageId
      properties:
        name:
          description: 'Translation Memory name'
          type: string
          example: "Knowledge Base's TM"
        languageId:
          description: 'Translation Memory Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: fr
        isShared:
          description: 'Whether TM should be shared to all projects within the account'
          type: boolean
          example: false
      type: object
    OrganizationTmConcordanceForm:
      required:
        - sourceLanguageId
        - targetLanguageId
        - autoSubstitution
        - minRelevant
        - expressions
      properties:
        sourceLanguageId:
          description: 'Source Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        targetLanguageId:
          description: 'Target Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: de
        autoSubstitution:
          description: 'Improves TM suggestions'
          type: boolean
        minRelevant:
          description: 'Show TM suggestions with specified minimum match'
          type: integer
          example: 60
        expressions:
          description: 'Expressions to search'
          type: array
          items:
            type: string
          example:
            - Welcome!
            - 'Save as...'
            - View
            - About...
      type: object
    TmExportForm:
      properties:
        sourceLanguageId:
          description: 'Defines Source Language in language pair. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: en
        targetLanguageId:
          description: 'Defines Target Language in language pair. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: de
        format:
          description: 'Defines TMs file format'
          type: string
          default: tmx
          enum:
            - tmx
            - csv
            - xlsx
      type: object
    TmLanguageCodeColumnCode:
      properties:
        columnNumber:
          type: integer
      type: object
    TmLanguageScheme:
      title: 'Tm Schema'
      description: "Defines data columns mapping. The passed value should be an associative array containing both language id and column number:\n* `{languageId}` – Crowdin id for the specified language. Get via [List Supported Languages](#operation/api.languages.getMany)\n* `{columnNumber}` – a column number. Please note, that column numbering starts at 0\n\n__Note:__ Required for CSV or XLS/XLSX files"
      type: object
      example:
        en: 0
        de: 1
        pl: 2
        uk: 4
      additionalProperties:
        $ref: '#/components/schemas/TmLanguageCodeColumnCode'
    TmUploadForm:
      required:
        - storageId
      properties:
        storageId:
          description: "Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)\n\nSupported file formats:\n* TMX\n* CSV\n* XLS/XLSX\n\nSee TMX 1.4b Specification"
          type: integer
          format: int64
        firstLineContainsHeader:
          description: "Defines whether file includes first row header that should not be imported\n\n__Note:__ Used for upload of CSV or XLS/XLSX files only"
          type: boolean
          default: false
        scheme:
          $ref: '#/components/schemas/TmLanguageScheme'
      type: object
    TmSegmentCreateForm:
      required:
        - records
      properties:
        records:
          type: array
          items:
            properties:
              languageId:
                description: 'Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
                type: string
                example: uk
              text:
                description: 'Record text'
                type: string
                example: 'Перекладений текст'
            type: object
      type: object
    CrowdinTmCollectionResource:
      description: 'Tm Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinTmResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinTmResource:
      description: 'Tm Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Tm'
    TmConcordanceResultCollectionResource:
      description: 'TM Concordance Result Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TmConcordanceResultResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TmConcordanceResultResource:
      description: 'TM Concordance Result Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TmConcordanceResult'
    TmExportResource:
      description: 'Tm Export Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TmExport'
    TmImportResource:
      description: 'Tm Import Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TmImport'
    TmSegmentCollectionResource:
      description: 'Tm Segment Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TmSegmentResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    TmSegmentResource:
      description: 'Tm Segment Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TmSegment'
    TmSegmentUpdatedCollectionResource:
      description: 'Tm Segment Updated Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/TmSegmentResource'
    Tm:
      title: Tm
      properties:
        id:
          type: integer
          example: 4
        userId:
          type: integer
          example: 2
          nullable: true
        name:
          type: string
          example: "Knowledge Base's TM"
        languageId:
          type: string
          example: fr
          nullable: true
        languageIds:
          type: array
          items:
            type: string
            example: el
          nullable: true
        segmentsCount:
          description: 'Translation units count'
          type: integer
          example: 21
        defaultProjectIds:
          type: array
          items:
            type: integer
            example: 2
        projectIds:
          type: array
          items:
            type: integer
            example: 2
          nullable: true
        isShared:
          description: 'Whether TM should be shared to all projects within the account'
          type: boolean
          example: false
        webUrl:
          type: string
          example: 'https://crowdin.com/profile/username/resources/traslation-memory/1'
        createdAt:
          type: string
          format: date-time
          example: '2019-09-16T13:42:04+00:00'
          nullable: true
      type: object
    TmConcordance:
      title: Tm
      properties:
        id:
          type: integer
          example: 4
        name:
          type: string
          example: "Knowledge Base's TM"
      type: object
    TmConcordanceResult:
      title: 'TM Concordance Result'
      properties:
        tm:
          type: object
          allOf:
            -
              $ref: '#/components/schemas/TmConcordance'
        recordId:
          type: integer
          example: 34
        source:
          type: string
          example: Welcome!
        target:
          type: string
          example: 'Ласкаво просимо!'
        relevant:
          type: integer
          example: 100
        substituted:
          type: string
          example: 62→100
          nullable: true
        updatedAt:
          type: string
          format: date-time
          example: '2022-09-28T12:29:34+00:00'
          nullable: true
      type: object
    TmExport:
      properties:
        identifier:
          type: string
          example: 50fb3506-4127-4ba8-8296-f97dc7e3e0c3
        status:
          type: string
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        attributes:
          properties:
            sourceLanguageId:
              type: string
              example: en
            targetLanguageId:
              type: string
              example: de
            format:
              type: string
              example: csv
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:26:54+00:00'
          nullable: true
      type: object
    TmImport:
      properties:
        identifier:
          type: string
          example: b5215a34-1305-4b21-8054-fc2eb252842f
        status:
          type: string
          example: created
        progress:
          description: 'in percentages'
          type: integer
          example: 0
        attributes:
          properties:
            tmId:
              type: integer
              example: 10
            storageId:
              type: integer
              format: int64
              example: 28
            firstLineContainsHeader:
              type: boolean
              example: true
              nullable: true
            scheme:
              properties:
                en:
                  type: integer
                  example: 0
                de:
                  type: integer
                  example: 2
              type: object
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T11:51:08+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:51:08+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2019-09-23T11:51:08+00:00'
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: null
          nullable: true
      type: object
    TmSegment:
      title: 'Tm Segment'
      properties:
        id:
          description: 'Segment Identifier'
          type: integer
          example: 4
        records:
          description: 'Segment Records'
          allOf:
            -
              $ref: '#/components/schemas/TmSegmentRecord'
      type: object
    CrowdinFileBuildForm:
      required:
        - targetLanguageId
      properties:
        targetLanguageId:
          description: 'Target Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
          type: string
          example: uk
        exportAsXliff:
          description: "Use [Export Project Translation](#operation/api.projects.translations.exports.post) instead.\n\n * Defines whether to export file in XLIFF format"
          type: boolean
          default: false
          example: false
          deprecated: true
        skipUntranslatedStrings:
          description: "Defines whether to export only translated strings\n\n__Note:__ `true` value can't be used with `skipUntranslatedFiles=true` in same request\n\n [More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
        skipUntranslatedFiles:
          description: "Defines whether to export only translated file\n\n__Note:__ `true` value can't be used with `skipUntranslatedStrings=true` in same request\n\n [More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
        exportApprovedOnly:
          description: "Defines whether to export only approved strings\n\n [More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
      type: object
    CrowdinTranslationCreateDirectoryBuildForm:
      properties:
        targetLanguageIds:
          description: "Specify target languages for build. Get via [List Supported Languages](#operation/api.languages.getMany)\n\nLeave this field empty to build all target languages"
          type: array
          items:
            type: string
            example: uk
        skipUntranslatedStrings:
          description: "Defines whether to export only translated strings\n\n__Note:__ `true` value can't be used with `skipUntranslatedFiles=true` in same request\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
        skipUntranslatedFiles:
          description: "Defines whether to export only translated file\n\n__Note:__ `true` value can't be used with `skipUntranslatedStrings=true` in same request\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
        exportApprovedOnly:
          description: "Defines whether to export only approved strings\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
        preserveFolderHierarchy:
          description: 'Preserve folder hierarchy'
          type: boolean
          default: false
          example: false
      type: object
    CrowdinTranslationCreateProjectBuildForm:
      properties:
        branchId:
          description: 'Branch Identifier. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: integer
          example: 2
        targetLanguageIds:
          description: "Specify target languages for build. Get via [List Supported Languages](#operation/api.languages.getMany)\n\n * Leave this field empty to build all target languages"
          type: array
          items:
            type: string
            example: uk
        skipUntranslatedStrings:
          description: "Defines whether to export only translated strings\n\n__Note:__ `true` value can't be used with `skipUntranslatedFiles=true` in same request\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          example: false
        skipUntranslatedFiles:
          description: "Defines whether to export only translated files\n\n__Note:__ `true` value can't be used with `skipUntranslatedStrings=true` in same request\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          example: false
        exportApprovedOnly:
          description: "Defines whether to export only approved strings\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          example: false
      type: object
    CrowdinTranslationExportForm:
      required:
        - targetLanguageId
      properties:
        targetLanguageId:
          description: 'Specify target language for export. Get via [List Supported Languages](#operation/api.languages.getMany)'
          type: string
          example: uk
        format:
          description: "Defines export file format. Use API Type feature specified at the corresponding file format from [Crowdin Store](https://store.crowdin.com/tags/string-exporter)\n\n__Note:__ the `format` parameter is required in all cases except when you'd like to export translations for a single file in its original format"
          type: string
          example: xliff
        labelIds:
          description: 'Label Identifiers. Get via [List Labels](#operation/api.projects.labels.getMany)'
          type: array
          items:
            type: integer
            example: 1
        branchIds:
          description: "Branch Identifiers. Get via [List Branches](#operation/api.projects.branches.getMany)\n\n__Note:__ Can't be used with `directoryIds` or `fileIds` in same request"
          type: array
          items:
            type: integer
            example: 1
        directoryIds:
          description: "Directory Identifiers. Get via [List Directories](#operation/api.projects.directories.getMany)\n\n__Note:__ Can't be used with `branchIds` or `fileIds` in same request"
          type: array
          items:
            type: integer
            example: 1
        fileIds:
          description: "File Identifiers. Get via [List Files](#operation/api.projects.files.getMany)\n\n__Note:__ Can't be used with `branchIds` or `directoryIds` in same request"
          type: array
          items:
            type: integer
            example: 1
        skipUntranslatedStrings:
          description: "Defines whether to export only translated strings\n\n__Note:__ Can't be used with `skipUntranslatedFiles` in same request\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
        skipUntranslatedFiles:
          description: "Defines whether to export only translated file\n\n__Note:__ Can't be used with `skipUntranslatedStrings` in same request\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
        exportApprovedOnly:
          description: "Defines whether to export only approved strings\n\n[More info](https://support.crowdin.com/project-settings/export/)"
          type: boolean
          default: false
          example: false
      type: object
      x-doc-sections:
        - file-based
    TranslationCreateDirectoryPseudoBuildForm:
      required:
        - pseudo
      properties:
        pseudo:
          description: 'Flag for detecting pseudo translation'
          type: boolean
        prefix:
          description: 'Add special characters at the beginning of each string to show where messages have been concatenated together.'
          type: string
        suffix:
          description: 'Add special characters at the end of each string to show where messages have been concatenated together.'
          type: string
        lengthTransformation:
          description: 'Make string larger or shorter. Acceptable values must be from -50 to 100. Default is 0.'
          type: integer
        charTransformation:
          description: 'Transforms characters to other languages. Acceptable values are: asian, cyrillic, european, arabic.'
          type: string
          enum:
            - asian
            - cyrillic
            - european
            - arabic
      type: object
    TranslationCreateProjectPseudoBuildForm:
      required:
        - pseudo
      properties:
        pseudo:
          description: 'Flag for detecting pseudo translation'
          type: boolean
        branchId:
          description: 'Branch Identifier. Get via [List Branches](#operation/api.projects.branches.getMany)'
          type: integer
          example: 2
        prefix:
          description: 'Add special characters at the beginning of each string to show where messages have been concatenated together.'
          type: string
        suffix:
          description: 'Add special characters at the end of each string to show where messages have been concatenated together.'
          type: string
        lengthTransformation:
          description: 'Make string larger or shorter. Acceptable values must be from -50 to 100. Default is 0.'
          type: integer
        charTransformation:
          description: 'Transforms characters to other languages. Acceptable values are: asian, cyrillic, european, arabic.'
          type: string
          enum:
            - asian
            - cyrillic
            - european
            - arabic
      type: object
    StringBasedSpreadsheetFileImportSchema:
      title: 'Spreadsheet File Import Schema for String-Based Projects'
      description: 'Defines data columns mapping. The column numbering starts at 0'
      properties:
        none:
          description: 'Defines empty column'
          type: integer
        identifier:
          description: 'Defines identifier column number'
          type: integer
        sourceOrTranslation:
          description: 'Defines source or translation column number'
          type: integer
        translation:
          description: 'Defines translation column number'
          type: integer
      type: object
      example:
        identifier: 0
        en: 2
        de: 3
      additionalProperties:
        $ref: '#/components/schemas/SpreadsheetLanguageCodeColumnNumber'
    StringBasedSpreadsheetFileImportOptions:
      title: 'Spreadsheet File Import Options'
      properties:
        scheme:
          $ref: '#/components/schemas/StringBasedSpreadsheetFileImportSchema'
      type: object
    StringBasedFileImportOptions:
      title: 'Spreadsheet File Import Options'
      properties:
        scheme:
          $ref: '#/components/schemas/StringBasedSpreadsheetFileImportSchema'
      type: object
    TranslationImportForm:
      required:
        - storageId
      properties:
        storageId:
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          type: integer
          format: int64
          example: 13
        languageIds:
          description: 'Language Identifiers. Get via [Project Target Languages](#operation/api.projects.get)'
          type: array
          items:
            type: string
          example:
            - en
        fileId:
          description: 'File Identifier for import. Get via [List Files](#operation/api.projects.files.getMany) <br> **Note:** Required for content in all formats except XLIFF'
          type: integer
          example: 2
          x-doc-sections:
            - file-based
        importEqSuggestions:
          description: "Defines whether to add translation if it's the same as the source string"
          type: boolean
          default: false
          example: true
        autoApproveImported:
          description: 'Mark uploaded translations as approved'
          type: boolean
          default: false
          example: false
        translateHidden:
          description: 'Allow translations upload to hidden source strings'
          type: boolean
          default: false
          example: false
        addToTm:
          description: 'Defines whether to add translation to TM'
          type: boolean
          default: true
          example: false
      type: object
    TranslationUploadForm:
      required:
        - storageId
      properties:
        storageId:
          description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
          type: integer
          format: int64
          example: 13
        fileId:
          description: 'File Identifier for import. Get via [List Files](#operation/api.projects.files.getMany) <br> **Note:** Required for content in all formats except XLIFF'
          type: integer
          example: 2
          x-doc-sections:
            - file-based
        importEqSuggestions:
          description: "Defines whether to add translation if it's the same as the source string"
          type: boolean
          default: false
          example: true
        autoApproveImported:
          description: 'Mark uploaded translations as approved'
          type: boolean
          default: false
          example: false
        translateHidden:
          description: 'Allow translations upload to hidden source strings'
          type: boolean
          default: false
          example: false
        addToTm:
          description: 'Defines whether to add translation to TM'
          type: boolean
          default: true
          example: false
      type: object
    CrowdinTranslationDirectoryBuildResource:
      description: 'Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinDirectoryBuildResponse'
    CrowdinTranslationProjectBuildCollectionResource:
      description: 'Project Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinTranslationProjectBuildResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinTranslationProjectBuildResource:
      description: 'Translation Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinProjectBuildResponse'
    FileBasedTranslationFileImportResource:
      description: 'Translation Import Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileBasedTranslationFileImport'
    FileBasedTranslationImportResource:
      description: 'Translation Import Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/FileBasedTranslationImport'
    StringBasedTranslationFileImportResource:
      description: 'Translation Import Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringBasedTranslationFileImport'
    StringBasedTranslationImportResource:
      description: 'Translation Import Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringBasedTranslationImport'
    TranslationImportReportResource:
      description: 'Translation Import Report Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/TranslationImportReport'
    AbstractDirectoryBuildResponseModel:
      title: 'Directory Build'
      properties:
        id:
          type: integer
          example: 2
        projectId:
          type: integer
          example: 2
        status:
          type: string
          enum:
            - created
            - inProgress
            - canceled
            - failed
            - finished
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        createdAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:43+00:00'
          nullable: true
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:46+00:00'
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:46+00:00'
          nullable: true
      type: object
    AbstractProjectBuildResponse:
      title: 'Project Build'
      properties:
        id:
          type: integer
          example: 2
        projectId:
          type: integer
          example: 2
        status:
          type: string
          enum:
            - created
            - inProgress
            - canceled
            - failed
            - finished
          example: finished
        progress:
          description: 'in percentages'
          type: integer
          example: 100
        createdAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:43+00:00'
          nullable: true
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:46+00:00'
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: '2019-09-19T15:10:46+00:00'
          nullable: true
        error:
          description: 'Only present when status is "failed"'
          properties:
            message:
              type: string
              example: 'Export failed: the exported file contains invalid data.'
          type: object
      type: object
    CrowdinDirectoryBuildResponse:
      title: 'Crowdin directory build'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AbstractDirectoryBuildResponseModel'
        -
          properties:
            attributes:
              $ref: '#/components/schemas/CrowdinDirectoryBuildAttributesResponseModel'
          type: object
        -
          $ref: '#/components/schemas/AbstractDirectoryBuildResponseModel'
    CrowdinDirectoryBuildAttributesResponseModel:
      title: 'Build Attributes'
      properties:
        directoryId:
          type: integer
          example: 1
          nullable: true
        targetLanguageIds:
          type: array
          items:
            type: string
            example: en
        skipUntranslatedStrings:
          type: boolean
          example: false
        skipUntranslatedFiles:
          type: boolean
          example: false
        exportApprovedOnly:
          type: boolean
          example: false
        preserveFolderHierarchy:
          type: boolean
          example: false
      type: object
    CrowdinProjectBuildResponse:
      title: 'Crowdin project build'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/AbstractProjectBuildResponse'
        -
          properties:
            attributes:
              oneOf:
                -
                  $ref: '#/components/schemas/CrowdinBuildAttributesResponseModel'
                -
                  $ref: '#/components/schemas/CrowdinPseudoBuildAttributesResponseModel'
          type: object
        -
          $ref: '#/components/schemas/AbstractProjectBuildResponse'
    CrowdinBuildAttributesResponseModel:
      title: 'Build Attributes'
      properties:
        branchId:
          type: integer
          example: 1
          nullable: true
        directoryId:
          type: integer
          example: 1
          nullable: true
        targetLanguageIds:
          type: array
          items:
            type: string
            example: en
        skipUntranslatedStrings:
          type: boolean
          example: false
        skipUntranslatedFiles:
          type: boolean
          example: false
        exportApprovedOnly:
          type: boolean
          example: false
      type: object
    CrowdinPseudoBuildAttributesResponseModel:
      title: 'Pseudo Build Attributes'
      properties:
        pseudo:
          type: boolean
          example: true
        prefix:
          type: string
          example: TestPrefix
        suffix:
          type: string
          example: TestSuffix
        lengthTransformation:
          type: integer
          example: 0
        charTransformation:
          type: string
          example: european
      type: object
    FileBasedTranslationFileImport:
      title: String
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TranslationFileImport'
        -
          properties:
            fileId:
              type: integer
              example: 56
            info:
              properties:
                imported:
                  properties: { strings: { type: integer, example: 10 }, words: { type: integer, example: 150 } }
                  type: object
                approved:
                  properties: { strings: { type: integer, example: 5 }, words: { type: integer, example: 75 } }
                  type: object
                skipped:
                  $ref: '#/components/schemas/SkippedInfo'
                skippedQaCheckCategories:
                  $ref: '#/components/schemas/SkippedQaCheckCategories'
              type: object
    FileBasedTranslationImport:
      title: String
      properties:
        identifier:
          type: string
          example: b5215a34-1305-4b21-8054-fc2eb252842f
        status:
          type: string
          example: created
        progress:
          description: 'in percentages'
          type: integer
          example: 0
        attributes:
          properties:
            storageId:
              description: 'Storage identifier'
              type: integer
              format: int64
              example: 13
            fileId:
              description: 'File identifier'
              type: integer
              format: int64
              example: 2
            importEqSuggestions:
              description: 'Import suggestions that equal target translation'
              type: boolean
              example: true
            autoApproveImported:
              description: 'Automatically approve imported translations'
              type: boolean
              example: false
            translateHidden:
              description: 'Translate hidden strings'
              type: boolean
              example: false
            addToTm:
              description: 'Add translations to Translation Memory'
              type: boolean
              example: false
            languageIds:
              description: 'Target language identifiers'
              type: array
              items:
                type: string
              example:
                - en
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
          nullable: true
      type: object
    StringBasedTranslationFileImport:
      title: String
      type: object
      allOf:
        -
          $ref: '#/components/schemas/TranslationFileImport'
        -
          properties:
            branchId:
              type: integer
              example: 2
    StringBasedTranslationImport:
      title: String
      properties:
        identifier:
          type: string
          example: b5215a34-1305-4b21-8054-fc2eb252842f
        status:
          type: string
          example: created
        progress:
          description: 'in percentages'
          type: integer
          example: 0
        attributes:
          properties:
            storageId:
              description: 'Storage identifier'
              type: integer
              format: int64
              example: 13
            branchId:
              description: 'File identifier'
              type: integer
              format: int64
              example: 2
            importEqSuggestions:
              description: 'Import suggestions that equal target translation'
              type: boolean
              example: true
            autoApproveImported:
              description: 'Automatically approve imported translations'
              type: boolean
              example: false
            translateHidden:
              description: 'Translate hidden strings'
              type: boolean
              example: false
            addToTm:
              description: 'Add translations to Translation Memory'
              type: boolean
              example: false
            languageIds:
              description: 'Target language identifiers'
              type: array
              items:
                type: string
              example:
                - en
          type: object
        createdAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
        startedAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
          nullable: true
        finishedAt:
          type: string
          format: date-time
          example: '2025-09-23T11:51:08+00:00'
          nullable: true
      type: object
    TranslationFileImport:
      title: String
      properties:
        projectId:
          type: integer
          example: 8
        storageId:
          type: integer
          format: int64
          example: 34
        languageId:
          type: string
          example: uk
      type: object
    TranslationImportReport:
      description: 'Translation Import Report'
      properties:
        languages:
          type: array
          items:
            properties:
              id:
                type: string
                example: fr
              files:
                type: array
                items:
                  properties: { id: { type: string, example: '10191' }, statistics: { properties: { phrases: { type: integer, example: 6 }, words: { type: integer, example: 45 } }, type: object } }
                  type: object
                nullable: true
              skipped:
                properties:
                  translationEqSource: { type: integer, example: 0 }
                  hiddenStrings: { type: integer, example: 0 }
                  qaCheck: { type: integer, example: 647 }
                type: object
              skippedQaCheckCategories:
                type: object
                example:
                  size: 1
                  duplicate: 648
                nullable: true
            type: object
          nullable: true
          x-doc-sections:
            - file-based
      type: object
    userPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/UserOperation'
    UserOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
        - value
      properties:
        value:
          type: string
          example: Smith
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /username
            - /fullName
            - /timezone
            - /avatarStorageId
          example: /fullName
      type: object
    CrowdinAddProjectMemberForm:
      properties:
        userIds:
          description: "User Identifier. Get via [List Users](#operation/api.projects.members.getMany)\n\n__Note:__ One of fields `userIds`, `usernames` or `emails` is required"
          type: array
          items:
            type: integer
            example: 1
        usernames:
          description: "User Names. Get via [List Users](#operation/api.projects.members.getMany)\n\n__Note:__ One of fields `userIds`, `usernames` or `emails` is required"
          type: array
          items:
            type: string
            example: john_smith
        emails:
          description: "User Emails.\n\n__Note:__ One of fields `userIds`, `usernames` or `emails` is required"
          type: array
          items:
            type: string
            example: john@example.com
        managerAccess:
          description: 'Grant manager access to a project'
          type: boolean
          default: false
        developerAccess:
          description: 'Grant developer access to a project'
          type: boolean
          default: false
        roles:
          description: "Array of objects. For creating user with `member` role leave this field empty\n\n__Note:__ `managerAccess`, `developerAccess` and `roles` parameters are mutually exclusive"
          type: array
          items:
            $ref: '#/components/schemas/CrowdinRolePermission'
          example:
            -
              name: translator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: true }
                  it: { allContent: true }
            -
              name: proofreader
              permissions:
                allLanguages: true
                languagesAccess: []
            -
              name: language_coordinator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: true }
                  it: { allContent: true }
        message:
          description: 'Custom message added to the invitation email'
          type: string
          example: 'Welcome to the team!'
      type: object
      anyOf:
        -
          required:
            - userIds
        -
          required:
            - usernames
        -
          required:
            - emails
    ReplaceProjectMemberForm:
      description: '__Note:__ `managerAccess`, `developerAccess` and`roles` parameters are mutually exclusive'
      properties:
        managerAccess:
          description: 'Grant manager access to a project'
          type: boolean
          default: false
        developerAccess:
          description: 'Grant developer access to a project'
          type: boolean
          default: false
        roles:
          description: 'Array of objects'
          type: array
          items:
            $ref: '#/components/schemas/CrowdinRolePermission'
          example:
            -
              name: translator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: true }
                  it: { allContent: true }
            -
              name: proofreader
              permissions:
                allLanguages: true
                languagesAccess: []
            -
              name: language_coordinator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: true }
                  it: { allContent: true }
      type: object
    CrowdinAuthenticateUserResource:
      description: 'User Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinAuthenticateUser'
    AddProjectMemberCollectionResource:
      description: 'Add Project Members List'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            skipped:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinUserResource'
            updated:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinUserResource'
            added:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinUserResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    UserCollectionResource:
      description: 'List Users'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinUserResource'
            pagination:
              type: array
              items:
                $ref: '#/components/schemas/Pagination'
    CrowdinUserResource:
      description: 'User Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinUser'
    ProjectContributionsResource:
      description: 'Project Contributions'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ProjectContributionsResponseModel'
    AddProjectTeamMemberCollectionResource:
      description: 'Add Project Team Members List'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            skipped:
              type: array
              items:
                $ref: '#/components/schemas/ProjectTeamMemberResource'
            updated:
              type: array
              items:
                $ref: '#/components/schemas/ProjectTeamMemberResource'
            added:
              type: array
              items:
                $ref: '#/components/schemas/ProjectTeamMemberResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    ProjectTeamMemberResource:
      description: 'Project Team Member Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/ProjectTeamMember'
    ProjectsContributionsCollectionResource:
      description: 'Projects Permissions List'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/ProjectContributionsResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinAuthenticateUser:
      title: User
      properties:
        id:
          description: 'User Identifier'
          type: integer
          example: 12
        username:
          type: string
          example: john_smith
        email:
          type: string
          example: jsmith@example.com
        emailVerified:
          type: boolean
          example: 'false'
        fullName:
          description: 'First Name'
          type: string
          example: 'John Smith'
          nullable: true
        avatarUrl:
          description: 'User Avatar'
          type: string
          example: ''
        createdAt:
          type: string
          format: date-time
          example: '2019-07-11T07:40:22+00:00'
        lastSeen:
          type: string
          format: date-time
          example: '2019-10-23T11:44:02+00:00'
          nullable: true
        twoFactor:
          type: string
          enum:
            - enabled
            - disabled
          example: enabled
        timezone:
          type: string
          example: Europe/Kyiv
          nullable: true
      type: object
    CrowdinUser:
      title: Member
      properties:
        id:
          description: 'Member Identifier'
          type: integer
          example: 12
        username:
          type: string
          example: john_smith
        fullName:
          description: 'First Name'
          type: string
          example: 'John Smith'
          nullable: true
        role:
          type: string
          enum:
            - owner
            - manager
            - proofreader
            - translator
            - blocked
          example: translator
        permissions:
          properties:
            uk:
              type: string
              example: translator
            it:
              type: string
              example: proofreader
            en:
              type: string
              example: denied
          type: object
        roles:
          description: 'Array of objects'
          type: array
          items:
            $ref: '#/components/schemas/CrowdinRolePermission'
          example:
            -
              name: translator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: true }
                  it: { allContent: true }
            -
              name: proofreader
              permissions:
                allLanguages: true
                languagesAccess: []
            -
              name: language_coordinator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: true }
                  it: { allContent: true }
        avatarUrl:
          description: 'Member Avatar'
          type: string
          example: ''
        joinedAt:
          type: string
          format: date-time
          example: '2019-07-11T07:40:22+00:00'
        timezone:
          type: string
          example: Europe/Kyiv
          nullable: true
      type: object
    ProjectContributionsResponseModel:
      title: String
      properties:
        id:
          type: integer
          example: 12
        translated:
          $ref: '#/components/schemas/TranslatedScheme'
        approved:
          $ref: '#/components/schemas/ApprovedScheme'
        voted:
          $ref: '#/components/schemas/VotedScheme'
        commented:
          $ref: '#/components/schemas/CommentedScheme'
        project:
          $ref: '#/components/schemas/ProjectResponse'
      type: object
    TranslatedScheme:
      title: 'Translated Scheme'
      type: object
      example:
        strings: 1
        words: 2
    ApprovedScheme:
      title: 'Approved Scheme'
      type: object
      example:
        strings: 1
        words: 2
    VotedScheme:
      title: 'Voted Scheme'
      type: object
      example:
        strings: 1
    CommentedScheme:
      title: 'Commented Scheme'
      type: object
      example:
        strings: 1
    ProjectPermissionsResponseModel:
      title: String
      properties:
        id:
          type: integer
          example: 12
        roles:
          description: 'Array of objects'
          type: array
          items:
            $ref: '#/components/schemas/RolePermission'
          example:
            -
              name: translator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: false, workflowStepIds: [882] }
                  it: { allContent: true }
            -
              name: proofreader
              permissions:
                allLanguages: true
                languagesAccess: []
            -
              name: language_coordinator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: true }
                  it: { allContent: true }
        project:
          $ref: '#/components/schemas/ProjectResponse'
      type: object
    ProjectTeamMember:
      title: String
      properties:
        id:
          description: 'User Identifier'
          type: integer
          example: 12
        username:
          type: string
          example: john_smith
        firstName:
          description: 'First Name'
          type: string
          example: John
          nullable: true
        lastName:
          description: 'Last Name'
          type: string
          example: Smith
          nullable: true
        roles:
          description: 'Array of objects'
          type: array
          items:
            $ref: '#/components/schemas/RolePermission'
          example:
            -
              name: translator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: false, workflowStepIds: [882] }
                  it: { allContent: true }
            -
              name: proofreader
              permissions:
                allLanguages: true
                languagesAccess: []
            -
              name: language_coordinator
              permissions:
                allLanguages: false
                languagesAccess:
                  uk: { allContent: true }
                  it: { allContent: true }
        isManager:
          type: boolean
          example: false
        isDeveloper:
          type: boolean
          example: false
        isAdmin:
          description: 'Whether the user is an admin of the organization'
          type: boolean
          example: false
        managerOfGroup:
          properties:
            id:
              type: integer
              example: 1
            name:
              type: string
              example: 'KB materials'
          type: object
          nullable: true
        accessToAllWorkflowSteps:
          type: boolean
          example: false
        permissions:
          properties:
            it:
              description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
              properties:
                workflowStepIds:
                  description: 'Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)'
                  type: array
                  items: { type: integer, example: 313 }
              type: object
          type: object
          nullable: true
        givenAccessAt:
          type: string
          format: date-time
          example: '2019-10-23T11:44:02+00:00'
          nullable: true
      type: object
    VendorCollectionResource:
      description: 'Vendors Collection'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/VendorResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    VendorResource:
      description: 'Vendor Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/Vendor'
    Vendor:
      title: Vendor
      description: 'Vendor Response Model'
      properties:
        id:
          type: integer
          example: 52760
        name:
          type: string
          example: 'John Smith Translation Agency'
        description:
          type: string
          example: 'John Smith Translation Agency provides services for software and game localization as well as translation into 70+ languages.'
          nullable: true
        status:
          type: string
          enum:
            - pending
            - confirmed
            - rejected
          example: pending
        webUrl:
          type: string
          example: 'https://example.crowdin.com/u/vendors/1/rates'
      type: object
    WebhookPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/WebhookOperation'
    WebhookOperation:
      description: 'A JSON Patch operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
            - test
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - /name
            - /isActive
            - /batchingEnabled
            - /contentType
            - /events
            - /headers
            - /requestType
            - /payload
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/WebhookOperationReplace'
          test: '#/components/schemas/WebhookOperationTest'
    WebhookOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/WebhookOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    WebhookOperationTest:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/WebhookOperation'
        -
          properties:
            value:
              oneOf:
                -
                  type: string
    CrowdinWebhookCreateForm:
      required:
        - name
        - url
        - events
        - requestType
      properties:
        name:
          description: 'Webhook name'
          type: string
          example: Proofread
        url:
          description: 'Webhook URL'
          type: string
          example: 'https://webhook.site/1c20d9b5-6e6a-4522-974d-9da7ea7595c9'
        events:
          description: "You can configure webhooks for the following events:\n * 'file.added' — project file is added\n * 'file.updated' - project file is updated\n * 'file.reverted' - project file is reverted\n * 'file.deleted' - project file is deleted\n * 'file.translated' — project file is fully translated\n * 'file.approved' — project file is fully reviewed\n * 'file.qa.finished' - project file QA check is finished\n * 'project.translated' — all strings in project are translated\n * 'project.approved' — all strings in project are approved\n * 'project.qa.finished' — all strings in project are QA check is finished\n * 'project.built' - project are successfully built\n * 'preTranslation.completed' - Auto-Translation finishes, fails or is canceled\n * 'translation.updated' — final translation of string is updated (using Replace in suggestions feature)\n * 'string.added' — source string is added\n * 'string.updated' — source string is updated\n * 'string.deleted' — source string is deleted\n * 'stringComment.created' - string comment/issue is added\n * 'stringComment.updated' - string comment/issue is updated\n * 'stringComment.deleted' - string comment/issue is deleted\n * 'stringComment.restored' - string comment/issue is restored\n * 'suggestion.added' — one of source strings is translated\n * 'suggestion.updated' — translation for source string is updated (using Replace in suggestions feature)\n * 'suggestion.deleted' — one of translations is deleted\n * 'suggestion.approved' — translation for string is approved\n * 'suggestion.disapproved' — approval for previously added translation is removed\n * 'task.added' - task is added\n * 'task.statusChanged' - task status was changed\n * 'task.updated' - task is updated\n * 'task.deleted' - task is deleted"
          type: array
          items:
            type: string
            enum:
              - file.added
              - file.updated
              - file.reverted
              - file.deleted
              - file.translated
              - file.approved
              - file.qa.finished
              - project.translated
              - project.approved
              - project.qa.finished
              - project.built
              - preTranslation.completed
              - translation.updated
              - string.added
              - string.updated
              - string.deleted
              - stringComment.created
              - stringComment.updated
              - stringComment.deleted
              - stringComment.restored
              - suggestion.added
              - suggestion.updated
              - suggestion.deleted
              - suggestion.approved
              - suggestion.disapproved
              - task.added
              - task.statusChanged
              - task.updated
              - task.deleted
            example: file.approved
          x-doc-sections:
            - file-based
        requestType:
          description: 'Webhook request type'
          type: string
          enum:
            - POST
            - GET
          example: POST
        isActive:
          description: 'Defines whether webhook is active'
          type: boolean
          default: true
        batchingEnabled:
          description: 'Defines whether webhook batching is enabled'
          type: boolean
          default: false
          example: true
        contentType:
          description: 'Webhook content type'
          type: string
          default: application/json
          enum:
            - multipart/form-data
            - application/json
            - application/x-www-form-urlencoded
        headers:
          description: 'Webhook headers'
          type: object
          example:
            Authorization: 'Bearer <ACCESS_TOKEN>'
        payload:
          description: 'Custom webhook payload'
          properties:
            project.created:
              description: 'Read more about [Events payload examples](https://developer.crowdin.com/webhooks). Additionally, you can check out Events payloads while creating webhooks via UI in your Crowdin profile settings > Webhooks tab > click Add webhook.'
              type: object
          type: object
          example:
            string.added:
              event: '{{event}}'
              string:
                id: '{{stringId}}'
                identifier: '{{stringIdentifier}}'
                key: '{{stringKey}}'
                text: '{{stringText}}'
                type: '{{stringType}}'
                context: '{{stringContext}}'
                maxLength: '{{stringMaxLength}}'
                isHidden: '{{stringIsHidden}}'
                isDuplicate: '{{stringIsDuplicate}}'
                masterStringId: '{{stringMasterStringId}}'
                revision: '{{stringRevision}}'
                hasPlurals: '{{stringHasPlurals}}'
                plurals: '{{stringPlurals}}'
                labelIds: '{{stringLabelIds}}'
                url: '{{stringUrl}}'
                createdAt: '{{stringCreatedAt}}'
                updatedAt: '{{stringUpdatedAt}}'
                file:
                  id: '{{fileId}}'
                  name: '{{fileName}}'
                  title: '{{fileTitle}}'
                  type: '{{fileType}}'
                  path: '{{filePath}}'
                  status: '{{fileStatus}}'
                  revision: '{{fileRevision}}'
                  branchId: '{{branchId}}'
                  directoryId: '{{directoryId}}'
                project:
                  id: '{{projectId}}'
                  userId: '{{projectUserId}}'
                  sourceLanguageId: '{{projectSourceLanguageId}}'
                  targetLanguageIds: '{{projectTargetLanguageIds}}'
                  identifier: '{{projectIdentifier}}'
                  name: '{{projectName}}'
                  createdAt: '{{projectCreatedAt}}'
                  updatedAt: '{{projectUpdatedAt}}'
                  lastActivity: '{{projectLastActivity}}'
                  description: '{{projectDescription}}'
                  url: '{{projectUrl}}'
                  cname: '{{projectCname}}'
                  logo: '{{projectLogo}}'
              user:
                id: '{{userId}}'
                username: '{{userUsername}}'
                fullName: '{{userFullName}}'
                avatarUrl: '{{userAvatarUrl}}'
      type: object
    EnterpriseWebhookCreateForm:
      required:
        - name
        - url
        - events
        - requestType
      properties:
        name:
          description: 'Webhook name'
          type: string
          example: Proofread
        url:
          description: 'Webhook URL'
          type: string
          example: 'https://webhook.site/1c20d9b5-6e6a-4522-974d-9da7ea7595c9'
        events:
          description: "You can configure webhooks for the following events:\n * 'file.added' — project file is added\n * 'file.updated' - project file is updated\n * 'file.reverted' - project file is reverted\n * 'file.deleted' - project file is deleted\n * 'file.translated' — project file is fully translated\n * 'file.approved' — project file is fully reviewed\n * 'file.qa.finished' - project file QA check is finished\n * 'project.translated' — all strings in project are translated\n * 'project.approved' — all strings in project are approved\n * 'project.qa.finished' - all strings in project QA check are finished\n * 'project.built' - project are successfully built\n * 'preTranslation.completed' - Auto-Translation finishes, fails or is canceled\n * 'translation.updated' — final translation of string is updated (using Replace in suggestions feature)\n * 'string.added' — source string is added\n * 'string.updated' — source string is updated\n * 'string.deleted' — source string is deleted\n * 'stringComment.created' - string comment/issue is added\n * 'stringComment.updated' - string comment/issue is updated\n * 'stringComment.deleted' - string comment/issue is deleted\n * 'stringComment.restored' - string comment/issue is restored\n * 'suggestion.added' — one of source strings is translated\n * 'suggestion.updated' — translation for source string is updated (using Replace in suggestions feature)\n * 'suggestion.deleted' — one of translations is deleted\n * 'suggestion.approved' — translation for string is approved\n * 'suggestion.disapproved' — approval for previously added translation is removed\n * 'task.added' - task is added\n * 'task.statusChanged' - task status was changed\n * 'task.updated' - task is updated\n * 'task.deleted' - task is deleted"
          type: array
          items:
            type: string
            enum:
              - file.added
              - file.updated
              - file.reverted
              - file.deleted
              - file.qa.finished
              - file.translated
              - file.approved
              - project.translated
              - project.approved
              - project.qa.finished
              - project.built
              - preTranslation.completed
              - translation.updated
              - string.added
              - string.updated
              - string.deleted
              - stringComment.created
              - stringComment.updated
              - stringComment.deleted
              - stringComment.restored
              - suggestion.added
              - suggestion.updated
              - suggestion.deleted
              - suggestion.approved
              - suggestion.disapproved
              - task.added
              - task.statusChanged
              - task.updated
              - task.deleted
            example: file.approved
          x-doc-sections:
            - file-based
        requestType:
          description: 'Webhook request type'
          type: string
          enum:
            - POST
            - GET
          example: POST
        isActive:
          description: 'Defines whether webhook is active'
          type: boolean
          default: true
        batchingEnabled:
          description: 'Defines whether webhook batching is enabled'
          type: boolean
          default: false
          example: true
        contentType:
          description: 'Webhook content type'
          type: string
          default: application/json
          enum:
            - multipart/form-data
            - application/json
            - application/x-www-form-urlencoded
        headers:
          description: 'Webhook headers'
          type: object
          example:
            Authorization: 'Bearer <ACCESS_TOKEN>'
        payload:
          description: 'Custom webhook payload'
          properties:
            project.created:
              description: 'Read more about [Events payload examples](https://developer.crowdin.com/webhooks). Additionally, you can check out Events payloads while creating webhooks via UI in your Crowdin profile settings > Webhooks tab > click Add webhook.'
              type: object
          type: object
          example:
            string.added:
              event: '{{event}}'
              string:
                id: '{{stringId}}'
                identifier: '{{stringIdentifier}}'
                key: '{{stringKey}}'
                text: '{{stringText}}'
                type: '{{stringType}}'
                context: '{{stringContext}}'
                maxLength: '{{stringMaxLength}}'
                isHidden: '{{stringIsHidden}}'
                isDuplicate: '{{stringIsDuplicate}}'
                masterStringId: '{{stringMasterStringId}}'
                revision: '{{stringRevision}}'
                hasPlurals: '{{stringHasPlurals}}'
                plurals: '{{stringPlurals}}'
                labelIds: '{{stringLabelIds}}'
                url: '{{stringUrl}}'
                createdAt: '{{stringCreatedAt}}'
                updatedAt: '{{stringUpdatedAt}}'
                file:
                  id: '{{fileId}}'
                  name: '{{fileName}}'
                  title: '{{fileTitle}}'
                  type: '{{fileType}}'
                  path: '{{filePath}}'
                  status: '{{fileStatus}}'
                  revision: '{{fileRevision}}'
                  branchId: '{{branchId}}'
                  directoryId: '{{directoryId}}'
                project:
                  id: '{{projectId}}'
                  userId: '{{projectUserId}}'
                  sourceLanguageId: '{{projectSourceLanguageId}}'
                  targetLanguageIds: '{{projectTargetLanguageIds}}'
                  identifier: '{{projectIdentifier}}'
                  name: '{{projectName}}'
                  createdAt: '{{projectCreatedAt}}'
                  updatedAt: '{{projectUpdatedAt}}'
                  lastActivity: '{{projectLastActivity}}'
                  description: '{{projectDescription}}'
                  url: '{{projectUrl}}'
                  cname: '{{projectCname}}'
                  logo: '{{projectLogo}}'
                  isExternal: '{{projectIsExternal}}'
                  externalType: '{{projectExternalType}}'
                  hasCrowdsourcing: '{{projectHasCrowdsourcing}}'
                  groupId: '{{projectGroupId}}'
              user:
                id: '{{userId}}'
                username: '{{userUsername}}'
                fullName: '{{userFullName}}'
                avatarUrl: '{{userAvatarUrl}}'
      type: object
    CrowdinWebhookCollectionResource:
      description: 'Webhook Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/CrowdinWebhookResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    CrowdinWebhookResource:
      description: 'Webhook Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/CrowdinWebhook'
    CrowdinWebhook:
      title: Webhook
      properties:
        id:
          type: integer
          example: 4
        projectId:
          type: integer
          example: 2
        name:
          type: string
          example: Proofread
        url:
          type: string
          example: 'https://webhook.site/1c20d9b5-6e6a-4522-974d-9da7ea7595c9'
          nullable: true
        events:
          type: array
          items:
            type: string
            example: file.approved
        headers:
          type: array
          items:
            type: string
          example:
            Authorization: 'Bearer <ACCESS_TOKEN>'
        payload:
          description: 'Read more about [Events payload examples](https://developer.crowdin.com/webhooks). Additionally, you can check out Events payloads while creating webhooks via UI in your Crowdin project > Tools tab > Webhooks section > click Add webhook.'
          type: object
          example:
            string.added:
              event: '{{event}}'
              string:
                id: '{{stringId}}'
                identifier: '{{stringIdentifier}}'
                key: '{{stringKey}}'
                text: '{{stringText}}'
                type: '{{stringType}}'
                context: '{{stringContext}}'
                maxLength: '{{stringMaxLength}}'
                isHidden: '{{stringIsHidden}}'
                isDuplicate: '{{stringIsDuplicate}}'
                masterStringId: '{{stringMasterStringId}}'
                revision: '{{stringRevision}}'
                hasPlurals: '{{stringHasPlurals}}'
                plurals: '{{stringPlurals}}'
                labelIds: '{{stringLabelIds}}'
                url: '{{stringUrl}}'
                createdAt: '{{stringCreatedAt}}'
                updatedAt: '{{stringUpdatedAt}}'
                file:
                  id: '{{fileId}}'
                  name: '{{fileName}}'
                  title: '{{fileTitle}}'
                  type: '{{fileType}}'
                  path: '{{filePath}}'
                  status: '{{fileStatus}}'
                  revision: '{{fileRevision}}'
                  branchId: '{{branchId}}'
                  branchName: '{{branchName}}'
                  directoryId: '{{directoryId}}'
                project:
                  id: '{{projectId}}'
                  userId: '{{projectUserId}}'
                  sourceLanguageId: '{{projectSourceLanguageId}}'
                  targetLanguageIds: '{{projectTargetLanguageIds}}'
                  identifier: '{{projectIdentifier}}'
                  name: '{{projectName}}'
                  createdAt: '{{projectCreatedAt}}'
                  updatedAt: '{{projectUpdatedAt}}'
                  lastActivity: '{{projectLastActivity}}'
                  description: '{{projectDescription}}'
                  url: '{{projectUrl}}'
                  cname: '{{projectCname}}'
                  logo: '{{projectLogo}}'
              user:
                id: '{{userId}}'
                username: '{{userUsername}}'
                fullName: '{{userFullName}}'
                avatarUrl: '{{userAvatarUrl}}'
          additionalProperties:
            type: array
            items:
              type: string
        isActive:
          type: boolean
          example: true
        batchingEnabled:
          type: boolean
          example: true
        requestType:
          type: string
          example: GET
        contentType:
          type: string
          example: application/json
          nullable: true
        createdAt:
          type: string
          format: date-time
          example: '2019-09-23T09:19:07+00:00'
        updatedAt:
          type: string
          format: date-time
          example: '2019-09-23T09:19:07+00:00'
      type: object
    WorkflowStepCollectionResource:
      description: 'Workflow Templates Collection'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/WorkflowStepResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    WorkflowStepResource:
      description: 'Workflow Step Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
      anyOf:
        -
          $ref: '#/components/schemas/TranslateStepResponse'
        -
          $ref: '#/components/schemas/ProofreadStepResponse'
        -
          $ref: '#/components/schemas/TranslateByVendorStepResponse'
        -
          $ref: '#/components/schemas/ProofreadByVendorStepResponse'
        -
          $ref: '#/components/schemas/TmPreTranslateStepResponse'
        -
          $ref: '#/components/schemas/MtPreTranslateStepResponse'
        -
          $ref: '#/components/schemas/CrowdsourceStepResponse'
    TranslateStepResponse:
      title: Translation
      properties:
        data:
          properties:
            id:
              type: integer
              example: 311
            title:
              type: string
              example: Translate
            type:
              type: string
              example: Translate
            languages:
              description: 'Array of language ids'
              type: array
              items:
                type: string
              example:
                - de
                - it
            config:
              properties:
                assignees:
                  description: 'Array of user identifiers'
                  properties: { de: { type: array, items: { type: integer, example: 346 } }, it: { type: array, items: { type: integer, example: 43 } } }
                  type: object
              type: object
          type: object
      type: object
    ProofreadStepResponse:
      title: Proofreading
      properties:
        data:
          properties:
            id:
              type: integer
              example: 312
            title:
              type: string
              example: Proofread
            type:
              type: string
              example: Proofreading
            languages:
              description: 'Array of language ids'
              type: array
              items:
                type: string
                example:
                  - de
                  - it
            config:
              properties:
                assignees:
                  description: 'Array of user identifiers'
                  properties: { de: { type: array, items: { type: integer, example: 346 } }, it: { type: array, items: { type: integer, example: 43 } } }
                  type: object
              type: object
          type: object
      type: object
    TranslateByVendorStepResponse:
      title: 'Translation by Vendor'
      properties:
        data:
          properties:
            id:
              type: integer
              example: 313
            title:
              type: string
              example: 'Translation by Vendor'
            type:
              type: string
              example: TranslateByVendor
            languages:
              description: 'Array of language ids'
              type: array
              items:
                type: string
                example: uk
            config:
              properties:
                vendorId:
                  type: integer
                  example: 59169
              type: object
          type: object
      type: object
    ProofreadByVendorStepResponse:
      title: 'Proofreading by Vendor'
      properties:
        data:
          properties:
            id:
              type: integer
              example: 314
            title:
              type: string
              example: 'Proofreading by Vendor'
            type:
              type: string
              example: ProofreadByVendor
            languages:
              description: 'Array of language ids'
              type: array
              items:
                type: string
                example: uk
            config:
              properties:
                vendorId:
                  type: integer
                  example: 59169
              type: object
          type: object
      type: object
    TmPreTranslateStepResponse:
      title: 'TM Pre-translation'
      properties:
        data:
          properties:
            id:
              type: integer
              example: 315
            title:
              type: string
              example: 'TM Pre-translation'
            type:
              type: string
              example: TMPreTranslate
            languages:
              description: 'Array of language ids'
              type: array
              items:
                type: string
                example: uk
            config:
              properties:
                minRelevant:
                  type: string
                  example: perfect
                autoSubstitution:
                  type: integer
                  example: 2
              type: object
          type: object
      type: object
    MtPreTranslateStepResponse:
      title: 'MT Pre-translation'
      properties:
        data:
          properties:
            id:
              type: integer
              example: 316
            title:
              type: string
              example: 'MT Pre-translation'
            type:
              type: string
              example: MachinePreTranslate
            languages:
              description: 'Array of language ids'
              type: array
              items:
                type: string
                example: uk
            config:
              properties:
                mtId:
                  type: integer
                  example: 2
              type: object
          type: object
      type: object
    CrowdsourceStepResponse:
      title: Crowdsourcing
      properties:
        data:
          properties:
            id:
              type: integer
              example: 316
            title:
              type: string
              example: Crowdsourcing
            type:
              type: string
              example: Crowdsource
            languages:
              description: 'Array of language ids'
              type: array
              items:
                type: string
                example: uk
            config:
              type: object
          type: object
      type: object
    StringStatusMassPatch:
      description: 'A JSON Patch document as defined by <a href="https://tools.ietf.org/html/rfc6902#section-3" target="_blank">RFC 6902</a>'
      type: array
      items:
        $ref: '#/components/schemas/StringStatusMassOperation'
      example:
        -
          op: replace
          path: /2814/output
          value: untranslated
    StringStatusMassOperation:
      description: 'A JSON Patch (222) operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4)'
      required:
        - op
        - path
      properties:
        op:
          description: 'Patch operation to perform'
          type: string
          enum:
            - replace
        path:
          description: 'A JSON Pointer as defined by <a href="https://tools.ietf.org/html/rfc6901" target="_blank">RFC 6901</a>'
          type: string
          format: json-pointer
          enum:
            - '/{stringId}/output'
          example: '/{stringId}/output'
      type: object
      discriminator:
        propertyName: op
        mapping:
          replace: '#/components/schemas/StringStatusMassOperationReplace'
    StringStatusMassOperationReplace:
      description: 'A JSON Patch `Replace` operation as defined by [RFC 6902](https://tools.ietf.org/html/rfc6902#section-4.3)'
      required:
        - value
      type: object
      allOf:
        -
          $ref: '#/components/schemas/StringStatusMassOperation'
        -
          properties:
            value:
              example: untranslated
              oneOf:
                -
                  type: string
    StringStatusCollectionResource:
      description: 'String Status Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/StringStatusResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    StringStatusResource:
      description: 'String Status Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/StringStatus'
    StringStatusUpdateCollectionResource:
      description: 'String Status Collection Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/StringStatusResource'
    StringStatus:
      properties:
        stringId:
          type: integer
          example: 1
        languageId:
          type: string
          example: uk
        stepId:
          type: integer
          example: 1
        status:
          type: string
          example: todo
        output:
          type: string
          example: translated
      type: object
    WorkflowTemplateCollectionResource:
      description: 'Workflow Templates Collection'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          $ref: '#/components/schemas/CollectionResource'
        -
          properties:
            data:
              type: array
              items:
                $ref: '#/components/schemas/WorkflowTemplateResource'
            pagination:
              $ref: '#/components/schemas/Pagination'
    WorkflowTemplateResource:
      description: 'Workflow Template Resource'
      type: object
      allOf:
        -
          $ref: '#/components/schemas/Resource'
        -
          properties:
            data:
              $ref: '#/components/schemas/WorkflowTemplate'
    WorkflowTemplate:
      title: 'Workflow Template'
      properties:
        id:
          type: integer
          example: 2
        title:
          type: string
          example: 'In-house + Machine Translation'
        description:
          type: string
          example: "Combine the efforts of human translators and Machine Translation technology.\n• Pre-translation - Translation Memory\n• Pre-translation - Machine Translation\n• Translation - in-house translators\n• Proofreading - in-house translators"
        groupId:
          type: integer
          example: 2
        isDefault:
          type: boolean
          example: true
        steps:
          type: array
          items:
            properties:
              id:
                description: 'Workflow Template Step Identifier. Get via [Get Workflow Template](#operation/api.workflow-templates.get)'
                type: integer
                example: 3
              languages:
                description: 'Target Languages Identifiers. Get via [List Supported Languages](#operation/api.languages.getMany)'
                type: array
                items:
                  type: integer
                  example: 2
              assignees:
                type: array
                items:
                  type: integer
                  example: 5
              vendorId:
                type: integer
                example: 52760
              config:
                properties:
                  minRelevant: { type: integer, example: 60 }
                  autoSubstitution: { type: boolean, example: true }
                type: object
              mtId:
                type: integer
                example: 12
            type: object
        webUrl:
          type: string
          example: 'https://example.crowdin.com/u/workflows/1/read'
      type: object
    Events:
      type: string
      enum:
        - project.created
        - project.deleted
      example: project.created
    LanguageUk:
      title: Language
      properties:
        id:
          type: string
          example: uk
        name:
          type: string
          example: Ukrainian
        editorCode:
          type: string
          example: uk
        twoLettersCode:
          type: string
          example: uk
        threeLettersCode:
          type: string
          example: ukr
        locale:
          type: string
          example: uk-UA
        androidCode:
          type: string
          example: uk-rUA
        osxCode:
          type: string
          example: uk.lproj
        osxLocale:
          type: string
          example: uk
        pluralCategoryNames:
          type: array
          items:
            type: string
          example:
            - one
            - few
            - many
            - other
        pluralRules:
          type: string
          example: '((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3))'
        pluralExamples:
          type: array
          items:
            type: string
          example:
            - '1, 21, 31, 41, 51, 61, 71, 81...'
            - '2-4, 22-24, 32-34, 42-44, 52-54, 62...'
            - '0, 5-19, 100, 1000, 10000...'
            - '0.0-0.9, 1.1-1.6, 10.0, 100.0...'
        textDirection:
          type: string
          example: ltr
        dialectOf:
          type: string
          example: null
          nullable: true
      type: object
    qaCheckCategories:
      properties:
        empty:
          type: boolean
          default: true
          example: true
        size:
          type: boolean
          default: true
          example: true
        tags:
          type: boolean
          default: true
          example: true
        spaces:
          type: boolean
          default: true
          example: true
        variables:
          type: boolean
          default: true
          example: true
        punctuation:
          type: boolean
          default: true
          example: true
        symbolRegister:
          type: boolean
          default: true
          example: true
        specialSymbols:
          type: boolean
          default: true
          example: true
        wrongTranslation:
          type: boolean
          default: true
          example: true
        spellcheck:
          type: boolean
          default: true
          example: true
        icu:
          type: boolean
          default: true
          example: true
        terms:
          type: boolean
          default: false
          example: true
        duplicate:
          type: boolean
          default: true
          example: true
        ftl:
          type: boolean
          default: true
          example: true
        android:
          type: boolean
          default: true
          example: true
        numbers:
          type: boolean
          default: true
          example: true
        ai:
          type: boolean
          default: true
          example: true
        outdated:
          type: boolean
          default: false
          example: true
        mdx:
          type: boolean
          default: true
          example: true
        unifiedPlaceholders:
          type: boolean
          default: true
          example: true
      type: object
    qaChecksIgnorableCategories:
      properties:
        empty:
          type: boolean
          default: false
          example: false
        size:
          type: boolean
          default: true
          example: true
        tags:
          type: boolean
          default: true
          example: true
        spaces:
          type: boolean
          default: true
          example: true
        variables:
          type: boolean
          default: true
          example: true
        punctuation:
          type: boolean
          default: true
          example: true
        symbolRegister:
          type: boolean
          default: true
          example: true
        specialSymbols:
          type: boolean
          default: true
          example: true
        wrongTranslation:
          type: boolean
          default: true
          example: true
        spellcheck:
          type: boolean
          default: true
          example: true
        icu:
          type: boolean
          default: false
          example: false
        terms:
          type: boolean
          default: false
          example: true
        duplicate:
          type: boolean
          default: false
          example: false
        ftl:
          type: boolean
          default: false
          example: false
        android:
          type: boolean
          default: true
          example: true
        numbers:
          type: boolean
          default: true
          example: true
        ai:
          type: boolean
          default: true
          example: true
        outdated:
          type: boolean
          default: false
          example: true
        mdx:
          type: boolean
          default: false
          example: false
        unifiedPlaceholders:
          type: boolean
          default: false
          example: false
      type: object
    ProjectPermissionsRoles:
      description: 'Array of objects'
      type: array
      items:
        $ref: '#/components/schemas/RolePermission'
      example:
        -
          name: translator
          permissions:
            allLanguages: false
            languagesAccess:
              uk:
                allContent: false
                workflowStepIds:
                  - 882
              it:
                allContent: true
        -
          name: proofreader
          permissions:
            allLanguages: true
            languagesAccess: []
        -
          name: language_coordinator
          permissions:
            allLanguages: false
            languagesAccess:
              uk:
                allContent: true
              it:
                allContent: true
    RolePermission:
      title: 'translator role'
      properties:
        name:
          description: 'Role name. `translator`, `proofreader` or `language_coordinator`'
          type: string
          example: translator
        permissions:
          description: 'Role permission configuration'
          properties:
            allLanguages:
              description: '`true` or `false`. `true` means that user will have access to all languages and workflow steps'
              type: boolean
              default: false
              example: false
            languagesAccess:
              description: 'needed if `allLanguages` equal `false`'
              properties:
                it:
                  description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
                  properties: { allContent: { description: '`true` or `false`. `true` means that user will have access to all workflow steps for given language', type: boolean, default: false, example: false }, workflowStepIds: { description: 'Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)', type: array, items: { type: integer, example: 313 } } }
                  type: object
                uk:
                  description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
                  properties: { allContent: { description: '`true` or `false`. `true` means that user will have access to all workflow steps for given language', type: boolean, default: false, example: true }, workflowStepIds: { description: 'Workflow Step Identifier. Get via [List Workflow Steps](#operation/api.projects.workflow-steps.getMany)', type: array, items: {  } } }
                  type: object
              type: object
          type: object
      type: object
    CrowdinRolePermission:
      title: 'translator role'
      properties:
        name:
          description: "Role name. `translator`, `proofreader` or `language_coordinator`\n\n__Note:__ In projects with a custom workflow, proofreaders are always assigned to the last proofreading step."
          type: string
          example: translator
        permissions:
          description: 'Role permission configuration'
          properties:
            allLanguages:
              description: '`true` or `false`. `true` means that user will have access to all languages'
              type: boolean
              default: false
              example: false
            languagesAccess:
              description: 'needed if `allLanguages` equal `false`'
              properties:
                it:
                  description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
                  properties: { allContent: { description: 'Must be set to `true`', type: boolean, default: true, example: true } }
                  type: object
                uk:
                  description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
                  properties: { allContent: { description: 'Must be set to `true`', type: boolean, default: true, example: true } }
                  type: object
              type: object
          type: object
      type: object
    TmSegmentRecordResource:
      title: 'TM Segment'
      properties:
        id:
          description: 'TM segment identifier'
          type: integer
          example: 1
        records:
          description: 'TM Segment Records'
          type: object
          allOf:
            -
              $ref: '#/components/schemas/TmSegmentRecord'
      type: object
    TmSegmentRecord:
      title: 'TM Segment Record'
      type: array
      items:
        properties:
          id:
            description: 'Record Identifier'
            type: integer
            example: 1
          languageId:
            description: 'Language Identifier'
            type: string
            example: uk
          text:
            description: 'Record text'
            type: string
            example: 'Перекладений текст'
          usageCount:
            description: 'Count usage of segment record'
            type: integer
            example: 13
          createdBy:
            description: 'Creator User Identifier'
            type: integer
            example: 1
          updatedBy:
            description: 'Redactor User Identifier'
            type: integer
            example: 1
          createdAt:
            description: 'Date in UTC, ISO 8601'
            type: string
            format: date-time
            example: '2019-09-16T13:48:04+00:00'
            nullable: true
          updatedAt:
            description: 'Date in UTC, ISO 8601'
            type: string
            format: date-time
            example: '2019-09-16T13:48:04+00:00'
            nullable: true
        type: object
    ApplicationData:
      description: 'Application data'
      properties:
        data:
          description: 'Application data'
          type: object
      type: object
    applications.installations.permissions.user:
      description: 'Use modules permissions instead'
      properties:
        value:
          type: string
          enum:
            - owner
            - managers
            - all
            - guests
            - restricted
          example: restricted
        ids:
          description: 'Ids is available only for restricted value'
          type: array
          items:
            type: integer
            example: 1
      type: object
      deprecated: true
    applications.installations.module.permissions.user:
      properties:
        value:
          description: "\n\n __Note__: For exporters, the `all` value will be set"
          type: string
          enum:
            - owner
            - managers
            - all
            - guests
            - restricted
          example: restricted
        ids:
          description: 'Ids is only available for restricted value'
          type: array
          items:
            type: integer
            example: 1
      type: object
    applications.installations.permissions.project:
      properties:
        value:
          type: string
          enum:
            - own
            - restricted
          example: restricted
        ids:
          type: array
          items:
            type: integer
            example: 1
      type: object
    applications.installations.modules:
      type: array
      items:
        $ref: '#/components/schemas/applications.installations.modules.createModule'
    applications.installations.modules.createModule:
      properties:
        key:
          type: string
          example: some-module-key
        permissions:
          $ref: '#/components/schemas/applications.installations.modules.module.permissions'
      type: object
    applications.installations.modules.module.permissions:
      properties:
        user:
          $ref: '#/components/schemas/applications.installations.module.permissions.user'
      type: object
    applications.installations.permissions:
      properties:
        user:
          $ref: '#/components/schemas/applications.installations.permissions.user'
        project:
          $ref: '#/components/schemas/applications.installations.permissions.project'
      type: object
    applications.installations.defaultPermissions:
      properties:
        user:
          type: string
          enum:
            - owner
          example: owner
        project:
          type: string
          enum:
            - own
          example: own
      type: object
    CrowdinTaskAssignee:
      description: 'Task assignees.'
      required:
        - id
      properties:
        id:
          description: 'Project Member Identifier. Get via [List Project Members](#operation/api.projects.members.getMany)'
          type: integer
        wordsCount:
          description: "Defines how many words (starting from 1) are assigned to each task assignee\n *\n * __Note:__ Can be used only when 'splitContent' parameter is specified"
          type: integer
      type: object
    CrowdinManualVendor:
      description: "Task vendor:\n *   \"alconost\" - Alconost,\n *   \"babbleon\" - Babble-on,\n *   \"tomedes\" - Tomedes,\n *   \"e2f\" - e2f,\n *   \"write_path_admin\" - WritePath,\n *   \"inlingo\" - Inlingo,\n *   \"acclaro\" - Acclaro,\n *   \"translate_by_humans\" - Translate by Humans,\n *   \"lingo24\" - Lingo24,\n *   \"gte_localize\" - GTE Localize,\n *   \"kettu_solutions\" - Kettu Solutions"
      type: string
    EnterpriseTaskAssignee:
      title: 'Task assignee'
      description: 'Task assignee'
      required:
        - id
      properties:
        id:
          description: 'User Identifier. Get via [List Users](#operation/api.users.getMany)'
          type: integer
          example: 1
        wordsCount:
          description: "Defines how many words (starting from 1) are assigned to each task assignee\n *\n * __Note:__ Can be used only when 'splitContent' parameter is specified"
          type: integer
          example: 5
      type: object
    EnterpriseTaskAssignedTeams:
      title: 'Task assigned teams'
      description: 'Task assigned teams'
      required:
        - id
      properties:
        id:
          description: 'Team Identifier. Get via [List Teams](#operation/api.teams.getMany)'
          type: integer
          example: 1
        wordsCount:
          description: "Defines how many words (starting from 1) are assigned to each task assigned team\n *\n * __Note:__ Can be used only when 'splitContent' parameter is specified"
          type: integer
          example: 5
      type: object
    EnterpriseAdditionalFields:
      title: Fields
      description: 'Fields. Keys get via [List Fields](#operation/api.fields.getMany)'
      type: object
      example:
        some-field-1: 'some value 1'
        some-field-2: 12
        some-field-3: true
        some-field-4:
          - en
          - ja
      additionalProperties:
        anyOf:
          -
            type: string
          -
            type: integer
          -
            type: boolean
          -
            type: object
    SkippedInfo:
      properties:
        translation_eq_source:
          description: 'Translation is the same as the source string'
          type: integer
          example: 2
        qa_check:
          description: 'Did not pass QA checks'
          type: integer
          example: 1
        hidden_strings:
          description: 'Hidden strings'
          type: integer
          example: 0
        ai_error:
          description: 'AI responded with an error'
          type: integer
          example: 6
      type: object
    SkippedQaCheckCategories:
      type: object
      example:
        duplicate: 1
        spellcheck: 1
  responses:
    AiGatewayProviderResponse:
      description: 'Response from the AI provider (format depends on provider and endpoint)'
      content:
        application/json:
          schema:
            type: object
        text/event-stream:
          schema:
            type: string
        text/plain:
          schema:
            type: string
        application/octet-stream:
          schema:
            type: string
            format: binary
    AiGatewayProviderPassthroughResponse:
      description: 'Any other status and body are passed through from the AI provider. Format and meaning depend on the provider and the requested path.'
  parameters:
    AiFineTuningJobCollectionStatuses:
      name: statuses
      in: query
      description: "Filter the collection by the specified status. It can be one status or a list of comma-separated ones.\n\nPossible values: `created`, `in_progress`, `canceled`, `failed`, `finished`"
      schema:
        type: string
      example: 'created,in_progress'
    AiFineTuningJobCollectionOrderBy:
      name: orderBy
      in: query
      description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
      schema:
        type: string
        enum:
          - createdAt
          - updatedAt
          - startedAt
          - finishedAt
      example: 'createdAt desc'
    AiGatewayPath:
      name: path
      in: path
      description: 'Raw provider API path after `/gateway/`. This is a multi-segment path and may contain slashes (e.g. `chat/completions`, `messages`, `models/gemini-pro:generateContent`). Router pattern: `{path:.+}`.'
      required: true
      schema:
        type: string
        minLength: 1
        example: chat/completions
    AiRequestLogCollectionRequestId:
      name: requestId
      in: query
      description: 'Filter by request identifier'
      required: false
      schema:
        type: string
      example: 9d3b1c4e-2f3a-4b5c-8d6e-7f8a9b0c1d2e
    AiRequestLogCollectionProjectId:
      name: projectId
      in: query
      description: 'Filter by project. Get via [List Projects](#operation/api.projects.getMany)'
      required: false
      schema:
        type: integer
    AiRequestLogCollectionAiProviderId:
      name: aiProviderId
      in: query
      description: 'Filter by AI provider. Get via [List AI Providers](#operation/api.ai.providers.getMany)'
      required: false
      schema:
        type: integer
    AiRequestLogCollectionModel:
      name: model
      in: query
      description: 'Filter by model name'
      required: false
      schema:
        type: string
      example: claude-fable-5
    AiRequestLogCollectionSourceAction:
      name: sourceAction
      in: query
      description: "Filter by the feature or channel that produced the request. One of:\n\n * `ai_gateway` - AI Gateway API\n * `ai_proxy` - AI Proxy API\n * `ai_translate_strings` - AI Translate Strings API\n * `ai_file_translate` - AI File Translations API\n * `ai_prompt_completion` - AI Prompt Completion API\n * `pre_translate:manual` - Auto-Translation (manual)\n * `pre_translate:workflow` - Auto-Translation (workflow)\n * `ai_alignment` - Glossary Alignment (Enterprise only)\n * `qa_check` - QA Check\n * `ai_suggestion` - AI suggestion\n * `advisor` - Context Advisor"
      required: false
      schema:
        type: string
        enum:
          - ai_proxy
          - ai_gateway
          - ai_translate_strings
          - ai_file_translate
          - ai_prompt_completion
          - 'pre_translate:manual'
          - 'pre_translate:workflow'
          - ai_alignment
          - qa_check
          - ai_suggestion
          - advisor
      example: ai_gateway
    AiRequestLogCollectionStatuses:
      name: statuses
      in: query
      description: 'Filter by status, comma-separated'
      required: false
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
          enum:
            - pending
            - success
            - error
            - timeout
      example: 'success,error'
    AiRequestLogCollectionSystemCredentials:
      name: systemCredentials
      in: query
      description: 'Filter by whether the request used system-provided credentials'
      required: false
      schema:
        type: boolean
    AiRequestLogCollectionIsAutoTriggered:
      name: isAutoTriggered
      in: query
      description: 'Filter by whether the request was triggered automatically (e.g. by a workflow) rather than by an interactive user action'
      required: false
      schema:
        type: boolean
    AiRequestLogCollectionTokenName:
      name: tokenName
      in: query
      description: 'Filter by the name of the personal access token used to authenticate the request'
      required: false
      schema:
        type: string
    AiRequestLogCollectionOauthClientId:
      name: oauthClientId
      in: query
      description: 'Filter by the OAuth application that authenticated the request, matched on its `client_id`. Returned as `oauthClientId` on each log entry.'
      required: false
      schema:
        type: string
    AiRequestLogCollectionCreatedAfter:
      name: createdAfter
      in: query
      description: 'Return logs created after this date (ISO 8601)'
      required: false
      schema:
        type: string
        format: date-time
      example: '2026-07-01T10:41:33+00:00'
    AiRequestLogCollectionCreatedBefore:
      name: createdBefore
      in: query
      description: 'Return logs created before this date (ISO 8601)'
      required: false
      schema:
        type: string
        format: date-time
      example: '2026-07-31T23:59:59+00:00'
    CrowdinAiUsageMemberCollectionUserIds:
      name: userIds
      in: query
      description: 'Filter by user identifier, comma-separated. Get via [List Project Members](#operation/api.projects.members.getMany)'
      required: false
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
        maxItems: 500
      example: '2,3'
    EnterpriseAiUsageMemberCollectionUserIds:
      name: userIds
      in: query
      description: 'Filter by user identifier, comma-separated. Get via [List Users](#operation/api.users.getMany)'
      required: false
      style: form
      explode: false
      schema:
        type: array
        items:
          type: integer
        maxItems: 500
      example: '2,3'
    AiUsageMemberCollectionOrderBy:
      name: orderBy
      in: query
      description: 'Read more about [sorting rules](#section/Introduction/Sorting)'
      required: false
      schema:
        type: string
        enum:
          - username
          - dailyCostLimit
          - dailyCostSpent
          - monthlyCostLimit
          - monthlyCostSpent
      example: 'dailyCostSpent desc'
    ApplicationKvPrefix:
      name: prefix
      in: query
      description: 'Filter results to keys that start with the given prefix'
      schema:
        type: string
    PaginationLimit:
      name: limit
      in: query
      description: 'A maximum number of items to retrieve'
      schema:
        type: integer
        default: 25
        maximum: 500
        minimum: 1
    PaginationOffset:
      name: offset
      in: query
      description: 'A starting offset in the collection'
      schema:
        type: integer
        default: 0
        minimum: 0
    CrowdinTaskStatus:
      name: status
      in: query
      description: 'List tasks with specified statuses. It can be one status or a list of comma-separated status values'
      schema:
        type: string
        enum:
          - todo
          - in_progress
          - done
          - closed
      example: done
    EnterpriseTaskStatus:
      name: status
      in: query
      description: 'List tasks with specified statuses. It can be one status or a list of comma-separated status values'
      schema:
        type: string
        enum:
          - review
          - todo
          - in_progress
          - done
          - closed
      example: done
    AssigneeId:
      name: assigneeId
      in: query
      description: 'List tasks for specified assignee.'
      schema:
        type: integer
      example: 123
    IsArchived:
      name: isArchived
      in: query
      description: "List archived/not archived tasks for the authorized user.\n * 1 - archived\n * 0 - not archived"
      schema:
        type: string
        default: 0
        enum:
          - 1
          - 0
      example: '1'
    QueryNotRequiredGroupId:
      name: groupId
      in: query
      description: "Group Identifier. Get via [List Groups](#operation/api.groups.getMany)\n\n __Note__: Set 0 to see items of root group"
      schema:
        type: integer
    QueryNotRequiredGroupIdWithoutNote:
      name: groupId
      in: query
      description: 'Group Identifier. Get via [List Groups](#operation/api.groups.getMany)'
      schema:
        type: integer
    HasManagerAccess:
      name: hasManagerAccess
      in: query
      description: "Projects with Manager Access\n * 0 - false\n * 1 - true"
      schema:
        type: integer
        default: 0
        enum:
          - 1
          - 0
    ProjectType:
      name: type
      in: query
      description: 'Set type to 0 to get all file based projects'
      schema:
        type: integer
        enum:
          - 0
          - 1
      x-doc-sections:
        - file-based
    QuerySupportsStringsExport:
      name: supportsStringsExport
      in: query
      schema:
        type: integer
        default: 0
        enum:
          - 1
          - 0
    QueryNotRequiredParentId:
      name: parentId
      in: query
      description: "Parent Group Identifier. Get via [List Groups](#operation/api.groups.getMany)\n\n __Note__: Set 0 to see groups of root group"
      schema:
        type: integer
    QueryFileId:
      name: fileId
      in: query
      description: 'File Identifier. Get via [List Files](#operation/api.projects.files.getMany)'
      schema:
        type: integer
    QueryProjectId:
      name: projectId
      in: query
      description: 'Project Identifier. Get via [List Projects](#operation/api.projects.getMany)'
      required: true
      schema:
        type: integer
    QueryNotRequiredProjectId:
      name: projectId
      in: query
      description: 'Project Identifier. Get via [List Projects](#operation/api.projects.getMany)'
      schema:
        type: integer
    QueryStringId:
      name: stringId
      in: query
      description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
      required: false
      schema:
        type: integer
    ForceDelete:
      name: force
      in: query
      description: 'Force to delete application installation'
      required: false
      schema:
        type: boolean
    CrowdinReportArchiveScopeType:
      name: scopeType
      in: query
      description: 'Filter only project report archives'
      required: false
      schema:
        type: string
        enum:
          - project
      example: project
    CrowdinReportArchiveScopeId:
      name: scopeId
      in: query
      description: 'Filter archives by specific scope id'
      required: false
      schema:
        type: integer
    EnterpriseReportArchiveScopeId:
      name: scopeId
      in: query
      description: "Filter archives by specific scope id\n\n __Note__: Use only if `scopeType` set to `group` or `project`"
      required: false
      schema:
        type: integer
    EnterpriseReportArchiveScopeType:
      name: scopeType
      in: query
      description: 'Filter report archives by scope type'
      required: false
      schema:
        type: string
        enum:
          - organization
          - group
          - project
      example: group
    IssueType:
      name: type
      in: query
      description: 'Defines issue type'
      schema:
        type: string
        enum:
          - general_question
          - translation_mistake
          - context_request
          - source_mistake
    IssueStatus:
      name: status
      in: query
      description: 'Defines issue resolution status'
      schema:
        type: string
        enum:
          - resolved
          - unresolved
    IssueStatisticStatus:
      name: status
      in: query
      description: 'Defines issue resolution status'
      schema:
        type: string
        default: all
        enum:
          - resolved
          - unresolved
          - all
    QaCheckValidation:
      name: validation
      in: query
      description: 'Defines the QA check issue validation type. It can be one validation type or a list of comma-separated ones'
      schema:
        type: string
        enum:
          - empty_string_check
          - empty_suggestion_check
          - max_length_check
          - tags_check
          - mismatch_ids_check
          - cdata_check
          - specials_symbols_check
          - leading_newlines_check
          - trailing_newlines_check
          - leading_spaces_check
          - trailing_spaces_check
          - multiple_spaces_check
          - custom_blocked_variables_check
          - highest_priority_custom_variables_check
          - highest_priority_variables_check
          - c_variables_check
          - python_variables_check
          - rails_variables_check
          - java_variables_check
          - dot_net_variables_check
          - twig_variables_check
          - php_variables_check
          - freemarker_variables_check
          - lowest_priority_variable_check
          - lowest_priority_custom_variables_check
          - punctuation_check
          - spaces_before_punctuation_check
          - spaces_after_punctuation_check
          - non_breaking_spaces_check
          - capitalize_check
          - multiple_uppercase_check
          - parentheses_check
          - entities_check
          - escaped_quotes_check
          - wrong_translation_issue_check
          - spellcheck
          - icu_check
          - numbers_check
          - ai_check
          - outdated_translation_check
        example: 'capitalize_check,punctuation_check'
    QaCheckCategory:
      name: category
      in: query
      description: 'Defines category of QA check issue. It can be one category or a list of comma-separated ones'
      schema:
        type: string
        enum:
          - empty
          - variables
          - tags
          - punctuation
          - symbol_register
          - spaces
          - size
          - special_symbols
          - wrong_translation
          - spellcheck
          - icu
          - numbers
          - ai
          - outdated
        example: 'variables,tags'
    TaskStatisticStatus:
      name: status
      in: query
      description: "Defines the task resolution status:\n * 0 - todo\n * 1 - in_progress\n * 2 - done\n * 3 - closed\n * 4 - archived\n * 5 - overdue"
      schema:
        type: integer
        enum:
          - 0
          - 1
          - 2
          - 3
          - 4
          - 5
    UserId:
      name: userId
      in: path
      description: 'User Identifier'
      required: true
      schema:
        type: integer
    ProjectMemberId:
      name: memberId
      in: path
      description: 'Project Member Identifier. Get via [List Project Members](#operation/api.projects.members.getMany)'
      required: true
      schema:
        type: integer
    ReportSettingsTemplateId:
      name: reportSettingsTemplateId
      in: path
      description: 'Report Settings Template Identifier. Get via [List Report Settings Template](#operation/api.projects.reports.settings-templates.getMany)'
      required: true
      schema:
        type: integer
    SecurityLogsUserId:
      name: userId
      in: path
      description: 'User Identifier. Get via [Get Authenticated User](#operation/api.user.get) for own security logs'
      required: true
      schema:
        type: integer
    QueryUserId:
      name: userId
      in: query
      description: 'Project Member Identifier. Get via [List Project Members](#operation/api.projects.members.getMany)'
      schema:
        type: integer
    StringCommentType:
      name: type
      in: query
      description: "Defines string comment type\n\n__Note:__ `type=comment` can't be used with `issueType` or `issueStatus` in same request"
      schema:
        type: string
        enum:
          - comment
          - issue
    IssueTypeInStringComment:
      name: issueType
      in: query
      description: 'Defines issue type. It can be one issue type or a list of comma-separated ones'
      schema:
        type: string
        enum:
          - general_question
          - translation_mistake
          - context_request
          - source_mistake
      example: 'general_question,translation_mistake'
    IssueStatusInStringComment:
      name: issueStatus
      in: query
      description: 'Defines issue resolution status'
      schema:
        type: string
        enum:
          - resolved
          - unresolved
    StringCommentTargetLanguageId:
      name: targetLanguageId
      in: query
      description: 'Defines target language id. It can be one target language id or a list of comma-separated ones. Get via [Project Target Languages](#operation/api.projects.get)'
      schema:
        type: string
      example: 'en,es'
    SecurityLogEvent:
      name: event
      in: query
      schema:
        type: string
        enum:
          - login
          - password.set
          - password.change
          - email.change
          - login.change
          - personal_token.issued
          - personal_token.revoked
          - mfa.enabled
          - mfa.disabled
          - session.revoke
          - session.revoke_all
          - sso.connect
          - sso.disconnect
          - user.registered
          - user.remove
          - application.connected
          - application.disconnected
          - webauthn.created
          - webauthn.deleted
          - trusted_device.remove
          - trusted_device.remove_all
          - device_verification.enabled
          - device_verification.disabled
        example: login
    RevisionId:
      name: revisionId
      in: path
      description: 'Revision Identifier. Get via [List File Revisions](#operation/api.projects.files.revisions.getMany)'
      required: true
      schema:
        type: integer
    FileId:
      name: fileId
      in: path
      description: 'File Identifier. Get via [List Files](#operation/api.projects.files.getMany)'
      required: true
      schema:
        type: integer
    BranchId:
      name: branchId
      in: path
      description: 'Branch Identifier. Get via [List Branches](#operation/api.projects.branches.getMany)'
      required: true
      schema:
        type: integer
    LanguageId:
      name: languageId
      in: path
      description: 'Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
      required: true
      schema:
        type: string
    PathIntegerLanguageId:
      name: languageId
      in: path
      description: 'Language Identifier. Get via [List Supported Languages](#operation/api.languages.getMany)'
      required: true
      schema:
        type: integer
    LanguageIds:
      name: languageIds
      in: query
      description: 'Filter progress by Language Identifiers. Get via [List Supported Languages](#operation/api.languages.getMany)'
      schema:
        type: string
    ProjectTargetLanguageId:
      name: languageId
      in: path
      description: 'Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
      required: true
      schema:
        type: string
    ProjectTargetLanguageIds:
      name: languageIds
      in: query
      description: 'Filter progress by Language Identifier. Get via [Project Target Languages](#operation/api.projects.get)'
      schema:
        type: string
    ProjectId:
      name: projectId
      in: path
      description: 'Project Identifier. Get via [List Projects](#operation/api.projects.getMany)'
      required: true
      schema:
        type: integer
    DistributionHash:
      name: hash
      in: path
      description: 'Hash. Get via [List Distributions](#operation/api.distributions.getMany)'
      required: true
      schema:
        type: string
    OrganizationId:
      name: organizationId
      in: path
      description: 'Organization Identifier'
      required: true
      schema:
        type: integer
    DirectoryId:
      name: directoryId
      in: path
      description: 'Directory Identifier. Get via [List Directories](#operation/api.projects.directories.getMany)'
      required: true
      schema:
        type: integer
    SourceId:
      name: sourceId
      in: path
      description: 'Source Identifier'
      required: true
      schema:
        type: integer
    Revision:
      name: revision
      in: path
      description: 'Revision number'
      required: true
      schema:
        type: integer
    JobId:
      name: jobId
      in: path
      description: 'Job Identifier'
      required: true
      schema:
        type: integer
    JobIdentifier:
      name: jobIdentifier
      in: path
      description: 'Job Identifier'
      required: true
      schema:
        type: string
    StorageId:
      name: storageId
      in: path
      description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
      required: true
      schema:
        type: integer
        format: int64
        example: 1
    GroupId:
      name: groupId
      in: path
      description: 'Group Identifier. Get via [List Groups](#operation/api.groups.getMany)'
      required: true
      schema:
        type: integer
    GlossaryId:
      name: glossaryId
      in: path
      description: 'Glossary Identifier. Get via [List Glossaries](#operation/api.glossaries.getMany)'
      required: true
      schema:
        type: integer
    TaskId:
      name: taskId
      in: path
      description: 'Task Identifier. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
      required: true
      schema:
        type: integer
    IssueId:
      name: issueId
      in: path
      description: 'Issue Identifier. Get via [List Reported Issues](#operation/api.projects.issues.getMany)'
      required: true
      schema:
        type: integer
    TmId:
      name: tmId
      in: path
      description: 'TM Identifier. Get via [List TMs](#operation/api.tms.getMany)'
      required: true
      schema:
        type: integer
    SegmentId:
      name: segmentId
      in: path
      description: 'TM Segment Identifier. Get via [List TM Segments](#operation/api.tms.segments.getMany)'
      required: true
      schema:
        type: integer
    RecordId:
      name: recordId
      in: path
      description: 'TM Segment Record Identifier. Get via [Get TM Segments](#operation/api.tms.segments.get)'
      required: true
      schema:
        type: integer
    BuildId:
      name: buildId
      in: path
      description: 'Project Build Identifier. Get via [List Project Builds](#operation/api.projects.translations.builds.getMany)'
      required: true
      schema:
        type: integer
    ReviewedSourceFilesBuildId:
      name: buildId
      in: path
      description: 'Project Reviewed Source Files Build Identifier. Get via [List Reviewed Source Files Builds](#operation/api.projects.strings.reviewed-builds.getMany)'
      required: true
      schema:
        type: integer
    WebhookId:
      name: webhookId
      in: path
      description: 'Webhook Identifier. Get via [List Webhooks](#operation/api.projects.webhooks.getMany)'
      required: true
      schema:
        type: integer
    OrganizationWebhookId:
      name: organizationWebhookId
      in: path
      description: 'Webhook Identifier. Get via [List Webhooks](#operation/api.webhooks.getMany)'
      required: true
      schema:
        type: integer
    StringId:
      name: stringId
      in: path
      description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
      required: true
      schema:
        type: integer
    CommentId:
      name: commentId
      in: path
      description: 'String Comment Identifier. Get via [List String Comments](#operation/api.projects.strings.comments.getMany)'
      required: true
      schema:
        type: integer
    TranslationId:
      name: translationId
      in: path
      description: 'Translation Identifier. Get via [List String Translations](#operation/api.projects.translations.getMany)'
      required: true
      schema:
        type: integer
    ApprovalId:
      name: approvalId
      in: path
      description: 'Approval Identifier. Get via [List Translation Approvals](#operation/api.projects.approvals.getMany)'
      required: true
      schema:
        type: integer
    VoteId:
      name: voteId
      in: path
      description: 'Vote Identifier. Get via [List Translation Votes](#operation/api.projects.votes.getMany)'
      required: true
      schema:
        type: integer
    TermId:
      name: termId
      in: path
      description: 'Term Identifier. Get via [List Terms](#operation/api.glossaries.terms.getMany)'
      required: true
      schema:
        type: integer
    ScreenshotId:
      name: screenshotId
      in: path
      description: 'Screenshot Identifier. Get via [List Screenshots](#operation/api.projects.screenshots.getMany)'
      required: true
      schema:
        type: integer
    ExportGlossaryId:
      name: exportId
      in: path
      description: 'Export Identifier, consists of 36 characters. Get via [Export Glossary](#operation/api.glossaries.exports.post)'
      required: true
      schema:
        type: string
    ExportTMId:
      name: exportId
      in: path
      description: 'Export Identifier, consists of 36 characters. Get via [Export TM](#operation/api.tms.exports.post)'
      required: true
      schema:
        type: string
    ExportBundleId:
      name: exportId
      in: path
      description: 'Export Identifier, consists of 36 characters. Get via [Export Bundle](#operation/api.projects.bundles.exports.post)'
      required: true
      schema:
        type: string
    StringsUploadId:
      name: uploadId
      in: path
      description: 'Upload Strings Identifier, consists of 36 characters. Get via [Upload Strings](#operation/api.projects.strings.uploads.post)'
      required: true
      schema:
        type: string
    ImportTMId:
      name: importId
      in: path
      description: 'Import Identifier, consists of 36 characters. Get via [Import TM](#operation/api.tms.imports.post)'
      required: true
      schema:
        type: string
    ImportGlossaryId:
      name: importId
      in: path
      description: 'Import Identifier, consists of 36 characters. Get via [Import Glossary](#operation/api.glossaries.imports.post)'
      required: true
      schema:
        type: string
    PreTranslationId:
      name: jobIdentifier
      in: path
      description: 'Auto-translation Identifier. Get via [Apply Auto-Translation](#operation/api.projects.pre-translations.post)'
      required: true
      schema:
        type: string
    TagId:
      name: tagId
      in: path
      description: 'Tag Identifier. Get via [List Tags](#operation/api.projects.screenshots.tags.getMany)'
      required: true
      schema:
        type: integer
    ReportId:
      name: reportId
      in: path
      description: 'Report Identifier, consists of 36 characters'
      required: true
      schema:
        type: string
    MtId:
      name: mtId
      in: path
      description: 'Machine Translation engine identifier'
      required: true
      schema:
        type: integer
    AiProviderId:
      name: aiProviderId
      in: path
      description: 'AI Provider identifier. Get via [List AI Providers](#operation/api.ai.providers.getMany)'
      required: true
      schema:
        type: integer
    AiPromptId:
      name: aiPromptId
      in: path
      description: 'AI Prompt identifier. Get via [List AI Prompts](#operation/api.ai.prompts.getMany)'
      required: true
      schema:
        type: integer
    AiCustomPlaceholderId:
      name: aiCustomPlaceholderId
      in: path
      description: 'AI Custom Placeholder identifier. Get via [List AI Custom Placeholders](#operation/api.ai.prompts.custom.placeholders.getMany)'
      required: true
      schema:
        type: integer
    AiSnippetId:
      name: aiSnippetId
      in: path
      description: 'AI Snippet identifier. Get via [List AI Snippets](#operation/api.ai.prompts.snippets.getMany)'
      required: true
      schema:
        type: integer
    AiReportId:
      name: aiReportId
      in: path
      description: 'AI Report Identifier, consists of 36 characters'
      required: true
      schema:
        type: string
    AiRequestLogExportId:
      name: exportId
      in: path
      description: 'ID of the AI request logs export, 36 characters. Get via [Export AI Request Logs](#operation/api.ai.requestLogs.exports.post)'
      required: true
      schema:
        type: string
    AutomationRuleId:
      name: automationRuleId
      in: path
      description: 'Automation Rule identifier. Get via [List Automation Rules](#operation/api.automation.rules.getMany)'
      required: true
      schema:
        type: integer
    AutomationRuleExecutionId:
      name: executionId
      in: path
      description: 'Automation Rule Execution identifier. Get via [List Automation Rule Executions](#operation/api.automation.rules.executions.getMany)'
      required: true
      schema:
        type: integer
    SubscriptionId:
      name: subscriptionId
      in: path
      description: 'Channel Subscription Identifier'
      required: true
      schema:
        type: string
    templateId:
      name: templateId
      in: path
      description: 'Workflow Template Identifier. Get via [List Workflow Templates](#operation/api.workflow-templates.getMany)'
      required: true
      schema:
        type: integer
    CustomQaCheckId:
      name: customQaCheckId
      in: path
      description: 'Custom QA check identifier'
      required: true
      schema:
        type: integer
    ExternalQaCheckId:
      name: externalQaCheckId
      in: path
      description: 'External QA check identifier'
      required: true
      schema:
        type: integer
    CustomPlaceholderId:
      name: customPlaceholderId
      in: path
      description: 'Custom Placeholder identifier'
      required: true
      schema:
        type: integer
    ProjectPlaceholderId:
      name: projectPlaceholderId
      in: path
      description: 'Project Placeholder identifier'
      required: true
      schema:
        type: integer
    StepId:
      name: stepId
      in: path
      description: 'Workflow Step Identifier'
      required: true
      schema:
        type: integer
    Identifier:
      name: identifier
      in: path
      description: 'Application Identifier. Get via [List Applications](#operation/api.applications.getMany)'
      required: true
      schema:
        type: string
    ApplicationModuleKey:
      name: applicationModuleKey
      in: path
      description: 'Application Module Key. Get via [List Applications](#operation/api.applications.getMany)'
      required: true
      schema:
        type: string
    StorageFileName:
      name: Crowdin-API-FileName
      in: header
      description: "Url encoded file name.\n\n`ZIP` files are not allowed."
      required: true
      schema:
        type: string
    TeamId:
      name: teamId
      in: path
      description: 'Team Identifier. Get via [List Teams](#operation/api.teams.getMany)'
      required: true
      schema:
        type: integer
    LabelId:
      name: labelId
      in: path
      description: 'Label Identifier. Get via [List Labels](#operation/api.projects.labels.getMany)'
      required: true
      schema:
        type: integer
    VendorId:
      name: vendorId
      in: path
      description: 'Vendor Identifier. Get via [List Vendors](#operation/api.vendors.getMany)'
      required: true
      schema:
        type: integer
    BundleId:
      name: bundleId
      in: path
      description: 'Bundle Identifier. Get via [List Bundles](#operation/api.projects.bundles.getMany)'
      required: true
      schema:
        type: integer
    UserReportSettingsTemplateId:
      name: reportSettingsTemplateId
      in: path
      description: 'Report Settings Template Identifier. Get via [List User Report Settings Template](#operation/api.users.reports.settings-templates.getMany)'
      required: true
      schema:
        type: integer
    AuthenticatedUser:
      name: userId
      in: path
      description: 'User Identifier. Get via [Get Authenticated User](#operation/api.user.get)'
      required: true
      schema:
        type: integer
    TaskSettingsTemplateId:
      name: taskSettingsTemplateId
      in: path
      description: 'Task Settings Template Identifier. Get via [List Report Settings Template](#operation/api.projects.tasks.settings-templates.getMany)'
      required: true
      schema:
        type: integer
    TaskCommentId:
      name: commentId
      in: path
      description: 'Unique identifier for the task comment. Obtain the ID using the [List Task Comments](#operation/api.projects.tasks.comments.getMany) endpoint.'
      required: true
      schema:
        type: integer
    ConceptId:
      name: conceptId
      in: path
      description: 'Concept Identifier. Get via [List Concepts](#operation/api.glossaries.concepts.getMany)'
      required: true
      schema:
        type: integer
    FileFormatSettingsId:
      name: fileFormatSettingsId
      in: path
      description: 'File Format Settings Identifier. Get via [List Project File Format Settings](#operation/api.projects.file-format-settings.getMany)'
      required: true
      schema:
        type: integer
    ApplicationIdentifier:
      name: applicationIdentifier
      in: path
      description: 'Identifier of the application. Get via [List Application Installations](#operation/api.applications.installations.getMany)'
      required: true
      schema:
        type: string
    Path:
      name: path
      in: path
      description: 'The path is implemented by the application.'
      required: true
      schema:
        type: string
    SystemStringsExporterSettingsId:
      name: systemStringsExporterSettingsId
      in: path
      description: 'System strings exporter Settings Identifier. Get via [List Project Strings Exporter Settings](#operation/api.projects.strings-exporter-settings.getMany)'
      required: true
      schema:
        type: integer
    FieldId:
      name: fieldId
      in: path
      description: 'Field Identifier. Get via [List Fields](#operation/api.fields.getMany)'
      required: true
      schema:
        type: integer
    CloneBranchId:
      name: cloneId
      in: path
      description: 'Clone Branch Identifier, consists of 36 characters. Get via [Clone Branch](#operation/api.projects.branches.clones.post)'
      required: true
      schema:
        type: string
    MergeBranchId:
      name: mergeId
      in: path
      description: 'Merge Branch Identifier, consists of 36 characters. Get via [Merge Branch](#operation/api.projects.branches.merges.post)'
      required: true
      schema:
        type: string
    ReportArchiveId:
      name: archiveId
      in: path
      description: 'Report archive identifier. Get via [List Report Archives](#operation/api.reports.archives.getMany)'
      required: true
      schema:
        type: integer
    ExportArchiveId:
      name: exportId
      in: path
      description: 'Export Identifier, consists of 36 characters. Get via [Export Report Archive](#operation/api.reports.archives.exports.post)'
      required: true
      schema:
        type: string
    AiPromptFineTuningDatasetGenerationId:
      name: jobIdentifier
      in: path
      description: 'AI Prompt Fine-Tuning Dataset Generation Identifier, consists of 36 characters. Get via [Generate AI Prompt Fine-Tuning Dataset](#operation/api.ai.prompts.fine-tuning.datasets.post)'
      required: true
      schema:
        type: string
    AiPromptFineTuningJobId:
      name: jobIdentifier
      in: path
      description: 'AI Prompt Fine-Tuning Job Identifier, consists of 36 characters. Get via [Create AI Prompt Fine-Tuning Job](#operation/api.ai.prompts.fine-tuning.jobs.post)'
      required: true
      schema:
        type: string
    CompletionId:
      name: completionId
      in: path
      description: 'Ai Prompt Completion Identifier. [Add AI Prompt Completions Job](#operation/api.ai.prompts.completions.post)'
      required: true
      schema:
        type: string
    SecurityLogCreatedAfter:
      name: createdAfter
      in: query
      description: 'Date in UTC, ISO 8601'
      schema:
        type: string
      example: '2024-01-10T10:41:33+00:00'
    SecurityLogCreatedBefore:
      name: createdBefore
      in: query
      description: 'Date in UTC, ISO 8601'
      schema:
        type: string
      example: '2024-01-26T10:33:43+00:00'
    RequiredStringIdInQuery:
      name: stringId
      in: query
      description: 'String Identifier. Get via [List Strings](#operation/api.projects.strings.getMany)'
      required: true
      schema:
        type: integer
      example: '2'
    TaskIdInQuery:
      name: taskId
      in: query
      description: 'Filter the collection by the specified task id. Get via [List Tasks](#operation/api.projects.tasks.getMany)'
      required: false
      schema:
        type: integer
        minimum: 0
      example: '2'
  requestBodies:
    AiGatewayRequestBody:
      description: 'Request body as expected by the target AI provider'
      required: false
      content:
        application/json:
          schema:
            type: object
        text/plain:
          schema:
            type: string
        application/octet-stream:
          schema:
            type: string
            format: binary
tags:
  -
    name: Projects
    description: "\nUsing projects, you can keep your source files sorted.\n\nUse API to manage projects, change their settings, or remove them if required.\n"
    x-doc-sections:
      - file-based
  -
    name: Storage
    description: "\nStorage is a separate container for each file. You need to use _Add Storage_ method before adding files to your projects via API. Files that should be uploaded into storage include files for localization, screenshots, Glossaries, and Translation Memories.\n\n_Storage id_ is the identifier of the file uploaded to the Storage.\n\n__Note:__ Files uploaded to the storage are kept during the next 24 hours.\n"
  -
    name: 'Source Files'
    description: "\nSource files are resources for translation. You can keep files structure using folders or manage different versions of the content via branches.\n\nUse API to keep the source files up to date, check on file revisions, and manage project branches. Before adding source files to the project, upload each file to the Storage first.\n\n__Note:__ If you use branches, make sure your master branch is the first one you integrate with Crowdin.\n"
    x-doc-sections:
      - file-based
  -
    name: 'Source Strings'
    description: "\nSource strings are the text units for translation. Instead of modifying source files, you can manage source strings one by one.\n\nUse API to add, edit, or delete some specific strings in the source-based and file-based projects (available only for the following file formats: CSV, RESX, JSON, Android XML, iOS strings, PROPERTIES, XLIFF).\n"
  -
    name: Translations
    description: "\nTranslators can work with entirely untranslated project or you can auto-translate the files to ease the translations process.\n\nUse API to auto-translate files via Machine Translation (MT) or Translation Memory (TM), upload your existing translations, and download translations correspondingly. Auto-translate and build are [asynchronous operations](#section/Introduction/Asynchronous-Operations) and shall be completed with sequence of API methods.\n\n__Note:__ If there are no new translations or changes in build parameters, Crowdin will return the current build for such requests.\n"
  -
    name: 'String/Asset Translations'
    description: 'Use API to add or remove strings/asset translations, approvals, and votes.'
  -
    name: 'Translation Status'
    description: "\nStatus represents the general localization progress on both translations and proofreading.\n\nUse API to check translation and proofreading progress on different levels: file, language, branch, directory.\n"
  -
    name: Distributions
    description: "\nDistributions allow you to deliver translated content to your applications Over-The-Air (OTA).\n\nUse API to manage distributions and release them so that the latest translations become available to your users.\n"
  -
    name: Reports
    description: "\nReports help to estimate costs, calculate translation costs, and identify the top members.\n\nUse API to generate Cost Estimate, Translation Cost, and Top Members reports. You can then export reports in .xlsx or .csv file formats. Report generation is an [asynchronous operation](#section/Introduction/Asynchronous-Operations) and shall be completed with a sequence of API methods.\n"
  -
    name: Tasks
    description: "\nCreate and assign tasks to get files translated or proofread by specific people. You can set the due dates, split words between people, and receive notifications about the changes and updates on tasks. Tasks are project-specific, so you’ll have to create them within a project.\n\nUse API to create, modify, and delete specific tasks.\n"
  -
    name: 'String/Asset Comments'
    description: 'Use API to list, add, edit or remove string/asset comments.'
  -
    name: 'Translation Memory'
    description: "\nTranslation Memory (TM) is a vault of translations that were previously made in other projects. Those translations can be reused to speed up the translation process. Every translation made in the project is automatically added to the project Translation Memory.\n\nUse API to create, upload, download, or remove specific TM. Translation Memory export and import are [asynchronous operations](#section/Introduction/Asynchronous-Operations) and shall be completed with sequence of API methods.\n"
  -
    name: Glossaries
    description: "\nGlossaries help to explain some specific terms or the ones often used in the project so that they can be properly and consistently translated.\n\nUse API to manage glossaries or specific terms. Glossary export and import are [asynchronous operations](#section/Introduction/Asynchronous-Operations) and shall be completed with sequence of API methods.\n"
  -
    name: 'Style Guides'
    description: "\nStyle Guides help to provide additional context for the translators.\n\nUse API to manage style guides.\n"
  -
    name: 'Machine Translation Engines'
    description: "\nMachine Translation Engines (MTE) are the sources for auto-translations. You can currently connect Google Translate, Microsoft Translator, Crowdin Translate, DeepL Pro and Amazon Translate engines.\n\nUse API to add, update, and delete specific MTE.\n"
  -
    name: Screenshots
    description: "\nScreenshots provide translators with additional context for the source strings. Screenshot tags allow specifying which source strings are displayed on each screenshot.\n\nUse API to manage screenshots and their tags.\n"
  -
    name: Labels
    description: "\nLabels help you organize and group strings in your project.\n\nUse API to manage labels and to assign them to strings and screenshots.\n"
  -
    name: Dictionaries
    description: "\nDictionaries allow you to create a storage of words that should be skipped by the spell checker.\n\nUse API to get the list of organization dictionaries and to edit a specific dictionary.\n"
  -
    name: Placeholders
    description: "\nPlaceholders are the parts of a string that carry a value instead of text — format specifiers, variables, and template constructs. Crowdin ships a fixed set of them, the system placeholders, and recognizes each one per project.\n\nUse API to get the system placeholders of a project and to turn them on or off.\n\nThe unified placeholder Crowdin writes when a project unifies placeholders — `[%s]` — is not on this list. It is governed by the `unifiedPlaceholders` QA check category of the project, not by a placeholder setting.\n\nSeveral of these placeholders match the same construct, so turning one off is not always enough on its own: a construct stays recognized — by the QA checks as well as the Editor — while any placeholder that matches it is still on. To stop a construct being reported, turn off every placeholder that matches it. The Editor is stricter still: it drops a construct only once nothing that stays could claim part of it.\n\nMachine Translation and Translation Memory always recognize every placeholder, whatever a project sets.\n\nSystem placeholder keys, and the syntax or file format each one comes from:\n\n- `wrappedAmpersand` — ampersand-wrapped variables; lowercase letters and underscores only between the ampersands (e.g. `&user_name&`)\n- `appleStringsdictPlural` — Apple plural variables in `.stringsdict` files and String Catalogs (e.g. `%1$#@variable@`)\n- `dollarInsideBraces` — `{$name}` variables in Smarty and PHP templates (e.g. `{$shop_name}`)\n- `dollarOutsideBraces` — `${name}` interpolation in JavaScript, Java EL, Gradle, and shell (e.g. `${user.name}`)\n- `wrappedColon` — colon-wrapped variables; needs a colon on both sides, so the single-colon Laravel `:name` is not covered (e.g. `:placeholder:`)\n- `wrappedDollar` — dollar-wrapped variables, used by Visual Studio templates (e.g. `$placeholder$`)\n- `dollarParentheses` — `$(name)` variables in MSBuild, Xcode build settings, and Make (e.g. `$(user_name)`)\n- `i18nextNesting` — i18next nesting: keys that reference other keys (e.g. `$t(common.nesting)`)\n- `i18nextLegacy` — i18next interpolation before v4 (e.g. `__count__`)\n- `rubyInterpolation` — Ruby-style interpolation in Ruby, Jakarta EL, and Thymeleaf (e.g. `#{value}`)\n- `mailchimpMergeTag` — Mailchimp merge tags in email campaigns (e.g. `*|Model.FullName|*`)\n- `swiftInterpolation` — Swift string interpolation in source strings (e.g. `\\(apples)`)\n- `bracesTriple` — Handlebars triple braces, the output that is not escaped (e.g. `{{{title}}}`)\n- `bracesDouble` — double braces in Mustache, Handlebars, Angular, and Vue (e.g. `{{name}}`)\n- `bracesSingle` — single braces in Python `str.format`, ICU, and Vue I18n (e.g. `{name}`)\n- `bracesDoubleFormatted` — i18next values with a format applied (e.g. `{{date, MM/DD/YYYY}}`, `{{text, uppercase}}`)\n- `dateTimePattern` — a date or time built from several `strftime` parts (e.g. `%Y-%m-%d`, `%H:%i:%s`)\n- `appleStringCatalogNamed` — Apple String Catalog substitutions (e.g. `%(name)@`)\n- `printfSpecifier` — C-style format specifiers in C, PHP, Java, Objective-C, and Android, plus the numbered form of Qt `tr()` (e.g. `%s`, `%1$d`, `%1`)\n- `pythonPercentFormat` — named specifiers in Python and gettext (e.g. `%(count)d`, `%(placeholder)s`)\n- `railsI18n` — Rails i18n values in Ruby on Rails and Vue I18n, and double braces holding a path in Mustache, Liquid, and Rails templates (e.g. `%{count}`, `{{ name.first }}`)\n- `javaMessageFormat` — Java MessageFormat in Java properties files and resource bundles (e.g. `{0}`, `{0,number,integer}`)\n- `dotNetCompositeFormat` — composite formatting in .NET and C# format strings (e.g. `{0}`, `{0,10:f}`)\n- `twig` — Twig tags and statements, the template logic rather than the text (e.g. `{{ data() }}`, `{% endif %}`)\n- `phpInterpolation` — PHP variables in source strings, bare or braced (e.g. `$variable`, `{$user->name}`)\n- `freemarkerDirective` — FreeMarker tags in `.ftl` templates (e.g. `<#if condition>`, `<#include /common/copyright.ftl>`)\n- `wrappedPercent` — percent-wrapped variables in Symfony and Windows environment variables (e.g. `%invitation_url%`)\n- `dateTimeSpecifier` — a single `strftime` date or time component (e.g. `%d`)\n"
  -
    name: Users
    description: "\nUsers API gives you the possibility to get profile information about the currently authenticated user.\n"
  -
    name: Notifications
    description: 'Use API to send custom notifications to the authenticated user or project members.'
  -
    name: AI
    description: "\nAI features help you translate content and perform other localization tasks using the configured AI providers.\n\nUse API to manage AI providers, prompts, settings, and custom placeholders, to run AI-powered translations, and to generate AI reports.\n"
  -
    name: 'AI Gateway'
    description: "The AI Gateway acts as a transparent reverse proxy to the configured AI provider.\n\nSet this endpoint's base URL as the `base_url` in your AI SDK client (OpenAI, Anthropic, Google Gemini, etc.), and use your Crowdin API token as the API key.\n\nThe request body and response format depend entirely on the target AI provider.\n\nPlease refer to the respective provider's API documentation for payload structure.\n\n**Supported providers:** OpenAI, Anthropic, Google Gemini AI Studio\n\n**Authentication:** The gateway accepts credentials in the format native to each provider's SDK:\n- `Authorization: Bearer <token>` (OpenAI and compatible)\n- `x-api-key: <token>` (Anthropic)\n- `x-goog-api-key: <token>` (Google Gemini)\n\nAll of these are interpreted as Crowdin API tokens. The actual provider API key is managed server-side via AI Provider configuration.\n"
  -
    name: Languages
    description: "\nCrowdin supports more than 300 world languages and custom languages created in the system.\n\nUse API to get the list of all supported languages and retrieve additional details (e.g. text direction, internal code) on specific language.\n"
  -
    name: Webhooks
    description: "\nWebhooks allow you to collect information about events that happen in your Crowdin projects. You can select the request type, content type, and add a custom payload, which allows you to create integrations with other systems on your own.\n\nYou can configure webhooks for the following events:\n * project file is fully translated\n * project file is fully reviewed\n * project file is fully QA checked\n * all strings in project are translated\n * all strings in project are reviewed\n * all strings in project QA check are finished\n * final translation of string is updated (using Replace in suggestions feature)\n * source string is added\n * source string is updated\n * source string is deleted\n * source string is translated\n * translation for source string is updated (using Replace in suggestions feature)\n * one of translations is deleted\n * translation for string is approved\n * approval for previously added translation is removed\n\nUse API to create, modify, and delete specific webhooks.\n"
    x-doc-sections:
      - file-based
  -
    name: 'Organization Webhooks'
    description: "\nWebhooks allow you to collect information about events that happen in your Crowdin account. You can select the request type, content type, and add a custom payload, which allows you to create integrations with other systems on your own.\n\nYou can configure webhooks for the following events:\n * project is created\n * project is deleted\n\nUse API to create, modify, and delete specific webhooks.\n"
  -
    name: Applications
    description: "\nCrowdin Apps are web applications that can be integrated with Crowdin to extend its functionality.\n\nUse the API to manage the necessary app data.\n"
  -
    name: Integrations
    description: "\nIntegration applications provide synchronization between Crowdin and external content management systems.\n\nUse the API to manage integration files, jobs, settings, and authentication.\n"
  -
    name: Advisor
    description: "\nAdvisor checks your project setup and content and provides insights with recommendations for improving your localization workflow. Installed applications can extend Advisor with their own checks.\n\nUse API to manage advisor insights and to run advisor checks.\n"
  -
    name: 'Security Logs'
    description: "\nSecurity logs keep track of security-related activities within your account (e.g. login, password change).\n\nUse API to get the list of user security logs and to check the details of a specific security log record.\n"
  -
    name: Issues
    description: "\nIssues can be raised by the project members in the Editor and should be resolved by the project managers. Issues could be related to some source strings and translations within the project.\n\nUse API to get and resolve the reported issues.\n"
