Skip to content

From Intrinio — Options Chain

Looking for a second source of option Greeks alongside Intrinio, or an alternative options chain API with dividend-aware, early-exercise-aware pricing? Lavender delivers independently computed Greeks through Intrinio's own wire format — no code changes required.

Already fetching option chains from Intrinio? Swap the host — your existing code works unchanged.

Differences from Intrinio

Lavender matches Intrinio's wire format with two specific differences worth knowing when migrating:

  • price object is zeroed. last, bid, ask, volume, open_interest, and other market-data fields come back with 0 values; timestamps reflect the current time. Lavender computes Greeks; it does not redistribute OPRA quotes.
  • api_key and Authorization accepted-but-ignored. Leave either / both or remove.

For the modeling differences (American exercise, discrete dividends, calibrated borrow), see How Lavender's Greeks Differ below.

What Changes

curl -H "Authorization: Bearer YOUR_INTRINIO_KEY" \
     "https://api-v2.intrinio.com/options/chain/AAPL/2026-12-18/realtime?show_stats=true"
#      ^^^^^^^^^^^^^^^^^^^^^^^^
curl "http://localhost:2112/options/chain/AAPL/2026-12-18/realtime?show_stats=true"
#     ^^^^^^^^^^^^^^^^^^

Swap the host. Your api_key parameter or auth header is accepted and ignored.

Try it in your browser

http://localhost:2112/options/chain/SPY/2026-12-18/realtime?format=html

Paste this into any browser to see Intrinio-format Greeks rendered as an HTML table. No code needed.

Same Response Format

The JSON you get back has the same chain array with nested option, price, and stats objects — just like Intrinio:

{
  "chain": [
    {
      "option": {
        "code": "AAPL261218C00230000",
        "ticker": "AAPL",
        "expiration": "2026-12-18",
        "expiration_time": "2026-12-18T16:00:00-04:00",
        "strike": 230.0,
        "type": "call"
      },
      "price": {
        "last": 0,
        "last_size": 0,
        "last_timestamp": "2026-03-14T14:30:45.123Z",
        "volume": 0,
        "bid": 0,
        "bid_size": 0,
        "bid_timestamp": "2026-03-14T14:30:45.123Z",
        "ask": 0,
        "ask_size": 0,
        "ask_timestamp": "2026-03-14T14:30:45.123Z",
        "open_interest": 0,
        "exercise_style": "A"
      },
      "stats": {
        "implied_volatility": 0.245,
        "delta": 0.5834,
        "gamma": 0.0198,
        "theta": -0.1425,
        "vega": 0.312,
        "underlying_price": 233.15
      }
    }
  ]
}

Market data fields are zeroed

The price object fields (last, bid, ask, volume, open_interest, etc.) are zeroed. The stats object contains Lavender's computed Greeks and implied volatility.


Endpoint

GET /options/chain/{symbol}/{expiration}/realtime

Both path parameters are required:

  • {symbol} — underlying ticker (e.g., AAPL), case-insensitive
  • {expiration} — expiration date (YYYY-MM-DD) or * for all expirations

Query Parameters

Parameter Type Required Description
show_stats string No true to include the stats object with Greeks. Otherwise stats is null
type string No call or put (omit for both)
strike number No Exact strike price
strike_greater_than number No Strike > value
strike_less_than number No Strike < value
page_size integer No Page size for pagination (default 100, max 10000). Sending this or next_page opts in to pagination.
next_page string No Opaque pagination token from the previous response. Round-trip only.
api_key string No API key — accepted and ignored

Pagination

Pagination is opt-in. Without page_size or next_page, the response returns the full chain with "next_page": null.

To paginate, send page_size and follow next_page from each response:

import requests

url = "http://localhost:2112/options/chain/SPY/*/realtime"
params = {"page_size": 500, "show_stats": "true"}
while True:
    r = requests.get(url, params=params).json()
    for item in r["chain"]:
        ...  # process item
    if r["next_page"] is None:
        break
    params["next_page"] = r["next_page"]

next_page is opaque; round-trip it as-is. If the cursor references a contract that no longer exists, results start from page 1 with HTTP 200.

Response Fields

Top Level

Field Type Description
chain array Array of option chain items

Per-Contract — Option

Field Type Description
code string OCC symbol (e.g., AAPL261218C00230000)
ticker string Underlying symbol
expiration string Expiration date (YYYY-MM-DD)
expiration_time string ISO 8601 datetime with ET offset (e.g., 2026-12-18T16:00:00-04:00 for PM settlement, 2026-12-18T09:30:00-04:00 for AM settlement)
strike number Strike price
type string "call" or "put"

Per-Contract — Price (zeroed)

The price object is present for wire compatibility. Market data fields (last, last_size, volume, bid, bid_size, ask, ask_size, open_interest) are zeroed. Timestamp fields contain the current time. The exercise_style field is "A" (American) or "E" (European) based on the option root. The JSON example above shows the exact structure.

Per-Contract — Stats (when show_stats=true)

Field Type Description
implied_volatility number Annualized implied volatility
delta number \(\partial V / \partial S\)
gamma number \(\partial^2 V / \partial S^2\)
theta number \(\partial V / \partial t\) — per calendar day
vega number \(\partial V / \partial \sigma\)
underlying_price number Current underlying spot price

When show_stats is not true, the stats field is null.

Greek Scaling

Theta is returned per calendar day. All other Greeks pass through without rescaling. All output values are rounded to 4 decimal places.

How Lavender's Greeks Differ

Intrinio computes Greeks using Black-Scholes with European-style assumptions. Running Lavender alongside Intrinio gives you a second perspective that accounts for:

  • Early exercise — Lavender prices American options, capturing the early exercise premium that Black-Scholes misses
  • Discrete dividends — Lavender uses the actual dividend schedule rather than a continuous yield approximation
  • Implied borrow rates — Lavender solves for the borrow rate per expiry to enforce put-call parity, producing consistent call/put Greeks even in hard-to-borrow names
  • Two views of time decay — conventional theta (\(\partial V / \partial t\)) on this endpoint, plus a separate decay metric (expected change to next trading day, accounting for weekends and holidays) on the Lavender API
  • Extended Greeks — access vanna, charm, volga, speed, and more via the Lavender API

Migrating to the Lavender Native API

Intrinio Lavender API
/{symbol} in path underlying= query param
option.expiration expiry
stats.implied_volatility vol
stats.delta delta (flat)

Error Responses

Status Condition
200 Success
400 Missing or invalid symbol or expiration in path
502 Upstream data unavailable

Error response body

Errors return a JSON envelope:

{
  "error": "Missing symbol"
}

See also

  • Field Reference — every L1 field with units, source, and example values
  • Greek Conventions — sign conventions, units, and the full extended Greeks catalog
  • Verify the Greeks — derive each Greek from first principles and check against the API