Options Chain API: Real-Time Bid/Ask, IV, Greeks, and Open Interest | FlashAlpha Research

Options Chain API: Real-Time Bid/Ask, IV, Greeks, and Open Interest

Pull real-time options chain data — bid, ask, IV, greeks, and open interest — for 4,000+ US equities and ETFs through a single REST API. This guide shows you how to query option quotes, list available expirations, and build practical scanners with the FlashAlpha Options Chain API.


Tomasz Dobrowolski - Quant Engineer

  • #OptionsAPI #Greeks #OpenInterest #MarketData

Options Chain API: Real-Time Bid/Ask, IV, Greeks, and Open Interest

If you're building anything that touches listed options — a screener, a scanner, a dashboard, a trading bot — you need programmatic access to options chain data. Not a CSV download from yesterday. Not a web scraper that breaks every time the source changes their DOM. You need a clean API that returns bid, ask, implied volatility, greeks, and open interest in a single call.

Why You Need an Options Chain API

Manual approaches to options data don't scale. Scraping broker sites violates terms of service and breaks on every UI update. Free data feeds give you last price at best — no greeks, no IV, no open interest. If you want to build anything beyond a toy project, you need computed greeks delivered alongside the quote, not raw prices that force you to roll your own Black-Scholes implementation and source a separate interest rate feed.

What sets an options API apart from a stock API: an option quote isn't just a price. It's a price plus a volatility surface point, plus five sensitivity measures (delta, gamma, theta, vega, rho), plus open interest and volume. A good API computes all of this server-side so you don't have to.

What FlashAlpha Returns

The FlashAlpha Options API returns full option quotes with computed greeks for any US-listed equity or ETF — over 4,000 symbols. Each option quote includes:

  • Pricing — Bid, Ask, Mid, Last, Volume
  • Volatility — Implied Volatility (IV)
  • Greeks — Delta, Gamma, Theta, Vega
  • Positioning — Open Interest, Volume

Chain metadata — the list of available expirations and strikes for a given ticker — is available through the /v1/options/{ticker} endpoint. Quotes are real-time during market hours and refresh on each request. Coverage spans all optionable US equities and ETFs.

Quick Start — Get an Option Quote in 3 Lines

Install the Python client and pull your first quote:

pip install flashalpha

(GitHub · PyPI)

from flashalpha import FlashAlpha

fa = FlashAlpha("YOUR_API_KEY")
quote = fa.option_quote("SPY", expiry="2026-03-21", strike=580, type="C")
print(quote)

Response:

{
  "bid": 11.20,
  "ask": 11.45,
  "mid": 11.325,
  "delta": 0.52,
  "gamma": 0.018,
  "theta": -0.15,
  "vega": 0.28,
  "implied_vol": 0.182,
  "open_interest": 45230,
  "volume": 12840
}
Key Insight

One call. One response. Bid/ask spread, all four primary greeks, implied volatility, open interest, and volume — no post-processing required.

The underlying REST endpoint is GET /optionquote/{ticker}?expiry=&strike=&type= at https://lab.flashalpha.com, authenticated via an X-Api-Key header. The Python client wraps this for convenience.

List Available Expirations and Strikes

Before querying individual quotes, you typically need to know what expirations and strikes exist for a symbol. The chain metadata endpoint handles this:

chain = fa.options("SPY")
print(chain)

Response:

{
  "symbol": "SPY",
  "expirations": [
    "2026-03-16",
    "2026-03-18",
    "2026-03-21",
    "2026-03-28",
    "2026-04-04",
    "2026-04-17",
    "2026-05-15",
    "2026-06-19",
    "2026-09-18",
    "2026-12-18"
  ],
  "strikes": [500, 510, 520, 530, 540, 550, 555, 560, 565, 570, 575, 580, 585, 590, 595, 600, 610, 620, 630, 640, 650]
}

This endpoint maps to GET /v1/options/{ticker}. Use it to discover what's available before iterating through specific contracts.

Working Example: Find Highest IV Options

A common use case: scan across expirations to find where implied volatility is elevated. This script pulls ATM call quotes for each expiration and ranks them by IV:

from flashalpha import FlashAlpha

fa = FlashAlpha("YOUR_API_KEY")

# Get current stock price for ATM reference
stock = fa.stock_quote("SPY")
atm_strike = round(stock["mid"] / 5) * 5  # round to nearest 5

# Get available expirations
chain = fa.options("SPY")

results = []
for exp in chain["expirations"][:8]:  # first 8 expirations
    try:
        q = fa.option_quote("SPY", expiry=exp, strike=atm_strike, type="C")
        results.append({
            "expiry": exp,
            "iv": q["implied_vol"],
            "bid": q["bid"],
            "ask": q["ask"],
            "oi": q["open_interest"]
        })
    except Exception:
        continue

# Sort by IV descending
results.sort(key=lambda x: x["iv"], reverse=True)

print(f"ATM Strike: {atm_strike}")
print(f"{'Expiry':<14} {'IV':>8} {'Bid':>8} {'Ask':>8} {'OI':>10}")
print("-" * 52)
for r in results:
    print(f"{r['expiry']:<14} {r['iv']:>7.1%} {r['bid']:>8.2f} {r['ask']:>8.2f} {r['oi']:>10,}")

Output:

ATM Strike: 580
Expiry             IV      Bid      Ask         OI
----------------------------------------------------
2026-03-16       22.4%     3.10     3.25      8,420
2026-03-18       20.1%     4.85     5.00     12,390
2026-03-21       18.2%    11.20    11.45     45,230
2026-04-04       17.8%    15.60    15.90     22,100
2026-03-28       17.5%    13.40    13.65     31,850
2026-04-17       16.9%    18.30    18.55     18,740
2026-05-15       16.2%    24.10    24.40      9,560
2026-06-19       15.8%    30.50    30.85      6,230

Near-term expirations typically show higher IV — especially around events. This is the term structure of volatility, and you can spot dislocations by scanning programmatically. Each option_quote call counts as one API call against your daily limit. Full source code and more examples on GitHub.

Working Example: Build a Multi-Ticker Options Scanner

Scan multiple tickers for options within a specific delta range — useful for finding high-probability credit spread candidates or hedging opportunities:

from flashalpha import FlashAlpha

fa = FlashAlpha("YOUR_API_KEY")

tickers = ["SPY", "QQQ", "AAPL", "MSFT", "NVDA", "TSLA", "AMZN", "META"]
target_delta_min = 0.25
target_delta_max = 0.35
expiry = "2026-04-17"

print(f"Scanning for puts with delta {target_delta_min}-{target_delta_max}")
print(f"{'Ticker':<8} {'Strike':>8} {'Delta':>8} {'IV':>8} {'Bid':>8} {'OI':>10}")
print("-" * 56)

for ticker in tickers:
    try:
        stock = fa.stock_quote(ticker)
        spot = stock["mid"]
        chain = fa.options(ticker)

        if expiry not in chain.get("expirations", []):
            continue

        # Check OTM puts at a few strikes below spot
        for pct in [0.90, 0.92, 0.95]:
            strike = round(spot * pct)
            try:
                q = fa.option_quote(ticker, expiry=expiry, strike=strike, type="P")
                d = abs(q["delta"])
                if target_delta_min <= d <= target_delta_max:
                    print(f"{ticker:<8} {strike:>8} {q['delta']:>8.3f} "
                          f"{q['implied_vol']:>7.1%} {q['bid']:>8.2f} "
                          f"{q['open_interest']:>10,}")
            except Exception:
                continue
    except Exception:
        continue
API call budget: this scanner makes roughly 3-4 calls per ticker (1 stock quote + 1 chain lookup + 1-3 option quotes). For 8 tickers, that's about 30 calls — well within the Free tier's 50/day limit for a single scan.

Once you have the data, the applications multiply. Feed it into a gamma exposure model, backtest a strategy, or pipe it into a live dashboard. If you need full greek computations beyond what the quote returns, the dedicated Greeks endpoint lets you run Black-Scholes-Merton calculations with custom inputs.

Rate Limits and Pricing

Tier Price Daily API Calls Best For
Free $0/mo 50 Prototyping, learning
Basic $49/mo 250 Personal scanner, small portfolio
Trader $129/mo 1,000 Active scanning, multiple strategies
Growth $299/mo 2,500 Production applications, full chain scans

Fifty free calls per day is enough to build and test a scanner. Scale up when you need broader coverage or higher frequency. Start with 50 free calls/day and upgrade when your use case demands it.

Chain data pairs naturally with exposure analysis. Once you have open interest and greeks per strike, you can compute gamma exposure (GEX) to identify dealer hedging levels — or use the built-in fa.gex() endpoint to skip the math entirely.

Get Your API Key

Ready to pull options chain data?

Frequently Asked Questions

Each option quote returns bid, ask, mid price, implied volatility, delta, gamma, theta, vega, open interest, and volume. The chain metadata endpoint returns all available expiration dates and strike prices for a given ticker. Data covers 4,000+ US equities and ETFs.
Options data is real-time during market hours (9:30 AM - 4:00 PM ET). Each API request returns the latest available quote. Outside market hours, the most recent closing data is returned.
Yes. The Free tier includes 50 API calls per day at no cost and requires no credit card. That's enough to build and test a scanner for a handful of tickers. Paid plans start at $49/month for 250 calls/day. See pricing for details.
The API covers over 4,000 US-listed equities and ETFs — anything with listed options on US exchanges. This includes major names like SPY, QQQ, AAPL, TSLA, NVDA, as well as mid- and small-cap stocks with active options markets.

Live Market Pulse

Get tick-by-tick visibility into market shifts with full-chain analytics streaming in real time.

Intelligent Screening

Screen millions of option pairs per second using your custom EV rules, filters, and setups.

Execution-Ready

Instantly send structured orders to Interactive Brokers right from your scan results.

Join the Community

Discord

Engage in real time conversations with us!

Twitter / X

Follow us for real-time updates and insights!

GitHub

Explore our open-source SDK, examples, and analytics resources!