# Overview

> The official Python SDK for the Qualia robotics data and VLA platform

The official Python SDK for the [Qualia](https://junction.qualiastudios.dev) robotics data and VLA platform.

## Authentication

To use the SDK, you need an API key. Create one in the [Qualia dashboard](https://junction.qualiastudios.dev): **Settings** → **Account** → **API keys**. The key names its own account, so no account setting is needed; see [Configuration](https://junction-docs.qualiastudios.dev/sdk/configuration.md#account).

:::caution[Point the client at this environment]
The SDK and CLI talk to `https://api.qualiastudios.dev` unless told otherwise. Your account lives on `https://junction-api.qualiastudios.dev`, so set:

```bash
export QUALIA_BASE_URL=https://junction-api.qualiastudios.dev
```
:::

## Installation

```bash
pip install 'qualia-sdk==0.8.0rc14'

# or with uv
uv pip install 'qualia-sdk==0.8.0rc14'
```

This deployment runs ahead of the public release, so it needs the matching pre-release wheel — `0.8.0rc14`. Pin it rather than upgrading: the upload protocol is negotiated exactly, so the client and the endpoint it talks to have to be the same generation. A plain `pip install qualia-sdk` resolves to the current public release and will be turned away by this deployment.

The native transfer engine behind data upload/download is bundled in the
wheel — nothing else to install.

## Quick Start

For interactive use, log in with `qualia auth login` (see
[Authentication](https://junction-docs.qualiastudios.dev/cli/overview.md#authentication)); `Qualia()` reads that login.
Scripts and CI can set `QUALIA_API_KEY` and `QUALIA_BASE_URL` instead. Set both
together to use the same environment.

```python
from qualia import Qualia

# Initialize the client
client = Qualia(api_key="your-api-key")

# Or use your CLI login or the environment variables above
client = Qualia()

# Upload a local dataset directory
result = client.data.upload("/data/gongsta", name="gongsta")
print(result["dataset_id"], result["episode_count"], result["total_frames"])

# Inspect the exact camera schema of a pinned dataset version
dataset_version_id = "44444444-4444-4444-8444-444444444444"
features = client.data.get_training_features(dataset_version_id)
print([camera.key for camera in features.camera_features])
```

## Requirements

- Python 3.10+
- httpx
- pydantic

## Next Steps

- [Resources](https://junction-docs.qualiastudios.dev/sdk/resources/credits.md) - Learn about the available API resources
- [Configuration](https://junction-docs.qualiastudios.dev/sdk/configuration.md) - Environment variables and custom clients
- [Error Handling](https://junction-docs.qualiastudios.dev/sdk/error-handling.md) - Handle errors gracefully
