{"openapi":"3.1.0","info":{"title":"Vantage Public API","description":"Public API of the Lokalise Vantage platform.","version":"1.0.0"},"tags":[{"name":"Items","description":"Logical pieces of content to translate, such as a shop product, a blog post, or a file. An item groups multiple content units together.","x-displayName":"Items"},{"name":"Content units","description":"The content itself: the smallest logical part of an item to be translated, such as a product title, a product description, or a key in a JSON file.","x-displayName":"Content units"},{"name":"Segments","description":"Translatable fragments of a content unit that can be translated, reviewed, and stored in Translation Memory independently.","x-displayName":"Segments"},{"name":"Import","description":"Upload files and import them into a project as source content. Stage the files with `POST /uploads`, upload each file to the URL in the response, then confirm the uploads with `POST /uploads/actions/complete`. When they reach `UPLOADED`, import them with `POST /imports`. Translation starts automatically after a successful import, based on the project settings.","x-displayName":"Import"},{"name":"Export","description":"Download a project's translated content as files. Start an export with `POST /exports`, poll `GET /exports/{exportId}` until it completes, then get a download link from `GET /exports/{exportId}/download-url`.","x-displayName":"Export"},{"name":"Tasks","description":"Tasks in a project: which languages each task covers, who is assigned to them and how far the task has progressed.","x-displayName":"Tasks"},{"name":"Projects","description":"Projects in a team: their languages, translation settings and where their content comes from.","x-displayName":"Projects"}],"paths":{"/v1/projects/{projectId}/items/{itemId}/content-units":{"get":{"summary":"List content units of an item","tags":["Content units"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nGet content units for an item, optionally filtered by key","parameters":[{"schema":{"maxItems":10,"type":"array","items":{"type":"string","minLength":1}},"in":"query","name":"filter-keys","required":false,"description":"Filter content units by their keys (up to 10)"},{"schema":{"default":500,"type":"number","minimum":1,"maximum":500},"in":"query","name":"limit","required":false,"description":"Maximum number of entries to return per page"},{"schema":{"type":"string"},"in":"query","name":"after","required":false,"description":"Pagination cursor to fetch the next page; use the `meta.cursor` from the previous response"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true,"description":"The project identifier"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"itemId","required":true,"description":"The item whose content units are being listed"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ContentUnit"}},"meta":{"type":"object","properties":{"count":{"type":"number","description":"Number of items returned in this response"},"cursor":{"description":"Opaque cursor pointing at the last item on the current page. Pass as `after` or `before` to navigate to the next or previous page.","type":"string"},"hasMore":{"type":"boolean","description":"Whether there are more items to fetch"}},"required":["count","hasMore"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}},"/v1/projects/{projectId}/items":{"get":{"summary":"List project items","tags":["Items"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nGet project items","parameters":[{"schema":{"maxItems":25,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"in":"query","name":"filter-ids","required":false,"description":"Filter items by their identifiers (up to 25)"},{"schema":{"maxItems":25,"type":"array","items":{"type":"string","minLength":1,"maxLength":256}},"in":"query","name":"filter-names","required":false,"description":"Filter items by their names (up to 25)"},{"schema":{"type":"string"},"in":"query","name":"after","required":false,"description":"Pagination cursor to fetch the next page; use the `meta.cursor` from the previous response"},{"schema":{"default":100,"type":"number","minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Maximum number of entries to return per page"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true,"description":"The project identifier"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Item"}},"meta":{"type":"object","properties":{"count":{"type":"number","description":"Number of items returned in this response"},"cursor":{"description":"Opaque cursor pointing at the last item on the current page. Pass as `after` or `before` to navigate to the next or previous page.","type":"string"},"hasMore":{"type":"boolean","description":"Whether there are more items to fetch"}},"required":["count","hasMore"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}},"/v1/projects/{projectId}/segments/{segmentId}":{"patch":{"summary":"Update segment","tags":["Segments"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nUpdate the value and/or the status of a segment. At least one of them must be provided.\n The value includes non-translatable content (NTC) wrapped between the Unicode characters `U+E101` and `U+E102`; see the `value` field of `Segment`, for more info.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"description":"The new translated value for the segment, including its non-translatable content (NTC) wrapped between the Unicode characters `U+E101` and `U+E102`. Modify NTC carefully: changing, moving or removing NTC fragments may break the format of the exported file.","type":"string"},"status":{"description":"The new status for the segment","type":"string","enum":["APPROVED","PENDING_REVIEW"]}}}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true,"description":"The project identifier"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"segmentId","required":true,"description":"The segment to update"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Segment"},"warnings":{"description":"Non-blocking problems detected on the `value` sent in the request. The update is applied regardless. Omitted when no problems were found","type":"array","items":{"type":"object","properties":{"code":{"type":"string","description":"The category of the warning, e.g. `NON_TRANSLATABLE_TAGS_MISMATCH` when the non-translatable content (NTC) of the segment does not match the NTC of its source segment"},"details":{"description":"Additional information about the warning; its shape depends on the `code`","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["code"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"410":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}},"/v1/projects/{projectId}/content-units/{contentUnitId}/segments":{"get":{"summary":"List segments of a content unit","tags":["Segments"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nGet segments for a content unit.\n Segment values include non-translatable content (NTC) wrapped between the Unicode characters `U+E101` and `U+E102`; see the `value` field of `Segment`, for more info","parameters":[{"schema":{"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"in":"query","name":"filter-languages","required":false,"description":"Content language ids to filter segments by"},{"schema":{"default":500,"type":"number","minimum":1,"maximum":500},"in":"query","name":"limit","required":false,"description":"Maximum number of entries to return per page"},{"schema":{"type":"string"},"in":"query","name":"after","required":false,"description":"Pagination cursor to fetch the next page; use the `meta.cursor` from the previous response"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true,"description":"The project identifier"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"contentUnitId","required":true,"description":"The content unit whose segments are being listed"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Segment"}},"meta":{"type":"object","properties":{"count":{"type":"number","description":"Number of items returned in this response"},"cursor":{"description":"Opaque cursor pointing at the last item on the current page. Pass as `after` or `before` to navigate to the next or previous page.","type":"string"},"hasMore":{"type":"boolean","description":"Whether there are more items to fetch"}},"required":["count","hasMore"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}},"/v1/projects/{projectId}/translation-statuses/{importId}":{"get":{"summary":"Get the translation status of an import","tags":["Import"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nReports per language whether the translation of an import is finished. Poll it with the importId returned by the import call until a language is COMPLETED, which includes human review on projects that require it. Exporting by language includes every import in the project, and some of them may still be in review. Reports only the target languages you can access, and returns 403 when you can access none. Available for file projects only, other project types get 409.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true,"description":"The project identifier"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"importId","required":true,"description":"The `importId` returned by the import call"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/TranslationStatus"}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"409":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}},"/v1/projects/{projectId}/uploads":{"post":{"summary":"Stage files for import in a project","tags":["Import"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nRegister one or more files in a project as uploads, each with its own uploadId and a pre-signed upload target. This only stages the files (a pre-import step) and returns a batchId — the uploads are not imported into the project until you call the import endpoint with that batch. Staging a file name again in the same batch, before that upload is imported, replaces the earlier upload, and the new one gets a new uploadId. A file that cannot be staged, for example an unsupported extension or one over the size limit, is returned as its own entry carrying an error code and message, so one rejected file does not fail the rest of the batch. Each upload target expires: start the upload before its expiresAt, or stage the file again to get a new target.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"batchId":{"description":"Optional id of an existing upload batch to append these uploads to. Omit to start a new batch; the batch id is returned in the response. A batch groups uploads staged together so they can be imported in a single import call.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"uploads":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"fileName":{"type":"string","minLength":1,"description":"File name including extension (e.g. \"en.json\"). It must be unique within the request and is the key used to correlate each response entry (created or rejected) back to the file you sent. GET /uploads returns the same name. Staging a name again in the same batch, before that upload is imported, replaces the earlier upload: it is removed and the new one gets a new uploadId."},"mimeType":{"type":"string","minLength":1,"description":"MIME type of the file, used as the upload Content-Type (e.g. \"application/json\"). Advisory: acceptance is by file format and may vary per workspace. Supported formats: JSON, YAML, DOCX, PPTX, XLSX, HTML, Markdown, IDML, PO, XLIFF. Unsupported files are rejected individually with UNSUPPORTED_FILE_EXTENSION."},"size":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"File size in bytes. Maximum 52428800 (50 MB); larger files are rejected individually with FILE_EXCEEDED_MAXIMUM_ALLOWED_SIZE."},"checksum":{"type":"string","minLength":1,"description":"MD5 digest of the file content, hex-encoded (32 hex characters), for example e893e99354a665b25c6c97eb059c716a. It is converted to the Content-MD5 of the upload target, so an upload whose body does not match it is rejected."}},"required":["fileName","mimeType","size","checksum"]},"description":"Files to stage, one upload each. At most 100 per request."}},"required":["uploads"]}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"batchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"uploads":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"fileName":{"type":"string","description":"Echoes the request fileName, to correlate this entry."},"uploadId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"status":{"type":"string","enum":["UPLOADING"]},"upload":{"type":"object","properties":{"url":{"type":"string","description":"URL to upload the file to, with a `multipart/form-data` `POST` request."},"fields":{"type":"object","properties":{},"additionalProperties":{},"description":"Form fields to send with the file, unchanged. Also add a `Content-Type` field set to the file’s MIME type, and send the file last, in a field named `file`. The upload is rejected if the content type or the checksum does not match what you sent when staging the file."},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the upload target stops accepting the upload. Start the upload before then, or stage the file again to get a new target."}},"required":["url","fields","expiresAt"],"additionalProperties":false}},"required":["fileName","uploadId","status","upload"],"additionalProperties":false},{"type":"object","properties":{"fileName":{"type":"string","description":"Echoes the request fileName, to correlate this entry."},"error":{"type":"object","properties":{"code":{"type":"string","enum":["UNSUPPORTED_FILE_EXTENSION","UPLOAD_POST_FORM_DATA_CREATION_FAILED","FILE_EXCEEDED_MAXIMUM_ALLOWED_SIZE"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}},"required":["fileName","error"],"additionalProperties":false}]}}},"required":["batchId","uploads"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"Project not found in the caller workspace","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"Project not found in the caller workspace"}}}}}},"get":{"summary":"List project uploads","tags":["Import"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nLists the uploads in the project, newest first, each with its own status. Paginated: pass `limit` and the cursor from `meta` as `after`. Pass filter-batch-id to narrow the list to a single upload batch, or filter-ids to specific uploads. An upload moves through UPLOADING, UPLOADED, IMPORTING and IMPORTED, or ends at UPLOAD_FAILED or IMPORT_FAILED. fileName is the name the file was staged with, at every status. wordCount and locale are filled in once the file has been parsed, so they are absent while it is still uploading. locale is the source language detected from the file name or content, informational, for example to warn when it differs from the project’s base language: import always uses the base language. itemId is filled in once the upload has been imported. It identifies the project item that holds the imported content, for use with the items and exports endpoints. A failed upload carries an error object with a code and message instead of those fields.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"query","name":"filter-batch-id","required":false},{"schema":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"in":"query","name":"filter-ids","required":false,"description":"Return only these uploads. Up to 100 upload ids, repeated or comma-separated. Combines with filter-batch-id."},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"query","name":"after","required":false,"description":"Cursor from `meta.cursor` of the previous page. Returns the uploads that follow it."},{"schema":{"default":100,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Uploads per page, from 1 to 100. Defaults to 100."},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"uploadId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"batchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"fileName":{"type":"string"},"size":{"type":"number","description":"File size in bytes."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"status":{"type":"string","enum":["UPLOADING","UPLOADED","IMPORTING","IMPORTED"],"description":"Staging and import progress: UPLOADING → UPLOADED → IMPORTING → IMPORTED."},"wordCount":{"description":"Word count; present once the file has been parsed.","type":"number"},"locale":{"description":"Detected locale; present once the file has been parsed.","type":"string"},"itemId":{"description":"Id of the project item that holds this upload's imported content. Use it with GET /items and GET /items/{itemId}/content-units to read that content, or with POST /exports to export it. Returned once the upload has been imported.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"required":["uploadId","batchId","fileName","size","createdAt","status"],"additionalProperties":false},{"type":"object","properties":{"uploadId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"batchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"fileName":{"type":"string"},"size":{"type":"number","description":"File size in bytes."},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"status":{"type":"string","enum":["UPLOAD_FAILED","IMPORT_FAILED"],"description":"Terminal failure: UPLOAD_FAILED while staging, IMPORT_FAILED once an import ran over it."},"error":{"type":"object","properties":{"code":{"type":"string","description":"Machine-readable failure code, e.g. PARSE_ERROR."},"message":{"type":"string","description":"Human-readable failure detail."}},"required":["code","message"],"additionalProperties":false,"description":"Why the upload failed. Always present on a failed upload, and the same shape as the per-entry error in the POST /uploads response. wordCount, locale and itemId are not reported for a failed upload."}},"required":["uploadId","batchId","fileName","size","createdAt","status","error"],"additionalProperties":false}]}},"meta":{"type":"object","properties":{"count":{"type":"number","description":"Number of items returned in this response"},"cursor":{"description":"Opaque cursor pointing at the last item on the current page. Pass as `after` or `before` to navigate to the next or previous page.","type":"string"},"hasMore":{"type":"boolean","description":"Whether there are more items to fetch"}},"required":["count","hasMore"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"Project not found in the caller workspace","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"Project not found in the caller workspace"}}}}}}},"/v1/projects/{projectId}/uploads/actions/complete":{"post":{"summary":"Complete uploads in a project","tags":["Import"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nMark staged uploads as complete after their content has been sent to the upload target returned by POST /uploads. Call it only once those uploads have finished: an upload whose content has not reached storage fails with UPLOAD_FAILED. Pass either a batchId or a list of uploadIds. The call is idempotent. Uploads that are no longer UPLOADING, or whose completion is already under way, are ignored. Accepted uploads are finalized and parsed in the background. Poll GET /uploads: an upload moves from UPLOADING to UPLOADED, with wordCount and locale once parsing finishes, or to UPLOAD_FAILED with an error.","requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"batchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"Complete every upload of this batch that is still UPLOADING. Other uploads of the batch are ignored."}},"required":["batchId"],"additionalProperties":false},{"type":"object","properties":{"uploads":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"uploadId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"required":["uploadId"],"additionalProperties":false},"description":"Complete these uploads, at most 100 per request. Uploads that are no longer UPLOADING are ignored."}},"required":["uploads"],"additionalProperties":false}]}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true}],"responses":{"202":{"description":"Uploads accepted for completion in the background"},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"The caller may not upload files to the project, or the project is in another workspace","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"The caller may not upload files to the project, or the project is in another workspace"}}}},"404":{"description":"An upload or batch not found in the project","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"An upload or batch not found in the project"}}}}}}},"/v1/projects/{projectId}/imports":{"post":{"summary":"Import uploads into a project","tags":["Import"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nImport uploads into the project as source content, in the project’s base language, whatever the files are named. Pass `batchId` to import a whole batch, or `uploads` to import some uploads from one batch. The import runs in the background. Track each upload with `GET /uploads`. Its status goes from `UPLOADED` to `IMPORTING` and then `IMPORTED`, or to `IMPORT_FAILED` with an error. Translation starts automatically after a successful import, based on the project settings.","requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"batchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"Import every upload in this batch. Uploads that failed or were already imported are left out. A batch with more than 100 uploads to import is rejected, so import it in parts with uploads instead."}},"required":["batchId"],"additionalProperties":false},{"type":"object","properties":{"uploads":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"uploadId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"required":["uploadId"],"additionalProperties":false},"description":"Import these uploads, at most 100. They must all belong to the same batch: one import covers one batch."}},"required":["uploads"],"additionalProperties":false}]}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"importId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"Reference for this import, for example when reporting a problem with it. Follow the import through the status of each upload in GET /uploads."}},"required":["importId"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Invalid body, the requested uploads span more than one batch (UPLOADS_FROM_MULTIPLE_BATCHES), or the batch has more than 100 uploads to import (TOO_MANY_UPLOADS)","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"Invalid body, the requested uploads span more than one batch (UPLOADS_FROM_MULTIPLE_BATCHES), or the batch has more than 100 uploads to import (TOO_MANY_UPLOADS)"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"One or more of the requested uploads do not exist in this project","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"One or more of the requested uploads do not exist in this project"}}}},"409":{"description":"The import cannot start. FILE_IMPORT_PROJECT_TYPE_NOT_SUPPORTED: the project type does not take file imports, the same rule as the Vantage UI. BATCH_UPLOAD_IN_PROGRESS: the batch still has uploads in progress. UPLOADS_NOT_IMPORTABLE: a requested upload cannot be imported in its current state, and `details.uploads` gives each one with its reason (UPLOAD_IN_PROGRESS, UPLOAD_FAILED, IMPORT_IN_PROGRESS, ALREADY_IMPORTED, IMPORT_FAILED or NOT_READY).","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"The import cannot start. FILE_IMPORT_PROJECT_TYPE_NOT_SUPPORTED: the project type does not take file imports, the same rule as the Vantage UI. BATCH_UPLOAD_IN_PROGRESS: the batch still has uploads in progress. UPLOADS_NOT_IMPORTABLE: a requested upload cannot be imported in its current state, and `details.uploads` gives each one with its reason (UPLOAD_IN_PROGRESS, UPLOAD_FAILED, IMPORT_IN_PROGRESS, ALREADY_IMPORTED, IMPORT_FAILED or NOT_READY)."}}}}}}},"/v1/projects/{projectId}/exports":{"post":{"summary":"Create a project export","tags":["Export"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nStart an export of the project. The export runs in the background. Poll `GET /exports/{exportId}` until its status is `COMPLETED` or `FAILED`, then get the file with `GET /exports/{exportId}/download-url`.\n\nChoose what to export with one of these:\n\n- `{}` (an empty object) exports every item in every language.\n- `locales` or `languageIds` exports every item in those languages.\n- `items` exports only those items, each in the languages you list for it, or in every language if you list none.\n\nA body with more than one of them is rejected.\n\nName a language by its locale, such as `fr` or `de-DE`, or by its project language id. Do not mix the two in one place. Locales are case-insensitive and accept `_` or `-` as the separator, so `pt_BR` and `pt-BR` are the same language. Get a project lists the project languages, with the id in `projectLanguageUuid` and the locale in `languageIso`.\n\nYou get one file per item and language, in the item’s original format. Each file is named after the item, with the locale before the extension, for example `guide.de-DE.docx`. If the export has one file, you download that file. If it has several, you download them in one ZIP archive, with no folders.\n\nThe export does not wait for translation or review. It uses the current value of each segment, so segments that are not `APPROVED` yet can contain unreviewed AI translations, and segments whose translation failed contain the source text.","requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"locales":{"description":"Export the whole project for these BCP 47 locales, for example [\"fr\", \"de-DE\"]. Omit to export every language of the project.","minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"additionalProperties":false},{"type":"object","properties":{"languageIds":{"minItems":1,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"description":"Export the whole project for the languages with these ids. Use instead of locales, not together with them."}},"required":["languageIds"],"additionalProperties":false},{"type":"object","properties":{"items":{"minItems":1,"maxItems":100,"type":"array","items":{"anyOf":[{"type":"object","properties":{"itemId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"Id of the item to export."},"locales":{"description":"BCP 47 locales to export this item for, for example [\"fr\", \"de-DE\"]. Omit (and omit languageIds) to export it for every language of the project.","minItems":1,"type":"array","items":{"type":"string","minLength":1}}},"required":["itemId"],"additionalProperties":false},{"type":"object","properties":{"itemId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"Id of the item to export."},"languageIds":{"minItems":1,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"description":"Ids of the languages to export this item for. Use instead of locales, not together with them."}},"required":["itemId","languageIds"],"additionalProperties":false}]},"description":"Export only these items, each with the languages to export it for, as locales or language ids. Max. 100 items."}},"required":["items"],"additionalProperties":false}]}}}},"parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true}],"responses":{"202":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"exportId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"status":{"type":"string","enum":["IN_PROGRESS"]}},"required":["exportId","status"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Invalid body — including one that states the scope twice, or names languages by both `locales` and `languageIds` in one place — or a requested locale that is not a language of this project (UNKNOWN_LOCALES, listed in `details.locales`), a requested language id that is not a language of this project (UNKNOWN_LANGUAGE_IDS, listed in `details.languageIds`), or a project with no languages to export (NO_LANGUAGES_TO_EXPORT)","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"Invalid body — including one that states the scope twice, or names languages by both `locales` and `languageIds` in one place — or a requested locale that is not a language of this project (UNKNOWN_LOCALES, listed in `details.locales`), a requested language id that is not a language of this project (UNKNOWN_LANGUAGE_IDS, listed in `details.languageIds`), or a project with no languages to export (NO_LANGUAGES_TO_EXPORT)"}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}},"get":{"summary":"List project exports","tags":["Export"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nList a project's exports, newest first, optionally narrowed by status or to specific ids. Status only, no URLs. Paginated: pass `limit` and the cursor from `meta` as `after`.","parameters":[{"schema":{"type":"string","enum":["IN_PROGRESS","COMPLETED","FAILED"]},"in":"query","name":"filter-status","required":false},{"schema":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"in":"query","name":"filter-ids","required":false,"description":"Return only these exports, newest first. Up to 100 ids, repeated or comma-separated."},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"query","name":"after","required":false},{"schema":{"default":100,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"exportId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"status":{"type":"string","enum":["IN_PROGRESS","COMPLETED","FAILED"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the export was started"},"totalItemsCount":{"description":"Items selected for export. Unknown until the export has gathered its data.","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"processedItemsCount":{"description":"Items exported so far. An export that finishes COMPLETED with fewer processed than selected delivered only part of the selection.","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"failReason":{"description":"Present only for a FAILED export, including one that found no content to bundle","type":["string","null"]}},"required":["exportId","status","createdAt"],"additionalProperties":false}},"meta":{"type":"object","properties":{"count":{"type":"number","description":"Number of items returned in this response"},"cursor":{"description":"Opaque cursor pointing at the last item on the current page. Pass as `after` or `before` to navigate to the next or previous page.","type":"string"},"hasMore":{"type":"boolean","description":"Whether there are more items to fetch"}},"required":["count","hasMore"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}},"/v1/projects/{projectId}/exports/{exportId}":{"get":{"summary":"Get a project export","tags":["Export"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nGet the status of a project export. Never returns the download URL. An export that finds no content to bundle in its scope - no item there has content in the requested languages - ends FAILED with a failReason, rather than COMPLETED with nothing to download.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"exportId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"exportId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"status":{"type":"string","enum":["IN_PROGRESS","COMPLETED","FAILED"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the export was started"},"totalItemsCount":{"description":"Items selected for export. Unknown until the export has gathered its data.","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"processedItemsCount":{"description":"Items exported so far. An export that finishes COMPLETED with fewer processed than selected delivered only part of the selection.","anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"failReason":{"description":"Present only for a FAILED export, including one that found no content to bundle","type":["string","null"]}},"required":["exportId","status","createdAt"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"Export not found in this project","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"Export not found in this project"}}}}}}},"/v1/projects/{projectId}/exports/{exportId}/download-url":{"get":{"summary":"Get a project export download URL","tags":["Export"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nGet a link to download a completed export. The link is temporary, so request a new one when it expires. Export files are kept for a limited time, so download them soon after the export completes. Returns `409` while the export is still running, and `404` if the export does not exist or produced no file.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"exportId","required":true}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"downloadUrl":{"type":"string","format":"uri","description":"Time-limited link to download the exported file"}},"required":["downloadUrl"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"Export not found in this project, or it failed and produced no file","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"Export not found in this project, or it failed and produced no file"}}}},"409":{"description":"Export has not completed yet","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false,"description":"Export has not completed yet"}}}}}}},"/v1/teams/{teamId}/projects/{projectId}/tasks":{"get":{"summary":"List tasks","tags":["Tasks"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nReturns a paginated list of tasks in a project","parameters":[{"schema":{"default":5,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Maximum number of tasks to return per page"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"query","name":"after","required":false,"description":"Pagination cursor to fetch the next page; use the `meta.cursor` from the previous response"},{"schema":{"maxItems":25,"type":"array","items":{"type":"string","maxLength":36,"description":"Task ID"}},"in":"query","name":"filter-ids","required":false,"description":"Return only these tasks (up to 25 task IDs)"},{"schema":{"maxItems":25,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"}},"in":"query","name":"filter-item-ids","required":false,"description":"Return only the tasks for these translation-storage items (up to 25 item IDs)"},{"schema":{"default":false,"type":"boolean"},"in":"query","name":"include-segments","required":false,"description":"Whether to list each assignment's segments; `segments` is empty otherwise"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"teamId","required":true,"description":"Team ID (tenant owner ID) for the NextGen tenant"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true,"description":"Project ID for the NextGen tenant"},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Authorization header"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Task"},"description":"Tasks in the project, open tasks first, then newest first"},"meta":{"type":"object","properties":{"count":{"type":"number","description":"Number of items returned in this response"},"cursor":{"description":"Opaque cursor pointing at the last item on the current page. Pass it as `after` to read the next page","type":"string"},"hasMore":{"type":"boolean","description":"Whether there are more items to fetch"}},"required":["count","hasMore"],"additionalProperties":false,"description":"Pagination metadata"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}},"/v1/teams/{teamId}/projects":{"get":{"summary":"List projects","tags":["Projects"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nLists the team's projects the caller is a contributor of, one page at a time. Pass `meta.cursor` from a response as `after` to read the next page.","parameters":[{"schema":{"default":100,"type":"integer","minimum":1,"maximum":100},"in":"query","name":"limit","required":false,"description":"Number of projects to return per page"},{"schema":{"type":"string","minLength":1},"in":"query","name":"after","required":false,"description":"Opaque cursor from the previous response `meta.cursor`. Omit to read the first page"},{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"teamId","required":true,"description":"The team UUID"},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Authorization header"},{"schema":{"type":"string"},"in":"header","name":"content-type","required":false,"description":"Content type"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Project"},"description":"The projects on this page"},"meta":{"type":"object","properties":{"count":{"type":"number","description":"Number of items returned in this response"},"cursor":{"description":"Opaque cursor pointing at the last item on the current page. Pass it as `after` to read the next page","type":"string"},"hasMore":{"type":"boolean","description":"Whether there are more items to fetch"}},"required":["count","hasMore"],"additionalProperties":false,"description":"Pagination. Pass `meta.cursor` as `after` to read the next page. `cursor` is absent on the last page"}},"required":["data","meta"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}},"/v1/projects/{projectId}":{"get":{"summary":"Get a project","tags":["Projects"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nReturns a project the caller is a contributor of: the team it belongs to, its base and target languages, translation settings and content source.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true,"description":"The project UUID"},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Authorization header"},{"schema":{"type":"string"},"in":"header","name":"content-type","required":false,"description":"Content type"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Project"}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}},"/v1/projects/{projectId}/languages":{"get":{"summary":"List project languages","tags":["Projects"],"description":"> ⚠️ Beta\n>\n> This API is still in **beta**. It is intended specifically for Lokalise Vantage. If you need to work with **Lokalise Expert** projects, including software localization projects based on keys and translations, use the [Lokalise REST API v2](https://developers.lokalise.com/reference/lokalise-rest-api) instead.\n>\n> Vantage endpoints use the `/vantage/v1` namespace and have their own resource model and API conventions.\n\nLists the languages of a project the caller is a contributor of, the base language and every target language. `languageId` is the language UUID other endpoints take to select a language, for example the export call and the translation status; `locale` is its BCP 47 code.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},"in":"path","name":"projectId","required":true,"description":"The project UUID"},{"schema":{"type":"string"},"in":"header","name":"authorization","required":true,"description":"Authorization header"},{"schema":{"type":"string"},"in":"header","name":"content-type","required":false,"description":"Content type"}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Language"},"description":"The languages of the project, the base language and every target language"}},"required":["data"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"403":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"errorCode":{"type":"string"},"details":{}},"required":["message","errorCode"],"additionalProperties":false}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"ContentUnit":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The content unit identifier"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The project the content unit belongs to"},"type":{"type":"string","enum":["HTML_FILE","DOCX_FILE","PPTX_FILE","XLSX_FILE","MARKDOWN_FILE","IDML_FILE","JSON_FILE","YAML_FILE","XCSTRINGS_FILE","PO_FILE","XLIFF_FILE","PDF_FILE","TEXT","HTML","JSON","CONTENTFUL_RICH_TEXT"],"description":"The content unit type"},"key":{"type":"string","description":"The key that uniquely identifies the content unit within its item"},"position":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The zero-based position of the content unit within its item"},"sourceSegmentsCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The number of segments the source content is split into"}},"required":["id","projectId","type","key","position","sourceSegmentsCount"],"additionalProperties":false,"description":"Represents the content itself: the smallest logical part of an item to be translated, such as a product title, a product description, or a key in a JSON file."},"Item":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The item identifier"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The project the item belongs to"},"name":{"type":"string","description":"The internal name of the item"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the item was created (ISO 8601)"},"updatedAt":{"description":"When the item was last updated (ISO 8601)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","projectId","name","createdAt"],"additionalProperties":false,"description":"A logical piece of content to translate, such as a shop product, a blog post, or a file. An item has a name and some metadata, but it is not content by itself — it only groups multiple content units together."},"Segment":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The segment identifier"},"number":{"type":"number","description":"The sequential number of the segment within its content unit"},"value":{"type":"string","description":"The translated value of the segment. It includes non-translatable content (NTC): parts of the source that generally should not be translated, such as HTML tags, placeholders or variables. Each NTC fragment is wrapped between the Unicode characters `U+E101` (start marker) and `U+E102` (end marker), e.g. `Hello \\uE101<span>\\uE102world\\uE101</span>\\uE102`."},"status":{"type":"string","enum":["TRANSLATING","TRANSLATION_FAILED","LQA_IN_PROGRESS","PENDING_REVIEW","APPROVED"],"description":"The current translation/review status of the segment"},"lastChangeSource":{"type":"string","enum":["TRANSLATION_MEMORY","AI","HUMAN","IMPORT"],"description":"What produced the most recent change to the segment"},"contentLanguageId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The content language the segment is translated into"},"contentUnitId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The content unit the segment belongs to"},"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The project the segment belongs to"},"metadata":{"description":"Additional metadata about the segment","anyOf":[{"type":"object","properties":{"prefix":{"description":"Non-translatable text preceding the segment value","type":"string"},"suffix":{"description":"Non-translatable text following the segment value","type":"string"}},"additionalProperties":false},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the segment was created (ISO 8601)"},"updatedAt":{"description":"When the segment was last updated (ISO 8601)","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","number","value","status","lastChangeSource","contentLanguageId","contentUnitId","projectId","createdAt"],"additionalProperties":false,"description":"A single fragment of a content unit that can be translated, reviewed, and stored in Translation Memory, but is not a complete logical piece on its own. For example, a product description with five sentences is split into five segments that can be translated independently and concatenated back."},"TranslationStatus":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The project the import belongs to"},"importId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The `importId` returned by the import call"},"status":{"type":"string","enum":["TRANSLATING","PENDING_REVIEW","COMPLETED","FAILED"],"description":"The first that applies: FAILED when the import itself failed, so nothing will be translated and `languages` is empty. TRANSLATING while the import still runs or any language is TRANSLATING. PENDING_REVIEW while any language is PENDING_REVIEW. COMPLETED otherwise, including when nothing is left to translate: the import had no content, the project has no target language, or the content was deleted since. New values may be added. Treat an unknown value as not finished and keep polling."},"languages":{"type":"array","items":{"type":"object","properties":{"languageId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The target language, as accepted by the export call"},"locale":{"type":"string","minLength":1,"description":"The locale of the target language"},"status":{"type":"string","enum":["TRANSLATING","PENDING_REVIEW","COMPLETED"],"description":"The first that applies: TRANSLATING while items are being translated. PENDING_REVIEW while any item needs someone in the editor, either to review it or to fix content that failed or stalled in translation. COMPLETED otherwise, so this language can be exported. New values may be added. Treat an unknown value as not finished and keep polling."}},"required":["languageId","locale","status"],"additionalProperties":false},"description":"Every target language of the project that you can access, empty when the import failed"}},"required":["projectId","importId","status","languages"],"additionalProperties":false,"description":"Whether the translation of an import is finished, per target language. COMPLETED includes human review on projects that require it. It reports the current state of the items, so later work on them, such as applying a glossary or unapproving a segment, can move a COMPLETED language back. A re-imported item is followed to the item that replaced it, so the status covers the newer import of the same content."},"TaskAssignee":{"type":"object","properties":{"contributorId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"ID of the user or user group, as given by the type"},"type":{"type":"string","enum":["user","user_group"],"description":"Contributor type"}},"required":["contributorId","type"],"additionalProperties":false,"description":"A user or user group assigned to one language of a task."},"TaskAssignmentUnit":{"type":"object","properties":{"id":{"type":"string","description":"Unit assignment ID"},"unitId":{"type":"string","description":"Unit ID"},"status":{"type":"string","enum":["pending","completed"],"description":"Unit status"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the unit was added to the assignment"},"completedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When the unit was completed, or null while pending"}},"required":["id","unitId","status","createdAt"],"additionalProperties":false,"description":"One segment within a task assignment, with its status."},"TaskAssignment":{"type":"object","properties":{"languageId":{"type":"string","description":"Language ID of the assignment"},"assignees":{"type":"array","items":{"$ref":"#/components/schemas/TaskAssignee"},"description":"List of assignees for this language"},"progress":{"type":"object","properties":{"completedUnits":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Units (segments) already completed"},"totalUnits":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Units (segments) in the assignment"},"completedWords":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Words in the completed units"},"totalWords":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Words in all units of the assignment"}},"required":["completedUnits","totalUnits","completedWords","totalWords"],"additionalProperties":false,"description":"Task progress for this language assignment"},"segments":{"type":"array","items":{"$ref":"#/components/schemas/TaskAssignmentUnit"},"description":"Individual segments/units within this assignment"}},"required":["languageId","assignees","progress","segments"],"additionalProperties":false,"description":"One language within a task: who is assigned to it, how far it has progressed and, on request, its segments."},"Task":{"type":"object","properties":{"id":{"type":"string","maxLength":36,"description":"Task ID"},"publicId":{"type":"string","description":"Public ID of the task"},"title":{"type":"string","description":"Title of the task"},"type":{"type":"string","enum":["review"],"description":"Type of the task"},"status":{"type":"string","enum":["created","in_progress","closed"],"description":"Task status"},"description":{"description":"Description of the task, or null when not set","type":["string","null"]},"taskAssignments":{"type":"array","items":{"$ref":"#/components/schemas/TaskAssignment"},"description":"Task assignments with progress per language"},"dueDate":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}],"description":"When the task is due, or null when not set"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the task was created"},"requestedBy":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$"},{"type":"null"}],"description":"ID of the user who requested the task, or null when not set"}},"required":["id","publicId","title","type","status","description","taskAssignments","createdAt","requestedBy"],"additionalProperties":false,"description":"A task in a project: the languages it covers, who is assigned to each one and how far each has progressed."},"TranslationSettings":{"description":"How a project translates content: the workflow, which translations go to human review and how long review may take.","anyOf":[{"type":"object","properties":{"reviewTurnaroundDays":{"type":"integer","minimum":1,"maximum":90,"description":"Calendar days reviewers have to finish a review task. Its due date is the end of that day in the project's time zone"},"workflowType":{"allOf":[{"type":"string","enum":["AI_ONLY","AI_HUMAN_REVIEW"],"description":"`AI_ONLY`: content is translated by AI and approved without human review. `AI_HUMAN_REVIEW`: AI translation is followed by human review"},{"type":"string","const":"AI_HUMAN_REVIEW"}],"description":"`AI_ONLY`: content is translated by AI and approved without human review. `AI_HUMAN_REVIEW`: AI translation is followed by human review"},"reviewThreshold":{"type":"string","enum":["FULL_REVIEW","CRITICAL_MAJOR_MINOR","CRITICAL_MAJOR","CRITICAL"],"description":"Which AI translations go to human review. `FULL_REVIEW` sends all of them. `CRITICAL_MAJOR_MINOR`, `CRITICAL_MAJOR` and `CRITICAL` send only those with quality issues of at least that severity. Exact (100%) translation memory matches are approved without review under every threshold"}},"required":["reviewTurnaroundDays","workflowType","reviewThreshold"],"additionalProperties":false},{"type":"object","properties":{"reviewTurnaroundDays":{"type":"integer","minimum":1,"maximum":90,"description":"Calendar days reviewers have to finish a review task. Its due date is the end of that day in the project's time zone"},"workflowType":{"allOf":[{"type":"string","enum":["AI_ONLY","AI_HUMAN_REVIEW"],"description":"`AI_ONLY`: content is translated by AI and approved without human review. `AI_HUMAN_REVIEW`: AI translation is followed by human review"},{"type":"string","const":"AI_ONLY"}],"description":"`AI_ONLY`: content is translated by AI and approved without human review. `AI_HUMAN_REVIEW`: AI translation is followed by human review"},"reviewThreshold":{"type":"null","description":"Always null: AI-only projects have no human review"}},"required":["reviewTurnaroundDays","workflowType","reviewThreshold"],"additionalProperties":false}]},"Language":{"type":"object","properties":{"languageId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The language UUID, the id other endpoints take as `languageId`, for example the export call"},"locale":{"type":"string","description":"The BCP 47 locale of the language, for example `en` or `pt-BR`"},"languageName":{"type":"string","description":"The language name"},"isRtl":{"type":"boolean","description":"Whether the language is written right to left"}},"required":["languageId","locale","languageName","isRtl"],"additionalProperties":false,"description":"A language of a project."},"ProjectLanguage":{"type":"object","properties":{"languageId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The language UUID, the id other endpoints take as `languageId`, for example the export call"},"locale":{"type":"string","description":"The BCP 47 locale of the language, for example `en` or `pt-BR`"}},"required":["languageId","locale"],"additionalProperties":false,"description":"A language of a project, as its base language or as a target language. Its name and direction are on the project languages endpoint, under the same `languageId`."},"Project":{"type":"object","properties":{"projectId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The project UUID, the id other endpoints take as `projectId`"},"teamId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$","description":"The UUID of the team the project belongs to"},"name":{"type":"string","description":"The project name"},"description":{"type":"string","description":"The project description. Empty when none is set"},"baseLanguage":{"description":"The language content is translated from","$ref":"#/components/schemas/ProjectLanguage"},"targetLanguages":{"type":"array","items":{"$ref":"#/components/schemas/ProjectLanguage"},"description":"The languages content is translated into"},"translationSettings":{"description":"How content is translated and reviewed in this project","$ref":"#/components/schemas/TranslationSettings","anyOf":[{"type":"object","properties":{"reviewTurnaroundDays":{"type":"integer","minimum":1,"maximum":90,"description":"Calendar days reviewers have to finish a review task. Its due date is the end of that day in the project's time zone"},"workflowType":{"allOf":[{"type":"string","enum":["AI_ONLY","AI_HUMAN_REVIEW"],"description":"`AI_ONLY`: content is translated by AI and approved without human review. `AI_HUMAN_REVIEW`: AI translation is followed by human review"},{"type":"string","const":"AI_HUMAN_REVIEW"}],"description":"`AI_ONLY`: content is translated by AI and approved without human review. `AI_HUMAN_REVIEW`: AI translation is followed by human review"},"reviewThreshold":{"type":"string","enum":["FULL_REVIEW","CRITICAL_MAJOR_MINOR","CRITICAL_MAJOR","CRITICAL"],"description":"Which AI translations go to human review. `FULL_REVIEW` sends all of them. `CRITICAL_MAJOR_MINOR`, `CRITICAL_MAJOR` and `CRITICAL` send only those with quality issues of at least that severity. Exact (100%) translation memory matches are approved without review under every threshold"}},"required":["reviewTurnaroundDays","workflowType","reviewThreshold"],"additionalProperties":false},{"type":"object","properties":{"reviewTurnaroundDays":{"type":"integer","minimum":1,"maximum":90,"description":"Calendar days reviewers have to finish a review task. Its due date is the end of that day in the project's time zone"},"workflowType":{"allOf":[{"type":"string","enum":["AI_ONLY","AI_HUMAN_REVIEW"],"description":"`AI_ONLY`: content is translated by AI and approved without human review. `AI_HUMAN_REVIEW`: AI translation is followed by human review"},{"type":"string","const":"AI_ONLY"}],"description":"`AI_ONLY`: content is translated by AI and approved without human review. `AI_HUMAN_REVIEW`: AI translation is followed by human review"},"reviewThreshold":{"type":"null","description":"Always null: AI-only projects have no human review"}},"required":["reviewTurnaroundDays","workflowType","reviewThreshold"],"additionalProperties":false}]},"contentSourceType":{"description":"Where the content comes from: `file` for file-based projects, or the integration type (for example `google-drive`) for integration projects. Null for other project types, or when the integration cannot be resolved","type":["string","null"]},"contentSourceName":{"description":"Display name of the connected integration. Null when there is none, or when it cannot be resolved","type":["string","null"]},"projectType":{"type":"string","description":"The project type, for example `marketing` (file-based) or `marketing_integrations` (content from an integration)"}},"required":["projectId","teamId","name","description","baseLanguage","targetLanguages","translationSettings","contentSourceType","projectType"],"additionalProperties":false,"description":"A project in a team: its languages, translation settings and where its content comes from."}}},"servers":[{"url":"https://api.lokalise.com/vantage"}]}