Authentication

The SDK supports three authentication methods: API key (recommended), environment variables, and email/password login.

API Key (Recommended)

Pass your API key directly to the constructor. API keys use the wh_ prefix and never expire.

from datablue import DataBlue

# Sync client
client = DataBlue(api_key="wh_your_api_key")
result = client.scrape("https://example.com")
client.close()

# Or use context manager (recommended)
with DataBlue(api_key="wh_your_api_key") as client:
    result = client.scrape("https://example.com")
    print(result.data.markdown)
from datablue import AsyncDataBlue

# Async client
async with AsyncDataBlue(api_key="wh_your_api_key") as client:
    result = await client.scrape("https://example.com")
    print(result.data.markdown)

Environment Variables

Set DATABLUE_API_KEY and optionally DATABLUE_API_URL in your environment, then use from_env():

# Shell — set environment variables
export DATABLUE_API_KEY=wh_your_api_key
export DATABLUE_API_URL=https://api.datablue.dev    # optional, default: http://localhost:8000
export DATABLUE_TIMEOUT=120                          # optional, seconds (default: 60)
export DATABLUE_MAX_RETRIES=5                        # optional (default: 3)
from datablue import DataBlue

# Reads all DATABLUE_* environment variables automatically
with DataBlue.from_env() as client:
    result = client.scrape("https://example.com")
    print(result.data.markdown)
Variable Required Default Description
DATABLUE_API_KEYYesYour API key (wh_... prefix)
DATABLUE_API_URLNohttp://localhost:8000Base URL of the DataBlue API
DATABLUE_TIMEOUTNo60Request timeout in seconds
DATABLUE_MAX_RETRIESNo3Max retry attempts on transient errors

Email/Password Login

Use login() to authenticate with email and password. This obtains a JWT token (7-day TTL) and stores it internally on the client instance.

from datablue import DataBlue

with DataBlue(api_url="https://api.datablue.dev") as client:
    # Authenticate — JWT is stored automatically
    auth = client.login("you@example.com", "your_password")
    print(f"Token: {auth['access_token'][:20]}...")

    # All subsequent requests use the JWT
    result = client.scrape("https://example.com")
    print(result.data.markdown)
# Async variant
from datablue import AsyncDataBlue

async with AsyncDataBlue(api_url="https://api.datablue.dev") as client:
    await client.login("you@example.com", "your_password")
    result = await client.scrape("https://example.com")

Recommendation: Use API keys for production and CI/CD. Use email/password login only for interactive scripts or development. API keys are persistent and do not expire, while JWT tokens expire after 7 days.