The Strategy Lab back end: Black-Scholes chain re-pricing, probability of profit, template strategy building and optimization (Basic via the simulator key), plus the Pro-tier calendar-spread analyzers and the coming-soon iron-condor scanner.
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.
Simulator (/api/simulator)
Feature key: simulator (Basic). POST bodies are JSON.
POST/api/simulator/simulate_chain
Basicsimulator
Re-prices an entire chain with Black-Scholes at a hypothetical underlying price, DTE, and IV shift. Preserves each row's bid/ask spread width and returns recalculated prices and Greeks per strike. Uses the live 10-year Treasury rate.
Parameters
JSON: chain (array of chain rows), sim_price (number), sim_dte (number), iv_adjustment (%, default 0, e.g. -50…+50)
# 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/simulator/simulate_chain" \
-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/simulator/simulate_chain",
headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
POST/api/simulator/pop
Basicsimulator
Probability of profit for a set of option legs. {probability_of_profit, legs_count}.
Parameters
JSON: legs [{type call|put, action buy|sell, strike, iv, price, quantity}], stock_price, days_to_exp
# 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/simulator/pop" \
-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/simulator/pop",
headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
Strategy builder (/api/strategy)
Feature key: simulator (Basic).
POST/api/strategy/build
Basicsimulator
Builds a named strategy from live chain data and returns the legs (with premiums and Greeks) plus full analysis (max profit/loss, breakevens, POP).
# 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/strategy/build" \
-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/strategy/build",
headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
POST/api/strategy/optimize
Basicsimulator
Searches strikes for the optimal configuration of the strategy and returns the winning legs, its analysis, and the score.
# 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/strategy/optimize" \
-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/strategy/optimize",
headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
Calendar spreads (/api/calendar-spread)
Analysis endpoints use feature key calendar_spread_analyzer (Pro); the live ratio endpoints use calendar_ratio (Pro).
GET/api/calendar-spread/analysis/<ticker>
Procalendar_spread_analyzer
Full calendar-spread IV-ratio analysis across front/back pairs.
# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/calendar-spread/analysis/AAPL"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/calendar-spread/analysis/AAPL")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
GET/api/calendar-spread/pair/<ticker>
Procalendar_spread_analyzer
Detailed view of one front/back expiration pair.
Parameters
front, back (expirations, required)
# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/calendar-spread/pair/AAPL"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/calendar-spread/pair/AAPL")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
GET/api/calendar-spread/pair-greeks/<ticker>
Procalendar_spread_analyzer
Greeks by strike for a front/back pair.
Parameters
front, back (required)
# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/calendar-spread/pair-greeks/AAPL"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/calendar-spread/pair-greeks/AAPL")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
GET/api/calendar-spread/ratio/<ticker>
Procalendar_ratio
Live IV ratio between two DTE-defined expirations for entry timing. Returns current ratio, intraday series, and day statistics.
Parameters
front_dte (default 0), back_dte (default 1; must exceed front_dte), delta (smile point, default 50 = ATM; valid deltas per provider), delta2 (optional), history_days (≤20, default 5)
# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/calendar-spread/ratio/AAPL"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/calendar-spread/ratio/AAPL")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
GET/api/calendar-spread/ratio-history/<ticker>
Procalendar_ratio
Hourly IV-ratio history from stored vol-surface snapshots, falling back to daily our institutional data feed history. Response includes source: snapshots | daily.
Parameters
front_dte, back_dte, delta, days (≤90, default 30), resolution (pass 'daily' to force EOD data)
# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/calendar-spread/ratio-history/AAPL"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/calendar-spread/ratio-history/AAPL")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
Iron condor scanner (coming soon)
Feature key iron_condor_scanner is unpublished with coming_soon=True; page requests redirect to a teaser and the API routes themselves return 503.
GET|POST/api/iron-condor/scan
Login + Pro[Coming soon]
Multi-ticker iron-condor scan.
# fetch a CSRF token, then GET|POST with it
TOKEN=$(curl -s -b cookies.txt https://apexvol.com/api/csrf-token | jq -r .token)
curl -b cookies.txt -X GET|POST "https://apexvol.com/api/iron-condor/scan" \
-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.get|post("https://apexvol.com/api/iron-condor/scan",
headers={"X-CSRFToken": token}, json={"ticker": "AAPL"})
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
GET/api/iron-condor/scan/<ticker>
Login + Pro[Coming soon]
Single-ticker scan.
# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/iron-condor/scan/AAPL"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/iron-condor/scan/AAPL")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
GET/api/iron-condor/universe
Login + Pro[Coming soon]
Scan universe.
# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/iron-condor/universe"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/iron-condor/universe")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
GET/api/iron-condor/config
Login + Pro[Coming soon]
Scanner configuration.
# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/iron-condor/config"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/iron-condor/config")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.
GET/api/iron-condor/quick
Login + Pro[Coming soon]
Quick scan.
# log in first and reuse the cookie jar (see Authentication)
curl -b cookies.txt "https://apexvol.com/api/iron-condor/quick"
import requests
s = requests.Session()
# log in to populate the session cookie (see Authentication)
r = s.get("https://apexvol.com/api/iron-condor/quick")
print(r.json())
# With the apexvol-mcp server connected to Claude, just ask:
"Build an iron condor on SPY."
# Claude routes the request to the matching MCP tool — no HTTP required.