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:
priceobject is zeroed.last,bid,ask,volume,open_interest, and other market-data fields come back with0values; timestamps reflect the current time. Lavender computes Greeks; it does not redistribute OPRA quotes.api_keyandAuthorizationaccepted-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¶
Swap the host. Your api_key parameter or auth header is accepted and ignored.
Try it in your browser¶
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¶
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:
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