API Reference

Portfolio Risk Management

Portfolio-level Greeks, scenario analysis, stress testing, and hedge simulation. All endpoints require login and the Pro plan (feature key risk_manager) and are rate-limited at 100/min.

Position objects accept: ticker, position_type (STOCK | CALL | PUT), quantity, strike, expiration, entry_price — and for the extended endpoints also current_price, stock_price, delta, gamma, theta, vega, rho, iv, charm, vanna, vomma.

These endpoints use session-cookie auth (the platform UI). For programmatic access with a long-lived API token, see the Bearer-token surface on the MCP / Claude integration page.

Risk endpoints (/api/risk)

POST /api/risk/portfolio-greeks
Login + Pro risk_manager

Aggregate portfolio Greeks (basic position format).

Parameters

JSON: positions [Position, …]

# fetch a CSRF token, then POST with it
TOKEN=$(curl -s -b cookies.txt https://apexvol.com/api/csrf-token | jq -r .token)
curl -b cookies.txt -X POST "https://apexvol.com/api/risk/portfolio-greeks" \
     -H "Content-Type: application/json" -H "X-CSRFToken: $TOKEN" \
     -d '{ "ticker": "AAPL" }'
import requests
s = requests.Session()
# log in first, then include the CSRF token on writes
token = s.get("https://apexvol.com/api/csrf-token").json()["token"]
r = s.post("https://apexvol.com/api/risk/portfolio-greeks",
          headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Run a stress test on my AAPL positions."

# Claude routes the request to the matching MCP tool — no HTTP required.
POST /api/risk/scenario-analysis
Login + Pro risk_manager

What-if scenario analysis across user-supplied price/vol scenarios.

Parameters

JSON: positions, scenarios []

# fetch a CSRF token, then POST with it
TOKEN=$(curl -s -b cookies.txt https://apexvol.com/api/csrf-token | jq -r .token)
curl -b cookies.txt -X POST "https://apexvol.com/api/risk/scenario-analysis" \
     -H "Content-Type: application/json" -H "X-CSRFToken: $TOKEN" \
     -d '{ "ticker": "AAPL" }'
import requests
s = requests.Session()
# log in first, then include the CSRF token on writes
token = s.get("https://apexvol.com/api/csrf-token").json()["token"]
r = s.post("https://apexvol.com/api/risk/scenario-analysis",
          headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Run a stress test on my AAPL positions."

# Claude routes the request to the matching MCP tool — no HTTP required.
POST /api/risk/stress-tests
Login + Pro risk_manager

Standardized stress-test battery (crash, vol spike, etc.).

Parameters

JSON: positions

# fetch a CSRF token, then POST with it
TOKEN=$(curl -s -b cookies.txt https://apexvol.com/api/csrf-token | jq -r .token)
curl -b cookies.txt -X POST "https://apexvol.com/api/risk/stress-tests" \
     -H "Content-Type: application/json" -H "X-CSRFToken: $TOKEN" \
     -d '{ "ticker": "AAPL" }'
import requests
s = requests.Session()
# log in first, then include the CSRF token on writes
token = s.get("https://apexvol.com/api/csrf-token").json()["token"]
r = s.post("https://apexvol.com/api/risk/stress-tests",
          headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Run a stress test on my AAPL positions."

# Claude routes the request to the matching MCP tool — no HTTP required.
POST /api/risk/portfolio-greeks-extended
Login + Pro risk_manager

Portfolio Greeks including second- and third-order terms.

Parameters

JSON: positions (extended format incl. per-leg Greeks)

# fetch a CSRF token, then POST with it
TOKEN=$(curl -s -b cookies.txt https://apexvol.com/api/csrf-token | jq -r .token)
curl -b cookies.txt -X POST "https://apexvol.com/api/risk/portfolio-greeks-extended" \
     -H "Content-Type: application/json" -H "X-CSRFToken: $TOKEN" \
     -d '{ "ticker": "AAPL" }'
import requests
s = requests.Session()
# log in first, then include the CSRF token on writes
token = s.get("https://apexvol.com/api/csrf-token").json()["token"]
r = s.post("https://apexvol.com/api/risk/portfolio-greeks-extended",
          headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Run a stress test on my AAPL positions."

# Claude routes the request to the matching MCP tool — no HTTP required.
POST /api/risk/simulate-hedge
Login + Pro risk_manager

Projects the portfolio's Greeks after applying candidate hedge trades.

Parameters

JSON: positions, hedge_trades []

# fetch a CSRF token, then POST with it
TOKEN=$(curl -s -b cookies.txt https://apexvol.com/api/csrf-token | jq -r .token)
curl -b cookies.txt -X POST "https://apexvol.com/api/risk/simulate-hedge" \
     -H "Content-Type: application/json" -H "X-CSRFToken: $TOKEN" \
     -d '{ "ticker": "AAPL" }'
import requests
s = requests.Session()
# log in first, then include the CSRF token on writes
token = s.get("https://apexvol.com/api/csrf-token").json()["token"]
r = s.post("https://apexvol.com/api/risk/simulate-hedge",
          headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Run a stress test on my AAPL positions."

# Claude routes the request to the matching MCP tool — no HTTP required.
GET /api/risk/option-chain/<ticker>
Login + Pro risk_manager

Chain helper for position entry: without expiration returns the expiration list; with it, the full formatted chain plus an estimated stock price.

Parameters

expiration (optional)

# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/risk/option-chain/AAPL"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/risk/option-chain/AAPL")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Run a stress test on my AAPL positions."

# Claude routes the request to the matching MCP tool — no HTTP required.
7 days free, cancel anytime Card required · no charge for 7 days
Start trial →