# Export Project

There are two types of exports: **exporting a single file** in a specific project or **exporting all files** in a project.

## The Export API

* Use the below API docs reference and follow this [step-by-step section to make the API request](https://docs.datasaur.ai/api/apis-docs).
* Please note that the project ID refers to the resource ID that can be accessed from the URL when opening a project.

### Export a File

Please note that this API will only return the latest state of the project.

* Query: [exportTextProjectDocument](https://api-docs.datasaur.ai/#query-exportTextProjectDocument)

### Export All Files

Specifically for exporting all files, there is a [Python script example](https://github.com/datasaur-ai/api-client-example/blob/master/export.py) that you can refer to or use. This API will return a zip which consist of the latest state of the project, as well as each labeler's work.

* Query: [exportTextProject](https://api-docs.datasaur.ai/#query-exportTextProject)

## Asynchronous Process

All the processes above are done asynchronously. To check the export job, you need to request the [`getExportDeliveryStatus`](https://api-docs.datasaur.ai/#query-getExportDeliveryStatus) query.

Specifically for the `FILE_STORAGE` method, the `fileUrl` response could return 404. If this happens, it means the export result hasn't been uploaded yet. Please wait or polling the query above to know when exactly the `fileUrl` is ready and can be downloaded.

## Required Request Payloads

### Document ID

See how to get the value [here](https://docs.datasaur.ai/api/get-data).

### Method

There are four different methods to obtain the export result, i.e. download, email, webhook, and external object storage. These methods are fully [explained here](https://docs.datasaur.ai/data-studio-projects/export-project#export-methods).

For the API payload reference, it can be accessed [here](https://api-docs.datasaur.ai/#definition-GqlExportMethod).

The method will be the same and applicable for both types of export. Below is the additional explanation for each method. **Ensure you fill all the required attributes**, and then follow these hints.

1. Download\
   \- For the `method` attribute, fill it with `FILE_STORAGE`.
2. Email\
   \- For the `method` attribute, fill it with `EMAIL`.
3. Webhook\
   \- For the `method` attribute, fill it with `CUSTOM_WEBHOOK`.\
   \- You also need to fill `url` and `secret` attribute.\
   \- The detailed explanation can be seen [here](https://docs.datasaur.ai/api/export-project/custom-webhook).
4. External Object Storage\
   \- For the method attribute, fill with `EXTERNAL_OBJECT_STORAGE`.\
   \- You also need to fill `externalObjectStorageParameter`.

### Format - Extension Mapping

* `DATASAUR_SCHEMA` can be used for any kinds of project.
* `XLSX`, `CSV`, `JSON_TABULAR`, and `TSV` for Row and Doc Labeling.
  * CSV will also work and is compatible for Hugging Face.
* `TSV_IOB`, `TSV_NON_IOB`, `JSON_ADVANCED` for Token Labeling.
* `CUSTOM` for export using [File Transformer](https://docs.datasaur.ai/workspace-management/file-transformer).
* `JSON` for JSON Simplified format.
* `PLAIN` for exporting only the text (without any labels) of a Token Labeling project.
* `AMAZON_COMPREHEND_CSV` can be used for both [Token Labeling](https://docs.aws.amazon.com/comprehend/latest/dg/cer-annotation-csv.html) and [Row Labeling](https://docs.aws.amazon.com/comprehend/latest/dg/prep-classifier-data-multi-label.html).
  * There is a specific scenario to consider with Token Labeling. Since Comprehend can only reference a file on S3, it is important to export the text after making any edits by doing another export with the `PLAIN` extension as explained above. This ensures that you can correctly reference the annotation data.
* `AZURE_AUTOML_CSV` can be used for both [Token Labeling (NER) and Row Labeling (Multi-label)](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-auto-train-nlp-models?view=azureml-api-2\&tabs=cli).
* `GCP_VERTEX_AI_CSV` can be used for both [Token Labeling](https://cloud.google.com/vertex-ai/docs/text-data/entity-extraction/prepare-data) and [Row Labeling](https://cloud.google.com/vertex-ai/docs/text-data/classification/prepare-data#multi-label-classification).
