Skip to content

From Alpaca — Options Snapshots

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

Already fetching option snapshots from Alpaca? Swap the host — everything else stays the same.

Beta compatibility

This compatibility layer has automated test coverage but has not yet been validated against live Alpaca API traffic. If you encounter any inconsistencies with Alpaca's wire format, please contact support@lavender-ts.com.

What Changes

curl -H "APCA-API-KEY-ID: YOUR_KEY" -H "APCA-API-SECRET-KEY: YOUR_SECRET" \
     "https://data.alpaca.markets/v1beta1/options/snapshots/AAPL"
#      ^^^^^^^^^^^^^^^^^^^^^^^^^
curl "http://localhost:2112/v1beta1/options/snapshots/AAPL"
#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^

Swap the host. Your Alpaca auth headers are accepted and ignored — leave them or remove them. Same path, same response shape.

Try it in your browser

http://localhost:2112/v1beta1/options/snapshots/SPY?format=html

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

Same Response Format

The JSON you get back has the same structure — a snapshots dictionary keyed by OCC symbol:

{
  "snapshots": {
    "AAPL20261218C00230000": {
      "greeks": {
        "delta": 0.583,
        "gamma": 0.0198,
        "theta": -0.1425,
        "vega": 0.312,
        "rho": 0.301
      },
      "impliedVolatility": 0.245,
      "latestTrade": {
        "t": "2026-03-13T15:30:45.123Z",
        "x": "",
        "p": 0,
        "s": 0,
        "c": ""
      },
      "latestQuote": {
        "t": "2026-03-13T15:30:45.123Z",
        "bx": "",
        "bp": 0,
        "bs": 0,
        "ax": "",
        "ap": 0,
        "as": 0,
        "c": ""
      }
    },
    "AAPL20261218P00230000": {
      "greeks": {
        "delta": -0.417,
        "gamma": 0.0198,
        "theta": -0.0983,
        "vega": 0.312,
        "rho": -0.269
      },
      "impliedVolatility": 0.248,
      "latestTrade": {
        "t": "2026-03-13T15:30:45.123Z",
        "x": "",
        "p": 0,
        "s": 0,
        "c": ""
      },
      "latestQuote": {
        "t": "2026-03-13T15:30:45.123Z",
        "bx": "",
        "bp": 0,
        "bs": 0,
        "ax": "",
        "ap": 0,
        "as": 0,
        "c": ""
      }
    }
  },
  "next_page_token": null
}

Market data fields are zeroed

The latestTrade and latestQuote fields are returned with zeroed prices and empty strings. The greeks and impliedVolatility fields contain Lavender's computed values.


Endpoint

GET /v1beta1/options/snapshots/{underlying}

The underlying symbol is part of the URL path (e.g., /v1beta1/options/snapshots/SPY). Case-insensitive.

Query Parameters

All parameters are optional:

Parameter Type Description
type string call or put
limit integer Max results (1–10,000, default 10,000)
page_token string Pagination cursor (OCC symbol from next_page_token)
expiration_date string Exact expiration (YYYY-MM-DD)
expiration_date_gte string Expiration >= date
expiration_date_lte string Expiration <= date
strike_price_gte number Strike >= value
strike_price_lte number Strike <= value
root_symbol string Filter by root symbol

Alpaca's feed and updated_since parameters are accepted but not applied. If your workflow depends on either, contact support@lavender-ts.com.

Response Fields

Top Level

Field Type Description
snapshots object Dictionary of option contracts, keyed by OCC symbol (spaces removed)
next_page_token string/null Pagination cursor for next page, or null if no more results

Per-Contract Snapshot

Each key in snapshots is an OCC symbol without spaces (e.g., AAPL20261218C00230000).

Greeks

Field Type Description
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\)
rho number \(\partial V / \partial r\)

Volatility

Field Type Description
impliedVolatility number Annualized implied volatility (decimal, e.g., 0.245 = 24.5%)

Market Data (zeroed)

The latestTrade and latestQuote objects are present for wire compatibility but contain zeroed values. latestTrade includes t (timestamp), x, p, s, and c. latestQuote includes t, bx, bp, bs, ax, ap, as, and c. All prices are 0, all strings are "". The JSON example above shows the exact structure.

Greek Scaling

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

Migrating from Alpaca

One change:

  1. Base URL — replace https://data.alpaca.markets with http://localhost:2112

Your Alpaca auth headers (APCA-API-KEY-ID / APCA-API-SECRET-KEY) are accepted and ignored — leave them or remove them.

The endpoint path, response shape, and field names are identical.

How Lavender's Greeks Differ

Alpaca computes Greeks using Black-Scholes with European-style assumptions. While Alpaca supports American options for trading, its Greeks don't account for early exercise value. Running Lavender alongside Alpaca gives you:

  • Early exercise — Lavender prices American options, capturing the early exercise premium that Black-Scholes misses — especially relevant for deep ITM 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

Alpaca Lavender API
OCC key in snapshots dict osym (always included)
greeks.delta delta (flat)
impliedVolatility lav_vol
/{underlying} in path underlying= query param

Error Responses

Status Condition
200 Success
400 Missing underlying symbol in path
502 Upstream data unavailable