---
summary: Install, authenticate, browse, download, and publish a model in a few minutes.
title: Quickstart
path: quickstart
status: published
---

# Quickstart

From zero to pulling a model in a few minutes. This uses the Python SDK; the same
operations are available over the [REST API](/docs/scaiatlas/reference/rest-api).

## 1. Install

```bash
pip install scaiatlas
```

Requires Python 3.9+. The SDK depends only on `httpx` and `pydantic`.

## 2. Authenticate

The fastest path is an API key. Create one in the web UI (or ask an admin), then:

```bash
export SCAIATLAS_API_KEY=sk_live_xxxxxxxxxxxxxxxxxxxx
export SCAIATLAS_BASE_URL=https://api.scaiatlas.io   # your registry endpoint
```

```python
from scaiatlas import ScaiAtlas

client = ScaiAtlas.from_env()          # reads SCAIATLAS_API_KEY / SCAIATLAS_BASE_URL
# or explicitly:
client = ScaiAtlas(api_key="sk_live_...", base_url="https://api.scaiatlas.io")
```

Interactive users can log in through the browser (OAuth PKCE) or a headless device
flow instead — see [Authentication](/docs/scaiatlas/concepts/authentication).

## 3. Browse

```python
# Namespaces you can see
for ns in client.namespaces.list_all():
    print(ns.name, "→", ns.model_count, "models")

# Models in a namespace
for model in client.models.list_all("poolnoodle"):
    print(model.full_name, model.type)

# Versions of a model
for v in client.versions.list_all("poolnoodle", "noodletron"):
    print(v.version, v.status, f"{v.total_size} bytes")
```

## 4. Download a version

```python
from pathlib import Path

files = client.download.version(
    "poolnoodle", "noodletron", "1.0.0",
    destination=Path("./noodletron"),
    verify_checksum=True,          # verifies SHA-256 of every file
    resume=True,                   # resume partial files on re-run
)
print("Downloaded:", [str(f) for f in files])
```

## 5. Publish a model

```python
# Create the model (type is required)
client.models.create("poolnoodle", "noodletron", type="llm",
                     display_name="Noodletron", tags=["demo"])

# Upload a version — the session creates the version, streams files, and finalizes
with client.upload.version("poolnoodle", "noodletron", "1.0.0",
                           format="safetensors") as up:
    up.add_file("model.safetensors")
    up.add_file("config.json")
    version = up.complete()

print("Published", version.full_name, "→", version.status)
```

## Same thing from the shell (CLI)

```bash
scaiatlas config init --url https://api.scaiatlas.io
scaiatlas config login

scaiatlas namespace list
scaiatlas model create poolnoodle noodletron --type llm
scaiatlas model search "llama"
scaiatlas version download poolnoodle/noodletron:1.0.0
```

## Where to go next

- [Resource model](/docs/scaiatlas/concepts/resource-model) — namespaces, models, versions, variants explained.
- [Uploading a model](/docs/scaiatlas/guides/uploading-a-model) — the full upload lifecycle.
- [Downloading a model](/docs/scaiatlas/guides/downloading-a-model) — resume, checksums, streaming, variants.
- [Python SDK reference](/docs/scaiatlas/reference/python-sdk) — every method and model.
