Quickstart

This guide gets you from a new key to your first options analytics request.

1. Generate an API Key

  1. Sign in to Perspicium.
  2. Open your account page at https://perspicium.com/auth/account.
  3. Use the API key control to generate a key.
  4. Store the key immediately. Perspicium shows the plaintext token once.

API keys are stored hashed. Regenerating a key replaces the previous key for your account.

2. Store the Key Locally

Use an environment variable so the key is not committed to source control.

export PERSPICIUM_API_KEY="your_api_key"

3. Test Connectivity

curl "https://perspicium.com/api/v0/ping" \
  -H "Authorization: ApiKey $PERSPICIUM_API_KEY"

Response:

{
  "success": true,
  "data": {
    "status": "ok"
  }
}

4. Request Expected Move Data

curl "https://perspicium.com/api/v0/options/expected-move?ticker=SPY&range_pct=1.0" \
  -H "Authorization: ApiKey $PERSPICIUM_API_KEY"

The response includes the current spot price, expected move term structure, and table rows suitable for display.

{
  "success": true,
  "data": {
    "ticker": "SPY",
    "spot": 522.41,
    "range_pct": 1.0,
    "term": [
      {
        "expiry": "2026-05-15",
        "expected_move": 5.42
      }
    ],
    "table": []
  }
}

Field names inside analytics arrays are generated from the analytics engine and may expand over time. Treat unknown fields as additive.

5. Use a Client

Python

import os
import requests

api_key = os.environ["PERSPICIUM_API_KEY"]
response = requests.get(
    "https://perspicium.com/api/v0/quant/risk",
    headers={"Authorization": f"ApiKey {api_key}"},
    params={"ticker": "NVDA", "benchmark": "SPY", "period": "5y", "window": 60},
    timeout=30,
)
response.raise_for_status()
payload = response.json()
print(payload["data"]["summary"])

JavaScript

const apiKey = process.env.PERSPICIUM_API_KEY;
const url = new URL("https://perspicium.com/api/v0/options/uoa");
url.search = new URLSearchParams({
  ticker: "TSLA",
  include_0dte: "false",
  limit: "50",
});

const response = await fetch(url, {
  headers: { Authorization: `ApiKey ${apiKey}` },
});

if (!response.ok) {
  throw new Error(await response.text());
}

const payload = await response.json();
console.log(payload.data.trades);

Next Steps