From fff0a3d914ee59f7f7abc8e4a159e6e257b22286 Mon Sep 17 00:00:00 2001
From: andrii-bodnar <29282228+andrii-bodnar@users.noreply.github.com>
Date: Thu, 13 Nov 2025 12:02:15 +0000
Subject: [PATCH] chore(developer): update API docs
---
src/assets/api/crowdin/file-based.yml | 525 +++++++++++++++++-
src/assets/api/crowdin/string-based.yml | 529 +++++++++++++++++-
src/assets/api/enterprise/file-based.yml | 575 ++++++++++++++++++--
src/assets/api/enterprise/string-based.yml | 589 +++++++++++++++++++--
4 files changed, 2092 insertions(+), 126 deletions(-)
diff --git a/src/assets/api/crowdin/file-based.yml b/src/assets/api/crowdin/file-based.yml
index 8e7f8bb3..bda7a77a 100644
--- a/src/assets/api/crowdin/file-based.yml
+++ b/src/assets/api/crowdin/file-based.yml
@@ -15120,6 +15120,7 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorExceptionResource'
+ deprecated: true
'/projects/{projectId}/translations/builds/{buildId}/download':
get:
tags:
@@ -15361,6 +15362,183 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailableExceptionResource'
+ '/projects/{projectId}/translations/imports':
+ post:
+ tags:
+ - Translations
+ summary: 'Import Translations'
+ 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'
+ 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'
+ 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:
@@ -33618,34 +33796,47 @@ components:
- nestjs_i18n
- stringsdict
example: xliff
- StringBasedSpreadsheetFileImportOptions:
- title: 'Spreadsheet File Import Options'
+ StringBasedSpreadsheetFileUploadSchema:
+ title: 'Spreadsheet File Upload Schema for String-Based Projects'
+ description: 'Defines data columns mapping. The column numbering starts at 0'
properties:
- firstLineContainsHeader:
- description: 'Defines whether the file includes a first-row header that should not be imported'
- type: boolean
- default: false
- example: 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 Spreadsheet 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)."
+ none:
+ description: 'Defines empty column'
type: integer
- format: int64
- default: null
- example: 61
- importTranslations:
- description: 'Defines whether to import translations from the file'
- type: boolean
- default: false
- example: true
+ 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/SpreadsheetFileImportSchema'
+ $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadSchema'
type: object
- StringBasedFileImportOptions:
- title: 'File Import Options'
+ StringBasedFileUploadOptions:
+ title: 'File Upload Options'
type: object
example:
firstLineContainsHeader: true
@@ -33658,7 +33849,7 @@ components:
de: 3
oneOf:
-
- $ref: '#/components/schemas/StringBasedSpreadsheetFileImportOptions'
+ $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadOptions'
-
$ref: '#/components/schemas/StringBasedStringCatalogImportOptions'
-
@@ -33724,7 +33915,7 @@ components:
default: 'false'
example: true
importOptions:
- $ref: '#/components/schemas/StringBasedFileImportOptions'
+ $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
@@ -33952,7 +34143,7 @@ components:
type: boolean
example: false
importOptions:
- $ref: '#/components/schemas/StringBasedSpreadsheetFileImportOptions'
+ $ref: '#/components/schemas/StringBasedFileUploadOptions'
updateOption:
type: string
example: clear_translations_and_approvals
@@ -38742,6 +38933,85 @@ components:
- 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
+ - branchId
+ 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)
**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
@@ -38816,7 +39086,7 @@ components:
data:
$ref: '#/components/schemas/CrowdinProjectBuildResponse'
FileBasedTranslationFileImportResource:
- description: 'File Import Resource'
+ description: 'Translation Import Resource'
type: object
allOf:
-
@@ -38825,8 +39095,18 @@ components:
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: 'File Import Resource'
+ description: 'Translation Import Resource'
type: object
allOf:
-
@@ -38835,6 +39115,26 @@ components:
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'
description: 'Class AbstractDirectoryBuildResponseModel'
@@ -39029,6 +39329,73 @@ components:
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'
+ finishedAt:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ type: object
StringBasedTranslationFileImport:
title: String
type: object
@@ -39040,6 +39407,73 @@ components:
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'
+ finishedAt:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ type: object
TranslationFileImport:
title: String
properties:
@@ -39054,6 +39488,39 @@ components:
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 RFC 6902'
type: array
diff --git a/src/assets/api/crowdin/string-based.yml b/src/assets/api/crowdin/string-based.yml
index c750cfcb..3f41d280 100644
--- a/src/assets/api/crowdin/string-based.yml
+++ b/src/assets/api/crowdin/string-based.yml
@@ -13941,6 +13941,7 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorExceptionResource'
+ deprecated: true
'/projects/{projectId}/translations/exports':
post:
tags:
@@ -14013,6 +14014,183 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailableExceptionResource'
+ '/projects/{projectId}/translations/imports':
+ post:
+ tags:
+ - Translations
+ summary: 'Import Translations'
+ 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/StringBasedTranslationImportResource'
+ x-doc-sections:
+ - string-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'
+ 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/StringBasedTranslationImportResource'
+ x-doc-sections:
+ - string-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'
+ 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 string-based project'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TranslationImportReportResource'
+ x-doc-sections:
+ - string-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:
@@ -31940,34 +32118,47 @@ components:
- nestjs_i18n
- stringsdict
example: xliff
- StringBasedSpreadsheetFileImportOptions:
- title: 'Spreadsheet File Import Options'
+ StringBasedSpreadsheetFileUploadSchema:
+ title: 'Spreadsheet File Upload Schema for String-Based Projects'
+ description: 'Defines data columns mapping. The column numbering starts at 0'
properties:
- firstLineContainsHeader:
- description: 'Defines whether the file includes a first-row header that should not be imported'
- type: boolean
- default: false
- example: 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 Spreadsheet 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)."
+ none:
+ description: 'Defines empty column'
type: integer
- format: int64
- default: null
- example: 61
- importTranslations:
- description: 'Defines whether to import translations from the file'
- type: boolean
- default: false
- example: true
+ 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/SpreadsheetFileImportSchema'
+ $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadSchema'
type: object
- StringBasedFileImportOptions:
- title: 'File Import Options'
+ StringBasedFileUploadOptions:
+ title: 'File Upload Options'
type: object
example:
firstLineContainsHeader: true
@@ -31980,7 +32171,7 @@ components:
de: 3
oneOf:
-
- $ref: '#/components/schemas/StringBasedSpreadsheetFileImportOptions'
+ $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadOptions'
-
$ref: '#/components/schemas/StringBasedStringCatalogImportOptions'
-
@@ -32046,7 +32237,7 @@ components:
default: 'false'
example: true
importOptions:
- $ref: '#/components/schemas/StringBasedFileImportOptions'
+ $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
@@ -32274,7 +32465,7 @@ components:
type: boolean
example: false
importOptions:
- $ref: '#/components/schemas/StringBasedSpreadsheetFileImportOptions'
+ $ref: '#/components/schemas/StringBasedFileUploadOptions'
updateOption:
type: string
example: clear_translations_and_approvals
@@ -37031,6 +37222,87 @@ components:
- 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
+ - branchId
+ 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
+ branchId:
+ description: 'Branch Identifier for import. Get via [List Branches](#operation/api.projects.branches.getMany)'
+ type: integer
+ example: 2
+ x-doc-sections:
+ - string-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
+ importOptions:
+ $ref: '#/components/schemas/StringBasedFileImportOptions'
+ type: object
TranslationUploadForm:
required:
- storageId
@@ -37067,6 +37339,8 @@ components:
type: boolean
default: true
example: false
+ importOptions:
+ $ref: '#/components/schemas/StringBasedFileImportOptions'
type: object
CrowdinTranslationDirectoryBuildResource:
description: 'Translation Resource'
@@ -37105,7 +37379,7 @@ components:
data:
$ref: '#/components/schemas/CrowdinProjectBuildResponse'
FileBasedTranslationFileImportResource:
- description: 'File Import Resource'
+ description: 'Translation Import Resource'
type: object
allOf:
-
@@ -37114,8 +37388,18 @@ components:
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: 'File Import Resource'
+ description: 'Translation Import Resource'
type: object
allOf:
-
@@ -37124,6 +37408,26 @@ components:
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'
description: 'Class AbstractDirectoryBuildResponseModel'
@@ -37318,6 +37622,73 @@ components:
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'
+ finishedAt:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ type: object
StringBasedTranslationFileImport:
title: String
type: object
@@ -37329,6 +37700,73 @@ components:
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'
+ finishedAt:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ type: object
TranslationFileImport:
title: String
properties:
@@ -37343,6 +37781,39 @@ components:
type: string
example: uk
type: object
+ TranslationImportReport:
+ description: 'Translation Import Report'
+ properties:
+ languages:
+ type: array
+ items:
+ properties:
+ id:
+ type: string
+ example: fr
+ branches:
+ type: array
+ items:
+ properties: { id: { type: string, example: '34' }, 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:
+ - string-based
+ type: object
userPatch:
description: 'A JSON Patch document as defined by RFC 6902'
type: array
diff --git a/src/assets/api/enterprise/file-based.yml b/src/assets/api/enterprise/file-based.yml
index 72fec7c1..b165b5bd 100644
--- a/src/assets/api/enterprise/file-based.yml
+++ b/src/assets/api/enterprise/file-based.yml
@@ -17751,6 +17751,7 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorExceptionResource'
+ deprecated: true
'/projects/{projectId}/translations/builds/{buildId}/download':
get:
tags:
@@ -17992,6 +17993,183 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailableExceptionResource'
+ '/projects/{projectId}/translations/imports':
+ post:
+ tags:
+ - Translations
+ summary: 'Import Translations'
+ operationId: api.projects.translations.enterprise.imports
+ parameters:
+ -
+ $ref: '#/components/parameters/ProjectId'
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnterpriseTranslationImportForm'
+ 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'
+ operationId: api.projects.translations.enterprise.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'
+ 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'
'/projects/{projectId}/members':
get:
tags:
@@ -39200,34 +39378,47 @@ components:
- nestjs_i18n
- stringsdict
example: xliff
- StringBasedSpreadsheetFileImportOptions:
- title: 'Spreadsheet File Import Options'
+ StringBasedSpreadsheetFileUploadSchema:
+ title: 'Spreadsheet File Upload Schema for String-Based Projects'
+ description: 'Defines data columns mapping. The column numbering starts at 0'
properties:
- firstLineContainsHeader:
- description: 'Defines whether the file includes a first-row header that should not be imported'
- type: boolean
- default: false
- example: 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 Spreadsheet 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)."
+ none:
+ description: 'Defines empty column'
type: integer
- format: int64
- default: null
- example: 61
- importTranslations:
- description: 'Defines whether to import translations from the file'
- type: boolean
- default: false
- example: true
+ 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/SpreadsheetFileImportSchema'
+ $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadSchema'
type: object
- StringBasedFileImportOptions:
- title: 'File Import Options'
+ StringBasedFileUploadOptions:
+ title: 'File Upload Options'
type: object
example:
firstLineContainsHeader: true
@@ -39240,7 +39431,7 @@ components:
de: 3
oneOf:
-
- $ref: '#/components/schemas/StringBasedSpreadsheetFileImportOptions'
+ $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadOptions'
-
$ref: '#/components/schemas/StringBasedStringCatalogImportOptions'
-
@@ -39306,7 +39497,7 @@ components:
default: 'false'
example: true
importOptions:
- $ref: '#/components/schemas/StringBasedFileImportOptions'
+ $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
@@ -39603,7 +39794,7 @@ components:
type: boolean
example: false
importOptions:
- $ref: '#/components/schemas/StringBasedSpreadsheetFileImportOptions'
+ $ref: '#/components/schemas/StringBasedFileUploadOptions'
updateOption:
type: string
example: clear_translations_and_approvals
@@ -44776,9 +44967,54 @@ components:
type: boolean
example: true
type: object
+ EnterpriseTranslationImportForm:
+ required:
+ - storageId
+ - branchId
+ 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)
**Note:** Required for content in all formats except XLIFF'
+ type: integer
+ example: 2
+ x-doc-sections:
+ - file-based
+ languageIds:
+ description: 'Language Identifiers. Get via [Project Target Languages](#operation/api.projects.get)'
+ type: array
+ items:
+ type: string
+ example:
+ - en
+ 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
EnterpriseTranslationUploadForm:
required:
- storageId
+ - branchId
properties:
storageId:
description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
@@ -44872,6 +45108,85 @@ components:
- 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
+ - branchId
+ 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)
**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
@@ -44946,7 +45261,7 @@ components:
data:
$ref: '#/components/schemas/EnterpriseProjectBuildResponse'
FileBasedTranslationFileImportResource:
- description: 'File Import Resource'
+ description: 'Translation Import Resource'
type: object
allOf:
-
@@ -44955,8 +45270,18 @@ components:
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: 'File Import Resource'
+ description: 'Translation Import Resource'
type: object
allOf:
-
@@ -44965,6 +45290,26 @@ components:
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'
description: 'Class AbstractDirectoryBuildResponseModel'
@@ -45158,6 +45503,73 @@ components:
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'
+ finishedAt:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ type: object
StringBasedTranslationFileImport:
title: String
type: object
@@ -45169,6 +45581,73 @@ components:
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'
+ finishedAt:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ type: object
TranslationFileImport:
title: String
properties:
@@ -45183,6 +45662,39 @@ components:
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 RFC 6902'
type: array
@@ -45704,11 +46216,6 @@ components:
items:
type: string
example: authenticatorApp
- ssoProviders:
- type: array
- items:
- type: string
- example: GitHub
EnterpriseUserManagerContextResponseModel:
title: 'User details for managers'
properties:
diff --git a/src/assets/api/enterprise/string-based.yml b/src/assets/api/enterprise/string-based.yml
index 55b1ab98..6d9754af 100644
--- a/src/assets/api/enterprise/string-based.yml
+++ b/src/assets/api/enterprise/string-based.yml
@@ -16356,6 +16356,7 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/InternalServerErrorExceptionResource'
+ deprecated: true
'/projects/{projectId}/translations/exports':
post:
tags:
@@ -16428,6 +16429,183 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/ServiceUnavailableExceptionResource'
+ '/projects/{projectId}/translations/imports':
+ post:
+ tags:
+ - Translations
+ summary: 'Import Translations'
+ operationId: api.projects.translations.enterprise.imports
+ parameters:
+ -
+ $ref: '#/components/parameters/ProjectId'
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/EnterpriseTranslationImportForm'
+ responses:
+ '202':
+ description: 'Import Translations was successfully started'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/StringBasedTranslationImportResource'
+ x-doc-sections:
+ - string-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'
+ operationId: api.projects.translations.enterprise.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/StringBasedTranslationImportResource'
+ x-doc-sections:
+ - string-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'
+ 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 string-based project'
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/TranslationImportReportResource'
+ x-doc-sections:
+ - string-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'
'/projects/{projectId}/members':
get:
tags:
@@ -37306,34 +37484,47 @@ components:
- nestjs_i18n
- stringsdict
example: xliff
- StringBasedSpreadsheetFileImportOptions:
- title: 'Spreadsheet File Import Options'
+ StringBasedSpreadsheetFileUploadSchema:
+ title: 'Spreadsheet File Upload Schema for String-Based Projects'
+ description: 'Defines data columns mapping. The column numbering starts at 0'
properties:
- firstLineContainsHeader:
- description: 'Defines whether the file includes a first-row header that should not be imported'
- type: boolean
- default: false
- example: 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 Spreadsheet 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)."
+ none:
+ description: 'Defines empty column'
type: integer
- format: int64
- default: null
- example: 61
- importTranslations:
- description: 'Defines whether to import translations from the file'
- type: boolean
- default: false
- example: true
+ 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/SpreadsheetFileImportSchema'
+ $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadSchema'
type: object
- StringBasedFileImportOptions:
- title: 'File Import Options'
+ StringBasedFileUploadOptions:
+ title: 'File Upload Options'
type: object
example:
firstLineContainsHeader: true
@@ -37346,7 +37537,7 @@ components:
de: 3
oneOf:
-
- $ref: '#/components/schemas/StringBasedSpreadsheetFileImportOptions'
+ $ref: '#/components/schemas/StringBasedSpreadsheetFileUploadOptions'
-
$ref: '#/components/schemas/StringBasedStringCatalogImportOptions'
-
@@ -37412,7 +37603,7 @@ components:
default: 'false'
example: true
importOptions:
- $ref: '#/components/schemas/StringBasedFileImportOptions'
+ $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
@@ -37709,7 +37900,7 @@ components:
type: boolean
example: false
importOptions:
- $ref: '#/components/schemas/StringBasedSpreadsheetFileImportOptions'
+ $ref: '#/components/schemas/StringBasedFileUploadOptions'
updateOption:
type: string
example: clear_translations_and_approvals
@@ -42841,15 +43032,68 @@ components:
type: boolean
example: true
type: object
+ EnterpriseTranslationImportForm:
+ required:
+ - storageId
+ - branchId
+ properties:
+ storageId:
+ description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
+ type: integer
+ format: int64
+ example: 13
+ branchId:
+ description: 'Branch Identifier. Get via [List Branches](#operation/api.projects.branches.getMany)'
+ type: integer
+ example: 34
+ x-doc-sections:
+ - string-based
+ languageIds:
+ description: 'Language Identifiers. Get via [Project Target Languages](#operation/api.projects.get)'
+ type: array
+ items:
+ type: string
+ example:
+ - en
+ 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
+ importOptions:
+ $ref: '#/components/schemas/StringBasedFileImportOptions'
+ type: object
EnterpriseTranslationUploadForm:
required:
- storageId
+ - branchId
properties:
storageId:
description: 'Storage Identifier. Get via [List Storages](#operation/api.storages.getMany)'
type: integer
format: int64
example: 13
+ branchId:
+ description: 'Branch Identifier. Get via [List Branches](#operation/api.projects.branches.getMany)'
+ type: integer
+ example: 34
+ x-doc-sections:
+ - string-based
importEqSuggestions:
description: "Defines whether to add translation if it's the same as the source string"
type: boolean
@@ -42876,6 +43120,8 @@ components:
default: true
example: true
deprecated: true
+ importOptions:
+ $ref: '#/components/schemas/StringBasedFileImportOptions'
type: object
TranslationCreateDirectoryPseudoBuildForm:
required:
@@ -42931,6 +43177,87 @@ components:
- 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
+ - branchId
+ 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
+ branchId:
+ description: 'Branch Identifier for import. Get via [List Branches](#operation/api.projects.branches.getMany)'
+ type: integer
+ example: 2
+ x-doc-sections:
+ - string-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
+ importOptions:
+ $ref: '#/components/schemas/StringBasedFileImportOptions'
+ type: object
TranslationUploadForm:
required:
- storageId
@@ -42967,6 +43294,8 @@ components:
type: boolean
default: true
example: false
+ importOptions:
+ $ref: '#/components/schemas/StringBasedFileImportOptions'
type: object
EnterpriseTranslationDirectoryBuildResource:
description: 'Translation Resource'
@@ -43005,7 +43334,7 @@ components:
data:
$ref: '#/components/schemas/EnterpriseProjectBuildResponse'
FileBasedTranslationFileImportResource:
- description: 'File Import Resource'
+ description: 'Translation Import Resource'
type: object
allOf:
-
@@ -43014,8 +43343,18 @@ components:
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: 'File Import Resource'
+ description: 'Translation Import Resource'
type: object
allOf:
-
@@ -43024,6 +43363,26 @@ components:
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'
description: 'Class AbstractDirectoryBuildResponseModel'
@@ -43217,6 +43576,73 @@ components:
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'
+ finishedAt:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ type: object
StringBasedTranslationFileImport:
title: String
type: object
@@ -43228,6 +43654,73 @@ components:
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'
+ finishedAt:
+ type: string
+ format: date-time
+ example: null
+ nullable: true
+ type: object
TranslationFileImport:
title: String
properties:
@@ -43242,6 +43735,39 @@ components:
type: string
example: uk
type: object
+ TranslationImportReport:
+ description: 'Translation Import Report'
+ properties:
+ languages:
+ type: array
+ items:
+ properties:
+ id:
+ type: string
+ example: fr
+ branches:
+ type: array
+ items:
+ properties: { id: { type: string, example: '34' }, 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:
+ - string-based
+ type: object
userPatch:
description: 'A JSON Patch document as defined by RFC 6902'
type: array
@@ -43763,11 +44289,6 @@ components:
items:
type: string
example: authenticatorApp
- ssoProviders:
- type: array
- items:
- type: string
- example: GitHub
EnterpriseUserManagerContextResponseModel:
title: 'User details for managers'
properties: