---
title: "Option IV and Greeks by strike"
method: GET
path: "/v1/derivatives/{underlying}/option-analytics"
tags: ["derivatives"]
---

# Option IV and Greeks by strike

`GET /v1/derivatives/{underlying}/option-analytics`

## Request

- Base URL: `https://api.tapetide.com`
- URL: `https://api.tapetide.com/v1/derivatives/{underlying}/option-analytics`
- Auth: HTTP bearer

Implied volatility and Greeks for every option strike of one underlying, expiry and session, computed end-of-day with Black-76 on the forward. History from 2001 (NSE) and 2024 (BSE). `date` and `expiry` are required. IV is in percent. Pages by exchange, strike, option type.

## Path parameters

- `underlying` string, required: Underlying symbol as listed for derivatives, e.g. "NIFTY", "BANKNIFTY", "SENSEX", "RELIANCE". Percent-encode "&" (M%26M).

## Query parameters

- `date` string, required
- `expiry` string, required
- `option_type` 'CE' | 'PE'
- `min_strike` number
- `max_strike` number
- `exchange` 'NSE' | 'BSE'
- `limit` integer
- `cursor` string

## Response `200`

OK. Costs one request unit.

- object
  - `data` DerivativeOptionAnalyticsItem[], required
    - `date` string, required: Trading session (YYYY-MM-DD).
    - `exchange` 'NSE' | 'BSE', required: Listing exchange.
    - `expiry` string, required: Option expiry (YYYY-MM-DD).
    - `strike` number, required: Strike price in INR / index points.
    - `option_type` 'CE' | 'PE', required: CE (call) or PE (put).
    - `premium` number, nullable, required: Option price in INR the analytics were computed from; see `premium_basis`.
    - `premium_basis` 'traded_close' | 'settlement' | 'stale_close', nullable, required: traded_close: the session's closing trade. settlement: the exchange settlement price of an untraded session. stale_close: an untraded session priced off an older carried-forward close (mostly older history); treat its IV and Greeks with caution.
    - `forward` number, nullable, required: Forward price of the underlying for this expiry, in INR / index points.
    - `forward_basis` 'futures' | 'put_call_parity' | 'spot_carry', nullable, required: How the forward was estimated: the same-expiry futures price, put-call parity on the most-traded near-the-money strike pair, or spot carried at the risk-free rate.
    - `years_to_expiry` number, nullable, required: Calendar days to expiry / 365.
    - `log_moneyness` number, nullable, required: ln(forward / strike): 0 at the money, positive when the forward is above the strike.
    - `iv_pct` number, nullable, required: Implied volatility, annualised percent (13.33 = 13.33%). Black-76 on the forward at a 6.5% rate. Null unless `iv_status` is ok.
    - `iv_status` 'ok' | 'below_intrinsic' | 'above_limit' | 'expiry_day' | 'no_price', nullable, required: ok: IV solved. below_intrinsic: premium at or below intrinsic value (no time value to solve). above_limit: premium above the no-arbitrage bound. expiry_day: not computed on expiry day. no_price: no usable premium.
    - `delta` number, nullable, required: Delta per 1 unit move in the forward (calls 0..1, puts -1..0).
    - `gamma` number, nullable, required: Gamma: change in delta per 1 unit move in the forward.
    - `vega` number, nullable, required: Vega in INR per 1 percentage-point change in implied volatility.
    - `theta` number, nullable, required: Theta in INR per calendar day (negative for a long option).
  - `meta` ListMeta, required
    - `as_of` string, date-time, required: When this response was assembled (UTC).
    - `route` string, required: operationId that served the request.
    - `count` integer, required: Items in this page.
    - `limit` integer, required: Page size applied.
    - `has_more` boolean, required: Whether another page exists.
    - `next_cursor` string, nullable, required: Pass as `cursor` to fetch the next page; null on the last page.
  - `links` Links, required
    - `next` string, nullable: Relative URL of the next page, or null.

## Other responses

- `400`: Malformed or out-of-range parameter. Not charged.
- `401`: Missing or invalid bearer token.
- `404`: The requested resource does not exist. Not charged.
- `429`: Per-minute burst cap (`rate_limited`) or plan quota (`quota_exhausted`) reached.
- `500`: Unexpected server error. Not charged.
- `502`: A data dependency was unavailable. Not charged.
- `503`: Authentication or quota service temporarily unavailable (`service_unavailable`). Not charged; retry after `Retry-After` seconds.

---

[API](https://skmtc.dev/tapetide/apis/tapetide-api.md) · [All operations](https://skmtc.dev/tapetide/apis/tapetide-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tapetide/apis/tapetide-api/revisions/261ec086bde5?raw)
