Import
Import tasks
Import data as labeling tasks in bulk using this API endpoint. You can use this API endpoint to import multiple tasks.
One POST request is limited at 250K tasks and 200 MB.
**Note:** Imported data is verified against a project *label_config* and must
include all variables that were used in the *label_config*. For example,
if the label configuration has a *$text* variable, then each item in a data object
must include a "text" field.
<br>
## Async Import Behavior
<hr style="opacity:0.3">
**For non-Community editions, this endpoint processes imports asynchronously.**
- The POST request **can fail** for invalid parameters, malformed request body, or other request-level validation errors.
- However, **data validation errors** that occur during import processing are handled asynchronously and will not cause the POST request to fail.
- Upon successful request validation, a response is returned: `{"import": <import_id>}`
- Use the returned `import_id` to poll the GET `/api/projects/{project_id}/imports/{import_id}` endpoint to check the import status and see any data validation errors.
- Data-level errors and import failures will only be visible in the GET request response.
For Community edition, imports are processed synchronously and return task counts immediately.
<br>
## POST requests
<hr style="opacity:0.3">
There are three possible ways to import tasks with this endpoint:
### 1. **POST with data**
Send JSON tasks as POST data. Only JSON is supported for POSTing files directly.
Update this example to specify your authorization token and Label Studio instance host, then run the following from
the command line.
```bash
curl -H 'Content-Type: application/json' -H 'Authorization: Token abc123' \
-X POST 'http://localhost:8000/api/projects/1/import' --data '[{"text": "Some text 1"}, {"text": "Some text 2"}]'
```
### 2. **POST with files**
Send tasks as files. You can attach multiple files with different names.
- **JSON**: text files in JavaScript object notation format
- **CSV**: text files with tables in Comma Separated Values format
- **TSV**: text files with tables in Tab Separated Value format
- **TXT**: simple text files are similar to CSV with one column and no header, supported for projects with one source only
Update this example to specify your authorization token, Label Studio instance host, and file name and path,
then run the following from the command line:
```bash
curl -H 'Authorization: Token abc123' \
-X POST 'http://localhost:8000/api/projects/1/import' -F 'file=@path/to/my_file.csv'
```
### 3. **POST with URL**
You can also provide a URL to a file with labeling tasks. Supported file formats are the same as in option 2.
```bash
curl -H 'Content-Type: application/json' -H 'Authorization: Token abc123' \
-X POST 'http://localhost:8000/api/projects/1/import' \
--data '[{"url": "http://example.com/test1.csv"}, {"url": "http://example.com/test2.csv"}]'
```
<br>
post/api/projects/{id}/import
Path parameters
idinteger required
A unique integer value identifying this project.
Query parameters
commit_to_projectboolean
Set to "true" to immediately commit tasks to the project.
preannotated_from_fieldsstring[]
List of fields to preannotate from the task data. For example, if you provide a list of {"text": "text", "prediction": "label"} items in the request, the system will create a task with the text field and a prediction with the label field when preannoted_from_fields=["prediction"].
return_task_idsboolean
Set to "true" to return task IDs in the response.
Request body
Response
Tasks successfully imported or import queued. For non-Community editions, the response will be {"import": <import_id>} which you can use to poll the import status. For Community edition, the response contains task counts and is processed synchronously.