{"openapi":"3.0.0","info":{"title":"NextCloud Application API","description":"API methods of this application cannot be called directly. Instead, you should trigger Crowdin's platform API endpoint, Crowdin will authorize your request and route it to this app.\n\nExample call for crowdin.com \n\n    curl --request GET \n    --url \"https://crowdin.com/api/v2/applications/nextcloud/api/data?report=raw&projects=479\" \n    --header \"Authorization: Bearer 70cf05deasdas78c84c73c4cf986ee0a3ee911w1dsad384e3c4asd1qdbbcf6b6db5732e\" \nExample call for Crowdin Enterprise \n\n    curl --request GET \n    --url \"https://acme.crowdin.com/api/v2/applications/nextcloud/api/data?report=raw&projects=479&startDate=2023-06-01T06%3A32%3A01.048Z&endDate=2023-06-23T06%3A32%3A01.048Z\" \n    --header \"Authorization: Bearer 70cf05dee35sad12rfes0a3ee911462e7b0723rfdfrg1e45bbcf6b6db5732e\" \n","version":"1.0.0","x-logo":{"url":"https://support.crowdin.com/assets/crowdin-logo.svg"}},"servers":[{"url":"{protocol}//{host}/api/v2/applications/nextcloud/api","variables":{"protocol":{"default":"https","enum":["https","http"],"description":"Protocol (https for production)"},"host":{"default":"crowdin.com","description":"Crowdin host (crowdin.com or {organization}.crowdin.com for Enterprise)"}}}],"paths":{"/crowdin-files":{"get":{"summary":"List Crowdin Files","operationId":"crowdin.files","tags":["Files"],"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"responses":{"200":{"description":"Project files list","content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/CrowdinFiles"}}}}}}}}},"/file-progress":{"get":{"tags":["Files"],"summary":"Get File Progress","operationId":"file.progress","parameters":[{"$ref":"#/components/parameters/ProjectId"},{"name":"fileId","in":"query","required":true,"description":"Get via [List Crowdin Files](#operation/crowdin.files)","schema":{"type":"integer","example":102}}],"responses":{"200":{"description":"File translation progress","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","description":"Translation progress data grouped by file ID","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/FileProgress"}}}},"example":{"data":{"78866":[{"languageId":"uk","eTag":"35ddc6c8f634f062e0de95c1c159f59d","language":{"id":"uk","name":"Ukrainian","editorCode":"uk","twoLettersCode":"uk","threeLettersCode":"ukr","locale":"uk-UA","androidCode":"uk-rUA","osxCode":"uk.lproj","osxLocale":"uk","pluralCategoryNames":["one","few","many","other"],"pluralRules":"((n%10==1 && n%100!=11) ? 0 : ...)","pluralExamples":["1, 21, 31...","2-4, 22-24..."],"textDirection":"ltr","dialectOf":null},"words":{"total":9,"translated":0,"preTranslateAppliedTo":0,"approved":0},"phrases":{"total":3,"translated":0,"preTranslateAppliedTo":0,"approved":0},"translationProgress":"0","approvalProgress":"0","qaChecksStatus":{"total":0,"inProgress":0,"passed":0,"failed":0}}]}}}}}}}}},"/integration-files":{"get":{"summary":"List Integration Files","operationId":"integration.files","tags":["Files"],"parameters":[{"$ref":"#/components/parameters/ProjectId"}],"responses":{"200":{"description":"Integration files list","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"files":{"$ref":"#/components/schemas/IntegrationFiles"},"message":{"type":"string","nullable":true,"description":"Optional message (e.g., error info)"},"stopPagination":{"type":"boolean","nullable":true,"description":"Indicates if there are no more items to load (only for pagination)"}}}}},"example":{"data":{"files":[{"id":"space_302374::region-eu::","name":"TestSpace2808","path":"/TestSpace2808"},{"id":"story_134603631080538::region-eu::","name":"Test Oleksii","parentId":"space_302374::region-eu::","path":"/TestSpace2808/Test Oleksii","createdAt":"2026-01-16T08:23:34.544Z","updatedAt":"2026-01-16T08:23:34.544Z"},{"id":"story_302374-133936904052915::region-eu::","name":"The very first after release","type":"html","parentId":"space_302374::region-eu::","path":"/TestSpace2808/The very first after release","createdAt":"2026-01-14T11:10:39.387Z","updatedAt":"2026-01-14T11:11:05.165Z","isNew":false,"notSynced":true,"isUpdated":false,"synced":false}],"message":null}}}}}}}},"/crowdin-update":{"post":{"tags":["Files"],"summary":"Update Crowdin Files","operationId":"crowdin.update","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCrowdinFiles"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/UpdateResponse"}}}}}}}}},"/integration-update":{"post":{"tags":["Files"],"summary":"Update Integration Files","operationId":"integration.update","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileLanguagePair"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/UpdateResponse"}}}}}}}}},"/all-jobs":{"get":{"tags":["Jobs"],"summary":"List Jobs","description":"Retrieve a paginated list of all jobs for the current integration","operationId":"job.list","parameters":[{"$ref":"#/components/parameters/ProjectId"},{"name":"limit","in":"query","required":false,"description":"Maximum number of jobs to return","schema":{"type":"integer","default":25,"minimum":1,"maximum":100,"example":25}},{"name":"offset","in":"query","required":false,"description":"Number of jobs to skip for pagination","schema":{"type":"integer","default":0,"minimum":0,"example":0}}],"responses":{"200":{"description":"List of jobs retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobListResponse"}}}}}}},"/job-info":{"get":{"tags":["Jobs"],"summary":"Get Job Info","description":"Retrieve detailed information about a specific job including progress, status, and timing data","operationId":"job.info","parameters":[{"$ref":"#/components/parameters/ProjectId"},{"name":"jobId","in":"query","required":true,"description":"Unique identifier of the job. Get via [List Jobs](#operation/job.list)","schema":{"type":"string","example":"067da473-fc0b-43e3-b0a2-09d26af130c1"}}],"responses":{"200":{"description":"Job information retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobInfoResponse"}}}},"400":{"description":"Bad Request - jobId parameter is missing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/jobs":{"get":{"tags":["Jobs"],"summary":"Get Job Info","operationId":"job.get","deprecated":true,"parameters":[{"$ref":"#/components/parameters/ProjectId"},{"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/JobResponse"}}}}}},"delete":{"tags":["Jobs"],"summary":"Cancel Job","description":"Cancel a running job. Only jobs with status \"created\" or \"inProgress\" can be canceled","operationId":"job.cancel","parameters":[{"$ref":"#/components/parameters/ProjectId"},{"name":"jobId","in":"query","required":true,"description":"Unique identifier of the job to cancel. Get via [List Jobs](#operation/job.list)","schema":{"type":"string","example":"067da473-fc0b-43e3-b0a2-09d26af130c1"}}],"responses":{"204":{"description":"Job canceled successfully"},"400":{"description":"Bad Request - jobId parameter is missing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/settings/schema":{"get":{"tags":["Settings"],"summary":"Get Application Settings Schema","operationId":"settings.schema","description":"Retrieve configuration schema with field definitions, types, options, and metadata","parameters":[{"$ref":"#/components/parameters/ProjectId"}],"responses":{"200":{"description":"Settings schema with field definitions","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SettingsSchemaResponse"}}},"example":{"data":[{"key":"skipIntegrationNodesToggle","label":"Skip Integration Nodes","type":"checkbox","helpText":"Skip certain files and folders...","category":"general","position":3},{"key":"schedule","label":"Sync schedule","type":"select","defaultValue":"0","category":"sync","position":0,"helpText":"Defines how often content is synced...","options":[{"value":"0","label":"Disabled"},{"value":"3","label":"3 hours"},{"value":"24","label":"24 hours"}]},{"key":"new-crowdin-files","label":"Automatically sync new translations from Crowdin","type":"checkbox","category":"sync","position":1,"dependencySettings":"[{\\\"#schedule-settings\\\":{\\\"type\\\":\\\"!equal\\\",\\\"value\\\":[\\\"0\\\"]}}]"},{"key":"inContext","label":"Sync In-Context Pseudo Language","type":"checkbox","category":"advanced","position":3,"helpTextHtml":"<p><strong>What is In-Context?</strong></p>..."}]}}}}}}},"/settings":{"get":{"tags":["Settings"],"summary":"Get Application Settings","operationId":"settings.get","parameters":[{"$ref":"#/components/parameters/ProjectId"}],"responses":{"200":{"description":"Application Settings","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SettingsResponse"}}},"example":{"data":{"schedule":"3","condition":"1","new-crowdin-files":true,"new-integration-files":false,"inContext":false,"importEqSuggestions":true,"autoApproveImported":false,"translateHidden":false,"includeByFilePath":"/content/**","excludeByFilePath":"/drafts/**","skipIntegrationNodesToggle":true}}}}}}},"post":{"tags":["Settings"],"summary":"Update Application Settings","operationId":"settings.update","description":"Update application settings. All config keys are validated against the schema from GET /settings/schema","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSettingsData"}}}},"responses":{"202":{"description":"Settings save job started successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"jobId":{"type":"string","description":"Job identifier to track operation progress. Use GET /job-info to check status.","example":"067da473-fc0b-43e3-b0a2-09d26af130c1"}}}}}}}},"400":{"description":"Bad Request - validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"missingConfig":{"summary":"Missing config parameter","value":{"error":{"message":"Missing required parameter: config"}}},"invalidType":{"summary":"Config is not an object","value":{"error":{"message":"Parameter \"config\" must be an object"}}},"invalidKeys":{"summary":"Unknown config keys","value":{"error":{"message":"Invalid configuration keys: unknownKey. Use GET /settings/schema to see available fields."}}}}}}}}}},"/sync-settings":{"get":{"tags":["Settings"],"summary":"Get Auto-Sync Files","operationId":"sync.settings.get","description":"Retrieve list of files configured for automatic synchronization based on schedule","parameters":[{"$ref":"#/components/parameters/ProjectId"},{"name":"provider","in":"query","required":true,"description":"Sync direction: \"crowdin\" returns Crowdin files with target languages, \"integration\" returns integration files with schedule settings","schema":{"type":"string","enum":["crowdin","integration"]}}],"responses":{"200":{"description":"List of files configured for auto-sync","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/CrowdinSyncSettingsResponse"},{"$ref":"#/components/schemas/IntegrationSyncSettingsResponse"}]}}},"examples":{"crowdinProvider":{"summary":"Crowdin files auto-sync (provider=crowdin)","value":{"data":{"102":["uk","de","fr"],"999":["uk","es"]}}},"integrationProvider":{"summary":"Integration files auto-sync (provider=integration)","value":{"data":[{"id":"story_302374-541001856::region-eu::","name":"Home","parent_id":"space_302374::region-eu::","type":"html","node_type":"1","schedule":true,"sync":false,"isNew":false,"isUpdated":false,"notSynced":false,"synced":false},{"id":"story_314675-584362389::region-eu::","name":"Test Story","parent_id":"story_584358589::region-eu::","type":"html","node_type":"1","schedule":true,"sync":false,"isNew":false,"isUpdated":false,"notSynced":false,"synced":true}]}}}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"missingProvider":{"summary":"Missing provider parameter","value":{"error":{"message":"Missing required parameter: provider"}}},"invalidProvider":{"summary":"Invalid provider value","value":{"error":{"message":"Invalid provider. Must be one of: crowdin, integration"}}}}}}}}},"post":{"tags":["Settings"],"summary":"Update Auto-Sync Files","operationId":"sync.settings.update","description":"Configure which files should be automatically synchronized based on schedule. Returns a job ID to track the operation progress.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSyncSettingsData"},"examples":{"crowdinFiles":{"summary":"Configure Crowdin files for auto-sync","value":{"projectId":12,"provider":"crowdin","files":{"102":["uk","de"],"999":["uk","fr","es"]}}},"integrationFiles":{"summary":"Configure integration files for auto-sync","value":{"projectId":12,"provider":"integration","files":[{"id":"story_302374-541001856","name":"Home","type":"html","node_type":"1","parent_id":"space_302374","schedule":true,"sync":false}]}}}}}},"responses":{"200":{"description":"Auto-sync configuration job started successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"jobId":{"type":"string","description":"Job identifier to track operation progress. Use GET /job-info to check status.","example":"067da473-fc0b-43e3-b0a2-09d26af130c1"}}}}}}}},"400":{"description":"Bad Request - validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"missingFiles":{"summary":"Missing files parameter","value":{"error":{"message":"Missing required parameter: files"}}},"missingProvider":{"summary":"Missing provider parameter","value":{"error":{"message":"Missing required parameter: provider"}}},"invalidProvider":{"summary":"Invalid provider value","value":{"error":{"message":"Invalid provider. Must be one of: crowdin, integration"}}}}}}}}}},"/login-fields":{"get":{"tags":["Login"],"summary":"Integration Login Form Fields","operationId":"integration.fields","responses":{"200":{"description":"Login Form Fields","content":{"application/json":{"schema":{"properties":{"data":{"$ref":"#/components/schemas/LoginFieldsResponse"}}}}}}}}},"/login":{"post":{"tags":["Login"],"summary":"Integration Login","operationId":"integration.login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Login"}}}},"responses":{"204":{"description":"Login successful"}}}}},"components":{"schemas":{"CrowdinFiles":{"type":"array","description":"List of Crowdin files and folders","example":[{"id":"1","name":"Landing pages"},{"id":"2","parentId":"1","name":"Home Page","type":"json"}],"items":{"anyOf":[{"type":"object","description":"Folder","properties":{"id":{"type":"string","description":"Unique identifier"},"name":{"type":"string","description":"Folder name"},"parentId":{"type":"string","description":"Parent folder identifier"}}},{"type":"object","description":"File","properties":{"id":{"type":"string","description":"Unique identifier"},"parentId":{"type":"string","description":"Parent folder identifier"},"name":{"type":"string","description":"File name"},"type":{"type":"string","description":"File type (e.g., json, xml, html)"},"excludedTargetLanguages":{"type":"array","description":"Languages excluded from translation","items":{"type":"string"}}}}]}},"NodeType":{"type":"string","description":"Type of tree element","enum":["0","1","2"],"x-enum-descriptions":["Folder","File","Branch"]},"IntegrationFiles":{"type":"array","description":"List of integration files and folders","items":{"anyOf":[{"type":"object","description":"Folder","properties":{"id":{"type":"string","description":"Unique identifier"},"name":{"type":"string","description":"Folder name"},"parentId":{"type":"string","description":"Parent folder identifier"},"path":{"type":"string","description":"Full path to the folder"},"createdAt":{"type":"string","format":"date-time","description":"Folder creation timestamp (ISO 8601)"},"updatedAt":{"type":"string","format":"date-time","description":"Folder last update timestamp (ISO 8601)"}}},{"type":"object","description":"File","properties":{"id":{"type":"string","description":"Unique identifier"},"name":{"type":"string","description":"File name"},"parentId":{"type":"string","description":"Parent folder identifier"},"type":{"type":"string","description":"File type (e.g., json, xml, html)"},"path":{"type":"string","description":"Full path to the file"},"createdAt":{"type":"string","format":"date-time","description":"File creation timestamp (ISO 8601)"},"updatedAt":{"type":"string","format":"date-time","description":"File last update timestamp (ISO 8601)"},"isNew":{"type":"boolean","description":"Whether file is new (created after last sync)"},"isUpdated":{"type":"boolean","description":"Whether file was updated since last sync"},"notSynced":{"type":"boolean","description":"Whether file was never synced to Crowdin"},"synced":{"type":"boolean","description":"Whether file was previously synced to Crowdin"}}}]}},"UpdateCrowdinFiles":{"title":"Sync Files to Crowdin","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/IntegrationFiles"},"uploadTranslations":{"description":"Upload exist translation from integration","type":"boolean","default":false,"example":true}}},"FileLanguagePair":{"title":"Sync Translations to Integration","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":{"example":{"102":["de","fr"],"999":["uk"]},"type":"object","description":"- **{fileId}** _(integer)_: Crowdin File Id. Get via [List Crowdin Files](#operation/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"}}},"UpdateResponse":{"type":"object","properties":{"jobId":{"type":"string","example":"067da473-fc0b-43e3-b0a2-09d26af130c1"}}},"SettingsData":{"type":"object","description":"Application configuration settings. Fields depend on integration implementation.","additionalProperties":true,"example":{"schedule":"3","condition":"1","new-crowdin-files":true,"new-integration-files":false,"inContext":false,"importEqSuggestions":true,"autoApproveImported":false,"translateHidden":false,"includeByFilePath":"/content/**","excludeByFilePath":"/drafts/**"}},"UpdateSettingsData":{"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/SettingsData"}}},"SettingsResponse":{"$ref":"#/components/schemas/SettingsData"},"SettingsSchemaResponse":{"type":"array","description":"List of configuration fields with metadata","items":{"type":"object","properties":{"key":{"type":"string","description":"Unique field identifier","example":"schedule"},"label":{"type":"string","description":"Human-readable field label","example":"Sync schedule"},"labelHtml":{"type":"string","description":"HTML label (alternative to label)"},"type":{"type":"string","enum":["checkbox","text","select","textarea","notice","password","file"],"description":"Field input type","example":"select"},"defaultValue":{"type":"string","description":"Default value for the field","example":"0"},"helpText":{"type":"string","description":"Plain text help description"},"helpTextHtml":{"type":"string","description":"HTML help description"},"category":{"type":"string","description":"Field category (general, sync, advanced)","example":"sync"},"position":{"type":"integer","description":"Display order within category","example":0},"options":{"type":"array","description":"Available options (for select type)","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}}}},"dependencySettings":{"type":"string","description":"JSON string defining field visibility rules"},"isSearchable":{"type":"boolean","description":"Allow searching options (for select type)"},"isMulti":{"type":"boolean","description":"Allow multiple selection (for select type)"},"noticeType":{"type":"string","enum":["info","warning","danger","success"],"description":"Notice type (for notice type fields)"},"noIcon":{"type":"boolean","description":"Hide icon in notice (for notice type)"}}}},"CrowdinSyncSettingsResponse":{"type":"object","description":"Mapping of Crowdin file IDs to target language codes for auto-sync","additionalProperties":{"type":"array","description":"Array of language codes to sync for this file","items":{"type":"string","description":"Language code (e.g., uk, de, fr)"}},"example":{"102":["uk","de","fr"],"999":["uk","es"]}},"IntegrationSyncSettingsResponse":{"type":"array","description":"List of integration files configured for auto-sync with their current status","items":{"type":"object","required":["id","name","node_type"],"properties":{"id":{"type":"string","description":"Unique file identifier"},"name":{"type":"string","description":"File name"},"parent_id":{"type":"string","description":"Parent folder identifier"},"type":{"type":"string","description":"File type (e.g., html, json)"},"node_type":{"$ref":"#/components/schemas/NodeType"},"schedule":{"type":"boolean","description":"Whether auto-sync is enabled for this file"},"sync":{"type":"boolean","description":"Sync status flag"},"isNew":{"type":"boolean","description":"Whether file is new (created after last sync)"},"isUpdated":{"type":"boolean","description":"Whether file was updated since last sync"},"notSynced":{"type":"boolean","description":"Whether file was never synced to Crowdin"},"synced":{"type":"boolean","description":"Whether file was previously synced to Crowdin"}}}},"UpdateSyncSettingsData":{"title":"Update Auto-Sync Files Configuration","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","description":"Sync direction: \"crowdin\" for Crowdin→Integration, \"integration\" for Integration→Crowdin","enum":["crowdin","integration"]},"files":{"description":"Format depends on provider. For \"crowdin\" - object with fileId→languages mapping. For \"integration\" - array of file objects.","oneOf":[{"$ref":"#/components/schemas/CrowdinSyncSettingsResponse"},{"$ref":"#/components/schemas/IntegrationSyncSettingsResponse"}]}}},"FileProgress":{"title":"Language Translation Progress","description":"Language Translation File Progress Response Model","type":"object","properties":{"languageId":{"type":"string","example":"af"},"eTag":{"type":"string","example":"fd0ea167420ef1687fd16635b9fb67a3"},"language":{"type":"object","description":"Complete language information","nullable":true,"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 : ...)"},"pluralExamples":{"type":"array","items":{"type":"string"},"example":["1, 21, 31...","2-4, 22-24..."]},"textDirection":{"type":"string","enum":["ltr","rtl"],"example":"ltr"},"dialectOf":{"type":"string","nullable":true,"example":null}}},"words":{"properties":{"total":{"type":"integer","example":7249},"translated":{"type":"integer","example":3651},"preTranslateAppliedTo":{"type":"integer","example":0},"approved":{"type":"integer","example":3637}},"type":"object"},"phrases":{"properties":{"total":{"type":"integer","example":3041},"translated":{"type":"integer","example":2631},"preTranslateAppliedTo":{"type":"integer","example":0},"approved":{"type":"integer","example":2622}},"type":"object"},"translationProgress":{"type":"string","example":"86"},"approvalProgress":{"type":"string","example":"86"},"qaChecksStatus":{"type":"object","description":"QA checks status information","properties":{"total":{"type":"integer","example":0},"inProgress":{"type":"integer","example":0},"passed":{"type":"integer","example":0},"failed":{"type":"integer","example":0}}}}},"LoginFieldsResponse":{"type":"object","properties":{"fields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Unique field identifier","example":"apiKey"},"name":{"type":"string","description":"Human-readable field label","example":"Service API key"},"type":{"type":"string","description":"Field input type","enum":["text","password","checkbox","select","textarea","file","notice"],"example":"password"},"options":{"type":"array","description":"Available options (only for select type)","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}}}}}}}},"example":{"fields":[{"key":"email","name":"User email","type":"text"},{"key":"password","name":"User password","type":"password"}]}},"Login":{"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/LoginData"}}},"LoginData":{"type":"object","description":"Login Form Fields. Get via [Integration Login Form Fields](#operation/integration.fields)","example":{"email":"user@crowdin.com","password":"password"}},"JobStatus":{"type":"string","description":"Possible job statuses","enum":["created","inProgress","finished","failed","canceled"]},"JobType":{"type":"string","description":"Possible job types","enum":["updateCrowdin","updateIntegration","crowdinSyncSettingsSave","integrationSyncSettingsSave"]},"JobListItem":{"type":"object","description":"Job item returned in list response","properties":{"id":{"type":"string","description":"Unique identifier of the job","example":"067da473-fc0b-43e3-b0a2-09d26af130c1"},"progress":{"type":"integer","description":"Current progress percentage (0-100)","minimum":0,"maximum":100,"example":94},"status":{"$ref":"#/components/schemas/JobStatus"},"title":{"type":"string","description":"Human-readable title of the job","example":"Sync files to Crowdin"},"type":{"$ref":"#/components/schemas/JobType"},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the job was created","example":"2024-01-15T10:30:00.000Z"},"finishedAt":{"type":"string","format":"date-time","nullable":true,"description":"ISO 8601 timestamp when the job finished (null if not finished)","example":"2024-01-15T10:35:00.000Z"}}},"Job":{"type":"object","description":"Detailed job information","properties":{"id":{"type":"string","description":"Unique identifier of the job","example":"067da473-fc0b-43e3-b0a2-09d26af130c1"},"progress":{"type":"integer","description":"Current progress percentage (0-100)","minimum":0,"maximum":100,"example":94},"status":{"$ref":"#/components/schemas/JobStatus"},"title":{"type":"string","description":"Human-readable title of the job","example":"Sync files to Crowdin"},"type":{"$ref":"#/components/schemas/JobType"},"info":{"type":"string","nullable":true,"description":"Additional information about the job progress (e.g., ETA)","example":"About 2 minutes remaining"},"data":{"type":"object","nullable":true,"description":"Additional data associated with the job"},"payload":{"type":"object","nullable":true,"description":"Original payload used to create the job"},"attempt":{"type":"integer","nullable":true,"description":"Current attempt number for retried jobs","example":1},"eta":{"type":"number","nullable":true,"description":"Estimated time remaining in milliseconds","example":120000},"createdAt":{"type":"string","format":"date-time","description":"ISO 8601 timestamp when the job was created","example":"2024-01-15T10:30:00.000Z"},"updatedAt":{"type":"string","format":"date-time","nullable":true,"description":"ISO 8601 timestamp when the job was last updated","example":"2024-01-15T10:32:00.000Z"},"finishedAt":{"type":"string","format":"date-time","nullable":true,"description":"ISO 8601 timestamp when the job finished","example":"2024-01-15T10:35:00.000Z"}}},"JobListResponse":{"type":"object","description":"List of jobs response","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/JobListItem"}}}},"JobInfoResponse":{"type":"object","description":"Single job info response","properties":{"data":{"$ref":"#/components/schemas/Job"}}},"ErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string","description":"Error message describing what went wrong","example":"jobId is required"}}}}},"JobBasic":{"type":"object","deprecated":true,"description":"Basic job info (deprecated format)","properties":{"id":{"type":"string","description":"The Unique Identifier For The Job.","example":"067da473-fc0b-43e3-b0a2-09d26af130c1"},"progress":{"type":"integer","description":"The Progress Of The Job.","example":94},"status":{"type":"string","description":"The Current Status Of The Job.","example":"inProgress"},"title":{"type":"string","description":"The Title Of The Job.","example":"Sync files to Crowdin"}}},"JobResponse":{"type":"object","deprecated":true,"description":"Deprecated. Use Job or JobListResponse instead","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/JobBasic"}}}}},"parameters":{"ProjectId":{"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}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Crowdin API Personal Access Token. Get via [Account Settings](https://crowdin.com/settings#api-key)"}}},"tags":[{"name":"Files"},{"name":"Settings"},{"name":"Login"},{"name":"Jobs"}]}