- API
- Chain API
Chain API
The whole chain,
one request.
Every strike, calls and puts side by side, with quotes, per-contract IV, the Greeks, volume and open interest already on the row. Live today, or as it was priced on any past trading day.
A real response
This is what
comes back.
Captured from the live endpoint on 2026-09-07, lists cut to a few rows so it fits on a page. The shape is exactly what your code receives.
{
"chains": {
"2026-09-09": [
{
"Call Ask": 4.55,
"Call Bid": 4.45,
"Delta Call": 0.6607,
"Delta Put": -0.3393,
"Epsilon Call": -0.0208,
"Epsilon Put": -0.0208,
"Extrinsic Call": 1.7,
"Extrinsic Put": 1.62,
"Gamma Call": 0.0509,
"Gamma Put": 0.0509,
"IV Call": 0.266,
"IV Put": 0.2645,
"IVx Call": 0.7382,
"IVx Put": 1.9192,
"OI Call": 5032,
"OI Put": 1774,
"Put Ask": 1.64,
"Put Bid": 1.61,
"Rho Call": 0.0202,
"Rho Put": -0.0109,
"Strike": 227.5,
"Theta Call": -0.2734,
"Theta Put": -0.2734,
"Vega Call": 0.1003,
"Vega Put": 0.1003,
"Volume Call": 5829,
"Volume Put": 17517
},
{
"Call Ask": 3.0,
"Call Bid": 2.92,
"Delta Call": 0.5266,
"Delta Put": -0.4734,
"Epsilon Call": -0.0166,
"Epsilon Put": -0.0166,
"Extrinsic Call": 2.66,
"Extrinsic Put": 2.62,
"Gamma Call": 0.0568,
"Gamma Put": 0.0568,
"IV Call": 0.258,
"IV Put": 0.2594,
"IVx Call": 1.155,
"IVx Put": 1.2679,
"OI Call": 20341,
"OI Put": 1454,
"Put Ask": 2.65,
"Put Bid": 2.58,
"Rho Call": 0.0162,
"Rho Put": -0.0153,
"Strike": 230.0,
"Theta Call": -0.2871,
"Theta Put": -0.2871,
"Vega Call": 0.1074,
"Vega Put": 0.1074,
"Volume Call": 34581,
"Volume Put": 35665
},
{
"Call Ask": 1.85,
"Call Bid": 1.81,
"Delta Call": 0.3856,
"Delta Put": -0.6144,
"Epsilon Call": -0.0122,
"Epsilon Put": -0.0122,
"Extrinsic Call": 1.83,
"Extrinsic Put": 1.75,
"Gamma Call": 0.0552,
"Gamma Put": 0.0552,
"IV Call": 0.2561,
"IV Put": 0.254,
"IVx Call": 1.7499,
"IVx Put": 0.7599,
"OI Call": 7568,
"OI Put": 226,
"Put Ask": 4.0,
"Put Bid": 3.9,
"Rho Call": 0.0119,
"Rho Put": -0.0199,
"Strike": 232.5,
"Theta Call": -0.2719,
"Theta Put": -0.2719,
"Vega Call": 0.1021,
"Vega Put": 0.1021,
"Volume Call": 46211,
"Volume Put": 24057
}
]
},
"data_type": "LIVE",
"expirations": [
"2026-09-09"
],
"stock_price": 230.3,
"strike_window": {
"note": "Chain trimmed to strikes nearest the money; pass strikes_around=0 for the full chain.",
"strikes_around": 20,
"truncated": true
},
"ticker": "NVDA"
}
Every response is wrapped as {"success": true, "data": {...}}. Errors use the same envelope with an error string and a status code that means what it says.
Call it three ways. Same token, same JSON.
curl -H "Authorization: Bearer avmcp_YOUR_TOKEN" \
"https://apexvol.com/api/mcp/data/chain/NVDA?num_expirations=1"
import requests
r = requests.get("https://apexvol.com/api/mcp/data/chain/NVDA?num_expirations=1",
headers={"Authorization": "Bearer avmcp_YOUR_TOKEN"})
d = r.json()["data"]
exp = d["expirations"][0]
for row in d["chains"][exp]:
print(row["Strike"], row["Call Bid"], row["Call Ask"], row["Delta Call"])
Show me NVDA's chain for the nearest expiry, twenty strikes either side of the money.
The assistant calls get_options_chain and answers from the JSON above.More prompts for this family in the prompt library. Set the server up in Claude Desktop, Claude Code, Cursor, ChatGPT, VS Code, Windsurf or Gemini CLI.
Field by field
What each
number means.
Strike- One row per strike. Calls and puts share the row, so a straddle is two fields apart.
Call Bid, Call Ask, Put Bid, Put Ask- The quote at the time of the call. Live during the session.
IV Call, IV Put- Per-contract implied volatility, decimal. Deep in-the-money rows go wide, as they do on any screen.
Delta, Gamma, Theta, Vega, Rho- Per contract, for both sides, computed by the data vendor rather than re-derived on the way out.
Volume Call, OI Call, Volume Put, OI Put- Today's volume and the open interest carried in, per side.
Extrinsic Call, Extrinsic Put- Time value on the row, so premium sellers do not have to subtract.
strike_window- Chains are trimmed to the strikes nearest the money by default. The object says how many and how to ask for all of them.
data_type- LIVE during market hours; the last session otherwise. The response never pretends.
The family
7 endpoints,
one prefix.
All under https://apexvol.com/api/mcp/data. Parameters are bounded and the docs say the bounds; out-of-range values are clamped or rejected, never silently changed. The reference has every response field.
| Method | Path | Parameters | Returns |
|---|---|---|---|
GET | /chain/{ticker} | expiration or num_expirations, strikes_around | The formatted chain: one row per strike with call and put quotes, IV, Greeks, volume and OI. |
GET | /expirations/{ticker} | none | The listed expiration dates, so a caller can pick before pulling a chain. |
GET | /options-by-delta/{ticker} | delta, option_type, expiration | The contract nearest a target delta, with its actual delta, IV and quote. |
GET | /chain-at-time/{ticker} | expiration and trade_date, both required | The end-of-day chain as it was priced on a past date, with real bid and ask. |
GET | /stock/{ticker} | none | Live quote mid and company stats for the underlying. |
GET | /search | q, limit | Resolve a company name or partial symbol to a covered ticker before you call anything else. |
POST | /simulate-chain | sim_price, sim_dte, iv_adjust | Re-price a chain at a hypothetical stock price, days to expiry and IV shift. |
The same data, in plain English
7 MCP tools
wrap this family.
Connect the ApexVol MCP server and an assistant can call these by name. One URL, a sign-in, no token to paste.
- get_options_chain
- get_expirations
- get_options_by_delta
- get_stock_price
- get_historical_chain
- simulate_option_chain
- search_tickers
Set it up in:
What people build
Three things
this is for.
Access
- Auth
- Bearer token, prefix
avmcp_, created under Account, then API Access. Shown once, hashed at rest, rotates in one click. - Limits
- 60 requests a minute and 1,000 an hour per token, with a 10,000-request monthly budget per account. Every response carries the remaining counts in headers.
- Plans
- Included with every paid plan from $55 a month. Each endpoint follows the tier of its web feature; Pro unlocks the full surface.
- Spec
- OpenAPI 3.1 at /docs/api/openapi.json and the whole reference as one Markdown file at /docs/api/apexvol-api.md.
Questions
Asked before
the first call.
Are the quotes live?
During US market hours, yes. Outside them the response carries the last session's close and says so in data_type. The chain is read from the same institutional feed the ApexVol terminal uses.
Can I get historical options chains?
Yes. /chain-at-time/{ticker} returns the end-of-day chain for any past trade date and expiration, with real bid and ask rather than a synthetic mid. Dailies go back to 2007 for the underlying.
How many strikes come back?
By default the chain is trimmed to the twenty strikes either side of the money, which keeps a multi-expiration call small enough for an AI assistant to read. Pass strikes_around=0 for the full chain.
Which tickers are covered?
US-listed equities, ETFs and the major index options. Call /search with a name or partial symbol to confirm coverage before pulling data. The MCP tool of the same name does that for Claude automatically.
Included with
every paid plan.
From $55 a month, tier-matched: your token queries the data your plan includes and Pro unlocks the full surface.
Real market data, not a sandbox. See it live on AAPL.