> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sandmark.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> From API key to your first volatility series in under five minutes.

**1. Store your API key**

Sandmark sends your key when your subscription is activated. Keep it out of source control and load it
from the environment:

```bash theme={null}
export SANDMARK_API_KEY="your-key"
```

**2. Check what you can query**

List the assets available to you. Every timeseries request takes one of these values as `asset`.

```bash theme={null}
curl https://api.sandmark.com/volatility/v1/assets \
  -H "X-API-Key: $SANDMARK_API_KEY"
```

```json theme={null}
{ "assets": ["DER.BTC_USD", "DER.ETH_USD", "DER.BTC_USDC", "..."] }
```

**3. Fetch 1-month at-the-money implied vol**

Ask for hourly BTC implied vol at the 50-delta call, 1-month tenor:

```bash cURL theme={null}
curl -G https://api.sandmark.com/volatility/v1/timeseries/iv \
  -H "X-API-Key: $SANDMARK_API_KEY" \
  -d asset=DER.BTC_USD \
  -d frequency=1h \
  -d option_type=C \
  -d tenor_label=1m \
  -d delta_target_pct=50 \
  -d limit=24
```

```python Python theme={null}
import os
import requests

BASE_URL = "https://api.sandmark.com/volatility"
session = requests.Session()
session.headers["X-API-Key"] = os.environ["SANDMARK_API_KEY"]

response = session.get(
    f"{BASE_URL}/v1/timeseries/iv",
    params={
        "asset": "DER.BTC_USD",
        "frequency": "1h",
        "option_type": "C",
        "tenor_label": "1m",
        "delta_target_pct": 50,
        "limit": 24,
    },
    timeout=30,
)
response.raise_for_status()

for row in response.json()["data"]:
    print(row["DATETIME"], f'{row["IV"] * 100:.2f} vol')
```

```javascript JavaScript theme={null}
const BASE_URL = "https://api.sandmark.com/volatility";

const params = new URLSearchParams({
  asset: "DER.BTC_USD",
  frequency: "1h",
  option_type: "C",
  tenor_label: "1m",
  delta_target_pct: "50",
  limit: "24",
});

const response = await fetch(`${BASE_URL}/v1/timeseries/iv?${params}`, {
  headers: { "X-API-Key": process.env.SANDMARK_API_KEY },
});
if (!response.ok) throw new Error(`${response.status} ${await response.text()}`);

const { data } = await response.json();
for (const row of data) console.log(row.DATETIME, `${(row.IV * 100).toFixed(2)} vol`);
```

You get the last 24 hourly bars, newest first:

```text theme={null}
2026-11-06T22:00:00Z 37.32 vol
2026-11-06T21:00:00Z 37.33 vol
...
```

**4. Add realised vol**

Fetch 30-day realised vol over the same hours. It's the natural counterpart to 1-month implied vol:

```bash theme={null}
curl -G https://api.sandmark.com/volatility/v1/timeseries/rv \
  -H "X-API-Key: $SANDMARK_API_KEY" \
  -d asset=DER.BTC_USD \
  -d frequency=1h \
  -d lookback_days=30 \
  -d limit=24
```

## Next steps

> [card] [Implied vs realised](https://docs.sandmark.com/guides/iv-vs-rv.md)
>
> Join the two series and chart the variance premium with pandas.

> [card] [Paging through history](https://docs.sandmark.com/guides/paging.md)
>
> Pull your full history window in pages of up to 5,000 rows.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.