From ThetaData — Option Snapshots¶
Looking for a second source of option Greeks alongside ThetaData, or an alternative option Greeks API with dividend-aware, early-exercise-aware pricing and extended Greeks through third order? Lavender delivers independently computed Greeks through ThetaData's own wire format — no code changes required.
Already fetching option Greeks from a ThetaData terminal? Change the port number — everything else stays the same.
Differences from ThetaData¶
Lavender matches ThetaData's wire format with a few specific differences worth knowing when migrating:
bidandaskare always0.0. Lavender computes Greeks; it does not redistribute OPRA quotes.- Vega/rho/epsilon use ThetaData's per-unit scaling, not the per-1% convention used by every other compat layer. See Greek Scaling below; the values are 100x larger than per-1%.
- Several parameters accepted-but-ignored.
stock_price,annual_dividend,rate_type,rate_value,use_market_value,version,min_time-- Lavender uses its own model inputs. - v2 wire format also supported — both v3 and v2 endpoints work, though ThetaData is deprecating v2 themselves. See ThetaData v2 below if you have legacy code.
For the modeling differences (American exercise, discrete dividends, calibrated borrow), see How Lavender's Greeks Differ below.
What Changes¶
Change the port. The path, parameters, column names, and output format are all identical.
Try it in your browser¶
Paste this into any browser to see ThetaData-format Greeks rendered as an HTML table. No code needed.
Pick Your Endpoint¶
ThetaData v3 organizes Greek snapshots into five endpoints by Greek order. Lavender supports all five — same paths, same field sets:
| Your Current Endpoint | What It Returns |
|---|---|
/v3/option/snapshot/greeks/all |
Full set: first + second + third order, d1, d2, dual Greeks |
/v3/option/snapshot/greeks/first_order |
delta, theta, vega, rho, epsilon, lambda |
/v3/option/snapshot/greeks/second_order |
gamma, vanna, charm, vomma, veta |
/v3/option/snapshot/greeks/third_order |
speed, zomma, color, ultima |
/v3/option/snapshot/greeks/implied_volatility |
IV and IV error only |
Gamma is second-order
Following ThetaData's convention, gamma is grouped with second-order Greeks, not first-order. The /greeks/all endpoint returns everything.
All Greeks¶
Same response shape — a {"response":[...]} envelope grouping rows by (symbol, expiration, strike, right):
{
"response": [
{
"contract": {
"symbol": "AAPL",
"expiration": "2026-12-18",
"strike": 230.0,
"right": "CALL"
},
"data": [
{
"timestamp": "2026-03-06T17:42:14.943",
"delta": 0.3924,
"gamma": 0.025,
"vega": 19.5855,
"implied_vol": 0.245,
"underlying_price": 260.5
}
]
}
]
}
Contract identifiers live in contract only; data rows carry the rest. CSV and NDJSON are flat per-row.
Market data fields are zeroed
The bid and ask fields are returned as 0.0. The Greek, IV, and computed fields contain Lavender's computed values.
Field Reference — All Greeks¶
Base Fields¶
| Field | Type | Description |
|---|---|---|
symbol |
string | Underlying ticker |
expiration |
string | Expiration date (YYYY-MM-DD) |
strike |
decimal | Strike price |
right |
string | CALL or PUT (uppercase) |
timestamp |
string | Quote timestamp (ISO 8601) |
bid |
double | Option bid (always 0.0) |
ask |
double | Option ask (always 0.0) |
First-Order Greeks¶
| Field | Type | Description |
|---|---|---|
delta |
double | \(\partial V / \partial S\) |
theta |
double | \(\partial V / \partial t\) — per calendar day |
vega |
double | \(\partial V / \partial \sigma\) |
rho |
double | \(\partial V / \partial r\) |
epsilon |
double | \(\partial V / \partial q\) |
lambda |
double | \(\Delta \cdot S / V\) (leverage ratio) |
Second-Order Greeks¶
| Field | Type | Description |
|---|---|---|
gamma |
double | \(\partial^2 V / \partial S^2\) |
vanna |
double | \(\partial^2 V / \partial S\,\partial \sigma\) |
charm |
double | \(\partial^2 V / \partial S\,\partial t\) — annualized |
vomma |
double | \(\partial^2 V / \partial \sigma^2\) |
veta |
double | \(\partial^2 V / \partial \sigma\,\partial t\) — per calendar day |
vera |
double | \(\partial^2 V / \partial \sigma\,\partial r\) |
Third-Order Greeks¶
| Field | Type | Description |
|---|---|---|
speed |
double | \(\partial^3 V / \partial S^3\) |
zomma |
double | \(\partial^3 V / \partial S^2\,\partial \sigma\) |
color |
double | \(\partial^3 V / \partial S^2\,\partial t\) — annualized |
ultima |
double | \(\partial^3 V / \partial \sigma^3\) |
Computed Fields¶
| Field | Type | Description |
|---|---|---|
d1 |
double | Black-76 d1 (computed from calibrated forward, strike, vol, time) |
d2 |
double | Black-76 d2 |
dual_delta |
double | dPrice/dStrike (foreign delta under Black-76) |
dual_gamma |
double | d²Price/dStrike² |
Volatility & Underlying¶
| Field | Type | Description |
|---|---|---|
implied_vol |
double | Annualized implied volatility |
iv_error |
double | Always 0.0. Present for wire compatibility. |
underlying_timestamp |
string | Spot price timestamp (ISO 8601) |
underlying_price |
double | Current underlying spot price |
First Order¶
Base fields plus: delta, theta, vega, rho, epsilon, lambda, implied_vol, iv_error, underlying_timestamp, underlying_price.
Second Order¶
Base fields plus: gamma, vanna, charm, vomma, veta, implied_vol, iv_error, underlying_timestamp, underlying_price.
Third Order¶
Base fields plus: speed, zomma, color, ultima, implied_vol, iv_error, underlying_timestamp, underlying_price.
Implied Volatility¶
Base fields plus: implied_vol, iv_error, underlying_timestamp, underlying_price.
Parameters¶
All five endpoints share the same parameters:
| Parameter | Type | Required | Allowed Values | Default |
|---|---|---|---|---|
symbol |
string | Yes | Underlying ticker (e.g., SPY) |
— |
expiration |
string | Yes | YYYYMMDD, YYYY-MM-DD, or * (all) |
— |
strike |
decimal | No | Numeric (e.g., 230.0) or * (all) |
* |
right |
string | No | call, put, or both |
both |
max_dte |
integer | No | Maximum days to expiry (non-negative) | — |
strike_range |
integer | No | N strikes above/below ATM per expiry | — |
format |
string | No | csv, json, ndjson, html |
csv |
The following ThetaData parameters are accepted but silently ignored — Lavender uses its own model inputs:
annual_dividend, rate_type, rate_value, stock_price, version, min_time, use_market_value
Default format is CSV
The ThetaData compatibility layer defaults to csv, matching ThetaData's convention. The Lavender native API defaults to json.
Response Formats¶
CSV (default)¶
Standard header row followed by data rows:
symbol,expiration,strike,right,timestamp,bid,ask,delta,theta,vega,...
AAPL,2026-12-18,230.0000,CALL,2026-03-06T17:42:14.943,0.0000,0.0000,0.3924,-0.2261,19.5855,...
Content-Type: text/csv; charset=utf-8
JSON envelope¶
JSON wraps rows in a {"response":[...]} envelope. Each element groups by the 4-tuple (symbol, expiration, strike, right):
contract— the four identifier fieldsdata— an array of row objects with everything else (timestamps, Greeks, IV, underlying)
Snapshot endpoints emit one row per contract, so data is typically length 1.
NDJSON¶
One JSON object per line — each line is a complete contract record:
{"symbol":"AAPL","expiration":"2026-12-18","strike":230.0,"right":"CALL","delta":0.3924,...}
{"symbol":"AAPL","expiration":"2026-12-18","strike":230.0,"right":"PUT","delta":-0.6076,...}
Content-Type: application/x-ndjson; charset=utf-8
HTML¶
Renders a full Greeks table directly in your browser — no code needed. Paste this URL and see all Greeks for SPY's near-term chain:
Numeric values are formatted to 4 decimal places. Useful for quick inspection, spot-checking positions, or sharing a link.
Filtering¶
By Expiration¶
Use * for all expirations, or specify a date:
# All expirations
curl "...?symbol=SPY&expiration=*&format=csv"
# Single expiration (both formats accepted)
curl "...?symbol=SPY&expiration=20261218&format=csv"
curl "...?symbol=SPY&expiration=2026-12-18&format=csv"
By Strike¶
By Strike Range¶
Return only N strikes above and below the ATM strike per expiration. ATM is determined by the call with delta closest to 0.5.
# 5 strikes above + 5 below + ATM = up to 11 strikes × both sides
curl "...?symbol=SPY&expiration=20261218&strike_range=5&format=csv"
By Right¶
By Max DTE¶
Greek Scaling¶
ThetaData is the only vendor that returns vega, rho, and epsilon as raw BSM values (per unit) rather than per 1%. All other 8 supported vendors use per-1%, which matches the Lavender API convention. ThetaData values for these Greeks will be 100× larger than the same Greek on any other endpoint.
| Greek | Convention | Notes |
|---|---|---|
| Theta, Veta | Per calendar day | Same as all other vendors |
| Charm, Color | Annualized (per year) | ThetaData convention |
| Vega, Rho, Epsilon | Per unit (raw BSM) | 100× larger than per-1% convention used by other vendors |
| All others | Standard units | No conversion |
All output values are rounded to up to 4 decimal places.
Ignored parameters
ThetaData parameters stock_price, annual_dividend, rate_type, rate_value, and use_market_value are accepted but silently ignored. Lavender uses its own calibrated rates, dividends, and forward prices.
Timestamps
The timestamp field reflects the time of the Lavender computation, not the last market data tick time.
Notes on specific fields¶
| Field | Notes |
|---|---|
iv_error |
Always 0.0. Present for wire compatibility. |
bid, ask |
Always 0.0 — Lavender computes Greeks only, not market quotes. Present for wire compatibility. |
vomma |
Also known as volga. Same as volga on the Lavender API. |
How Lavender's Greeks Differ¶
ThetaData computes Greeks using the standard Black-Scholes formula with European-style assumptions. Running Lavender alongside ThetaData gives you a second perspective that accounts for:
- Early exercise — Lavender prices American options, which matters for deep ITM equity options near ex-dividend dates
- Discrete dividends — rather than a continuous yield approximation, Lavender uses the actual dividend schedule
- 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 — Lavender provides 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
Comparing the two reports side-by-side highlights where these modeling differences matter most for your positions.
Migrating to the Lavender Native API¶
If you want to move from ThetaData-compatible endpoints to the Lavender native API, here are the key field name changes:
| ThetaData | Lavender API |
|---|---|
symbol |
root (or underlying for multi-root) |
expiration |
expiry |
underlying_price |
und_price |
implied_vol |
vol |
vomma |
volga |
ThetaData v2¶
Lavender also supports ThetaData's v2 bulk snapshot endpoints. The v2 API uses a different response format and parameter naming but returns the same Greeks.
v2 is deprecated
ThetaData is deprecating v2. New integrations should use v3. If you have existing v2 code, it works unchanged with Lavender — just change the port.
v2 Endpoints¶
| v2 Endpoint | Equivalent v3 Endpoint | Fields |
|---|---|---|
/v2/bulk_snapshot/option/greeks |
/v3/.../greeks/first_order |
delta, theta, vega, rho, epsilon, lambda |
/v2/bulk_snapshot/option/greeks_second_order |
/v3/.../greeks/second_order |
gamma, vanna, charm, vomma, veta |
/v2/bulk_snapshot/option/all_greeks |
/v3/.../greeks/all |
All first + second + third order |
There are no v2 equivalents for /greeks/third_order or /greeks/implied_volatility — use v3 for those.
v2 Parameters¶
| v2 Parameter | v3 Equivalent | Differences |
|---|---|---|
root |
symbol |
Same meaning, different name |
exp |
expiration |
YYYYMMDD integer or 0 for all (v3 uses YYYY-MM-DD or *) |
right |
right |
C or P (v3 uses call, put, or both) |
The v2 endpoints do not support strike, max_dte, strike_range, or format parameters.
v2 Response Format¶
The v2 response uses a format-header + ticks-array structure — different from v3's JSON shape:
{
"header": {
"latency_ms": 0,
"next_page": null,
"format": [
"ms_of_day", "bid", "ask", "delta", "theta", "vega",
"rho", "epsilon", "lambda", "implied_vol", "iv_error",
"ms_of_day2", "underlying_price", "date"
]
},
"response": [
{
"contract": {
"security_type": "OPTION",
"root": "AAPL",
"expiration": 20261218,
"strike": 230000,
"right": "C"
},
"ticks": [
[63000000, 0.0, 0.0, 0.3924, -0.2261, 19.5855,
3.7952, -3.9564, 24.5713, 0.245, 0.0,
63000000, 230.15, 20260314]
]
}
]
}
The response also carries a Next-Page: null HTTP header.
Key differences from v3:
- Format header — column names are in
header.format, not as JSON keys. Zipformat[i]withticks[0][i]to reconstruct named fields. - One contract per response element — each
response[]entry has acontractobject and aticksarray (always length 1 for snapshots). - Strike in 1/10th cent —
230000= $230.00. Divide by 1,000 to get dollars. - Expiration as integer —
20261218instead of"2026-12-18". - Right as single char —
"C"or"P"instead of"CALL"/"PUT". - Time as ms_of_day — milliseconds since midnight ET, plus a separate
datefield (YYYYMMDD integer).
v2 Format Arrays by Endpoint¶
/greeks (first order — 14 fields):
ms_of_day, bid, ask, delta, theta, vega, rho, epsilon, lambda, implied_vol, iv_error, ms_of_day2, underlying_price, date
/greeks_second_order (13 fields):
ms_of_day, bid, ask, gamma, vanna, charm, vomma, veta, implied_vol, iv_error, ms_of_day2, underlying_price, date
/all_greeks (24 fields):
ms_of_day, bid, ask, delta, theta, vega, rho, epsilon, lambda, gamma, vanna, charm, vomma, veta, vera, speed, zomma, color, ultima, implied_vol, iv_error, ms_of_day2, underlying_price, date
Error Responses¶
| Status | Condition |
|---|---|
200 |
Success |
400 |
Missing/invalid symbol/root, expiration/exp, strike, right, format, max_dte, or strike_range |
404 |
Unsupported Greek order (e.g., /greeks/fourth_order) |
502 |
Upstream data unavailable |
Error response body¶
Errors return a JSON envelope:
error_type is one of:
| Value | Status code |
|---|---|
INVALID_PARAMS |
400 |
NO_PAGE_FOUND |
404 |
NO_DATA |
500 |
DISCONNECTED |
502 |
ERROR |
catch-all |
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