From MarketData.app — Options Chain & Quotes¶
Looking for a second source of option Greeks alongside MarketData.app? Lavender delivers independently computed Greeks through MarketData.app's own wire format — no code changes required.
Already fetching option Greeks from MarketData.app? Change the host — everything else stays the same.
What Changes¶
Change the host. No API key needed. The path, parameters, field names, and columnar JSON format are all identical.
Try it in your browser¶
Endpoints¶
| Endpoint | Description |
|---|---|
/v1/options/chain/{underlying} |
Full options chain for an underlying |
/v1/options/quotes/{optionSymbol} |
Single contract by OCC symbol |
Chain Parameters¶
| Parameter | Type | Required | Description |
|---|---|---|---|
side |
string | No | call or put |
expiration |
string | No | Exact date (yyyy-MM-dd) or all |
dte |
integer | No | Closest expiration to N days from today |
from |
string | No | Expiration floor (yyyy-MM-dd) |
to |
string | No | Expiration ceiling (yyyy-MM-dd) |
strike |
string | No | Exact value, comma-list, range (400-410), or expression (>=400, <500) |
range |
string | No | itm, otm, or all |
delta |
string | No | Single value (nearest) or range (.30,.60) |
strikeLimit |
integer | No | Limit to N strikes nearest ATM |
format |
string | No | json (default), csv, ndjson, html (csv/ndjson/html are Lavender extensions) |
Response Format¶
The default JSON response uses MarketData.app's columnar format — each field is a parallel array, with a status string "s":
{
"s": "ok",
"optionSymbol": ["AAPL261218C00230000", "AAPL261218P00230000"],
"underlying": ["AAPL", "AAPL"],
"expiration": [1797552000, 1797552000],
"side": ["call", "put"],
"strike": [230.0, 230.0],
"dte": [276, 276],
"iv": [0.245, 0.312],
"delta": [0.583, -0.417],
"gamma": [0.0198, 0.0198],
"theta": [-0.1425, -0.1025],
"vega": [0.312, 0.312],
"underlyingPrice": [252.71, 252.71],
"bid": [0, 0],
"ask": [0, 0],
"mid": [0, 0],
"last": [null, null],
"volume": [0, 0],
"openInterest": [0, 0],
"inTheMoney": [true, false],
"intrinsicValue": [22.71, 0],
"extrinsicValue": [0, 0],
"updated": [1710450600, 1710450600],
"firstTraded": [0, 0],
"bidSize": [0, 0],
"askSize": [0, 0]
}
Market data fields are zeroed
Fields like bid, ask, mid, last, volume, openInterest, bidSize, askSize are zeroed. The iv, delta, gamma, theta, vega, and computed fields contain Lavender's values.
Field Reference¶
Greeks & Computed¶
| Field | Type | Description |
|---|---|---|
optionSymbol |
string | OCC contract symbol (compact, no padding) |
underlying |
string | Underlying ticker |
expiration |
long | Expiration as Unix timestamp (seconds) |
side |
string | call or put |
strike |
double | Strike price |
dte |
int | Calendar days to expiration |
iv |
double | Implied volatility (decimal: 0.25 = 25%) |
delta |
double | Per $1 spot move |
gamma |
double | Per $1 spot move |
theta |
double | Per calendar day |
vega |
double | Per 1% vol move |
underlyingPrice |
double | Current underlying price |
inTheMoney |
bool | true if ITM |
intrinsicValue |
double | Max(0, spot−K) for calls, Max(0, K−spot) for puts |
extrinsicValue |
double | Model value minus intrinsic |
updated |
long | Computation time as Unix timestamp (seconds) |
Market Data (zeroed)¶
bid, ask, mid, last, volume, openInterest, bidSize, askSize, firstTraded — present for wire compatibility but zeroed.
Single Contract Quotes¶
Returns the same columnar JSON format with a single element per array. If the contract is not found, returns {"s":"no_data","errmsg":"No data for ..."}.
Greek Scaling¶
All Greeks pass through without conversion — MarketData.app uses the same per-1% convention for vega as the Lavender API.
| Greek | Convention |
|---|---|
| Delta | Per share, −1 to +1 |
| Gamma | Per share, per $1 |
| Theta | Per calendar day |
| Vega | Per 1% vol move |
| IV | Decimal (0.25 = 25%) |
All output values are rounded to up to 4 decimal places.
How Lavender's Greeks Differ¶
MarketData.app computes Greeks using a standard Black-Scholes model. Running Lavender alongside MarketData.app gives you a second perspective that accounts for:
- Early exercise — Lavender prices American options, which matters for equity options near ex-dividend dates
- 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¶
| MarketData.app | Lavender API |
|---|---|
/{underlying} in path |
underlying= query param |
optionSymbol |
osym (always included) |
iv |
lav_vol |
side |
right |
underlyingPrice |
und_price |
| Columnar JSON | Flat array of objects |
Error Responses¶
| Status | Condition |
|---|---|
200 |
Success (or {"s":"no_data"} for valid symbol with no matching contracts) |
400 |
Missing symbol, invalid format |
404 |
Unsupported route |
502 |
Upstream data unavailable |
Error responses use JSON: {"s":"error","errmsg":"description"}.