# Unitlab Python SDK

{% hint style="info" %}
These code snippets demonstrate how to use the most common Python SDK functions.
{% endhint %}

To get started, import the `unitlab` package and initialize a client with an API key. To obtain an API key, navigate to your [user account page](https://app.unitlab.ai/Unitlab/api-keys) and follow the instructions to create a new key.     &#x20;

{% code overflow="wrap" %}

```python
from unitlab import UnitlabClient

# You can find your API key at https://app.unitlab.ai/Unitlab/api-keys
api_key = "YOUR_API_KEY_HERE"
client = UnitlabClient(api_key)
```

{% endcode %}

#### Available methods

The following are some of the most common Python SDK methods:

```
projects                    Get a list of projects.
project                     Get project information.
project_members             Get project's members.
project_upload_data         Upload data samples to a project.
datasets                    Get a list of available datasets.
dataset_download            Download the dataset's annotation.
dataset_download_files      Download raw dataset files
```

### Examples

Here are some examples of how to use the Python SDK functions

#### Get project list

```python
from unitlab import UnitlabClient

api_key = "YOUR_API_KEY_HERE"

client = UnitlabClient(api_key)
client.projects()
```

This command will return a list of all your projects, including the project ID, ai\_model, name, number\_of\_data, annotator progress, reviewer progress, creator, and created date.

```json
[
    {
        "pk": "6c8801e5-7ffd-4dd4-81a2-190e1792c154",
        "ai_model": "Person Detection",
        "annotator_progress": 91.10,
        "created": "2024-02-22T11:29:48.723802",
        "creator": "YOUR_EMAIL_ADDRESS",
        "name": "Person Detection",
        "number_of_data": 988,
        "reviewer_progress": 67.81
    },
    {
        "pk": "2ae53739-95db-4a22-b018-846b19f2da05",
        "ai_model": "Vehicle Segmentation",
        "annotator_progress": 98.51,
        "created": "2024-02-15T18:35:48.193787",
        "creator": "YOUR_EMAIL_ADDRESS",
        "name": "Vehicle Segmentation",
        "number_of_data": 1007,
        "reviewer_progress": 89.37
    },
    {
        "pk": "46960ada-3119-4caf-be8e-ca633dbf9a42",
        "ai_model": "Human Pose Detection",
        "annotator_progress": 100,
        "created": "2024-02-15T16:55:32.386444",
        "creator": "YOUR_EMAIL_ADDRESS",
        "name": "Person Polygon Detection",
        "number_of_data": 52,
        "reviewer_progress": 100
    },
    {
        "pk": "245784fb-3b63-49cd-b2d1-6494095c9bb5",
        "ai_model": "Fashion Segmentation",
        "annotator_progress": 88,
        "created": "2024-01-23T17:46:18.134930",
        "creator": "YOUR_EMAIL_ADDRESS",
        "name": "Stuff Segmentation",
        "number_of_data": 2000,
        "reviewer_progress": null
    },
    ...
]
```

#### Get project members

```python
from unitlab import UnitlabClient

api_key = "YOUR_API_KEY_HERE"
project_id = "YOUR_PROJECT_ID"

client = UnitlabClient(api_key)
client.project_members(project_id=project_id)
```

It will return a list of the project's members, including their IDs, emails, positions, and statistics.

```json
[
    {
        "pk": "e1dd6cb9-1049-4ac1-ba44-41c54e8f7f9c",
        "email": "MEMBER_EMAIL",
        "position": "annotator",
        "progress": 82.13,
        "average_time": 10.45,
        "overall_time": 1692.0
    },
    {
        "pk": "e1dd6cb9-1049-4ac1-ba44-41c54e8f7f9c",
        "email": "MEMBER_EMAIL",
        "position": "annotator",
        "progress": 94.64,
        "average_time": 13.78,
        "overall_time": 2035.0
    },
    {
        "pk": "e1dd6cb9-1049-4ac1-ba44-41c54e8f7f9c",
        "email": "MEMBER_EMAIL",
        "position": "reviewer",
        "progress": 64.72,
        "average_time": 19.5,
        "overall_time": 1013.6
    },
    {
        "pk": "e1dd6cb9-1049-4ac1-ba44-41c54e8f7f9c",
        "email": "MEMBER_EMAIL",
        "position": "reviewer",
        "progress": 72.0,
        "average_time": 18.6,
        "overall_time": 1335.9
    }
]
```

#### Add data samples to a project.

To upload data samples to an existing project, provide the project ID and the directory containing the data samples and run the provided code.

```python
from unitlab import UnitlabClient

api_key = "YOUR_API_KEY_HERE"
project_id = "YOUR_PROJECT_ID"
directory = "PATH_TO_DATA_SAMPLES"

client = UnitlabClient(api_key)
client.project_upload_data(project_id=project_id, directory=directory)
```

#### Download a dataset

You can easily download the results of labelled data using the Python SDK. Retrieve your dataset ID and execute the `dataset_download` method. It will download the annotated results.

```python
from unitlab import UnitlabClient

api_key = "YOUR_API_KEY_HERE"
dataset_id = "YOUR_DATASET_ID"

client = UnitlabClient(api_key)
client.dataset_download(dataset_id=dataset_id)
```

#### Additional methods

The Python SDK provided by Unitlab offers a wealth of additional functions beyond those highlighted here. Users can utilize these methods according to their unique needs and preferences.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.unitlab.ai/cli-python-sdk/unitlab-python-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
