---
title: "Delta-based 25-delta skew + ATM IV for one expiry"
method: GET
path: "/api/v1/options/{symbol}/skew"
tags: ["Options"]
---

# Delta-based 25-delta skew + ATM IV for one expiry

`GET /api/v1/options/{symbol}/skew`

25-delta skew computed IN DELTA SPACE from the snapshot's contract deltas: implied volatility is linearly interpolated at call delta +0.25 and put delta -0.25 between the adjacent bracketing contracts, and ``skew_25d = iv_put_25d - iv_call_25d`` (positive = downside protection priced over upside). The raw ``call_iv_skew``/``put_iv_skew`` strike rows of ``/iv-surface`` are the strike-space INPUT view; this endpoint answers in the delta convention practitioners quote. Contracts failing the shared IV plausibility gate (API-1.8) or missing a delta are excluded and counted - the literal-0.0 IV marker never enters the formula. A target outside the reliable chain's delta range yields null, never an extrapolated number. Defaults to the nearest expiry; error codes match ``/snapshot``.

## Path parameters

- `symbol` string, required — Underlier ticker.

## Query parameters

- `expiry` string, nullable — Optional expiry (YYYY-MM-DD). Defaults to the nearest by days_to_expiration.
- `date` string, nullable — Optional snapshot date (YYYY-MM-DD). Defaults to the latest cycle.

## Response `200`

25d skew + ATM IV payload.

- EnvelopeOptionsSkewPayload
  - `data` OptionsSkewPayload, required — Delta-based 25-delta skew + ATM IV for one expiry, computed from the snapshot's contract deltas (linear interpolation in delta space).
    - `symbol` string, required — Underlier ticker.
    - `snapshot_date` string, required — Snapshot date (YYYY-MM-DD).
    - `underlier_price` number, nullable — Underlier spot at snapshot time.
    - `expiry` string, required — Expiry the skew is computed for (YYYY-MM-DD). Defaults to the nearest.
    - `atm_iv` number, nullable — ATM implied volatility of the same expiry (plausibility-gated; null when the stored value fails the gate).
    - `iv_call_25d` number, nullable — Implied volatility interpolated at call delta +0.25. Null when the chain cannot bracket it (see call_25d_source).
    - `iv_put_25d` number, nullable — Implied volatility interpolated at put delta -0.25. Null when the chain cannot bracket it (see put_25d_source).
    - `skew_25d` number, nullable — iv_put_25d - iv_call_25d. Positive = downside protection priced over upside (the usual equity-index state). Null when either side is null.
    - `call_25d_source` string, nullable — How iv_call_25d was obtained: `exact` (a contract sits on the target delta), `interpolated` (between the bracketing pair), or null with the side null - `out_of_range` never fabricates a number.
    - `put_25d_source` string, nullable — Same vocabulary as call_25d_source, for the put side.
    - `contracts_used_calls` integer, required — Reliable call contracts (gated IV + usable delta) that entered the interpolation set.
    - `contracts_used_puts` integer, required — Reliable put contracts that entered the interpolation set.
    - `dropped_unreliable_iv` integer, required — Contracts EXCLUDED from the calculation because their IV failed the shared plausibility gate (incl. the literal 0.0 marker, API-1.8) - the gate that used to leak into client-side skew formulas silently.
    - `dropped_missing_delta` integer, required — Contracts EXCLUDED because they carry no usable delta.
  - `meta` SugraMeta, required — Metadata attached to every /api/v1/* response envelope.
    - `endpoint` string, required — Requested endpoint path.
    - `data_time` string, required — ISO 8601 UTC timestamp of the source data, not of the request.
    - `response_time` string, required — ISO 8601 UTC timestamp when this response was produced.
    - `provider` string, required — API name and version.
    - `source` string, nullable — Identifier of the primary upstream source used for this response.
    - `attribution` string, nullable — Human-readable attribution mandated by an upstream source (e.g. a securities regulator or self-regulatory organization). Present only on responses whose source requires the owner and source to be clearly identified. Do not remove or alter it when using the response.
    - `fallback_used` boolean, nullable — True when the primary source failed and a fallback produced the data.
    - `fallback_chain` string[], nullable — Ordered list of sources attempted, in the order they were tried.
    - `cached` boolean, nullable — True when this response was served from the internal cache.
    - `stale` boolean, nullable — True when the cached response was returned after the upstream rate-limited or errored. Clients can use this to detect degraded data.

## Other responses

- `401` — Missing or invalid `x-api-key` header. JSON body with a stable `code` distinguishing `missing_api_key` (no header sent) from `invalid_api_key` (header sent, key not accepted); any other 401 source carries the generic `unauthorized` with its detail as `reason`. Plus `hint`. `plan` is always null on 401 - an unauthenticated request has no plan; quota exhaustion is 429, not 401.
- `422` — Validation Error
- `429` — Daily rate limit exceeded. Check `X-RateLimit-Reset` for the next window.
- `503` — Upstream source is temporarily unavailable. Retry after a short delay.

---

[API](https://skmtc.net/sugra/apis/sugra-api.md) · [All operations](https://skmtc.net/sugra/apis/sugra-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sugra/sugra-api/revisions/b9ea803689eb/schema)
