---
title: "Select one contract by closest delta (no full-chain download)"
method: GET
path: "/api/v1/options/{symbol}/strike-by-delta"
tags: ["Options"]
---

# Select one contract by closest delta (no full-chain download)

`GET /api/v1/options/{symbol}/strike-by-delta`

Returns the single contract whose delta is CLOSEST to the requested target on the requested expiry - the 'which strike is the 25-delta call' answer as one small response instead of the ~256 KB full chain plus a client-side search. Delta is SIGNED: positive selects from calls, negative from puts; the optional ``right`` parameter must agree with the sign when given. Contracts whose implied volatility fails the shared plausibility gate (including the upstream's literal 0.0 no-data marker, API-1.8) or that carry no usable delta are EXCLUDED before selection and disclosed in the ``dropped_*`` counters, so a gated chain can never silently select an empty contract. Error codes match ``/snapshot``: ``unknown_symbol``, ``expiry_not_in_snapshot``, ``snapshot_not_available``.

## Path parameters

- `symbol` string, required — Underlier ticker.

## Query parameters

- `expiry` string, required — Expiry to select from (YYYY-MM-DD). Required - delta targeting is per-expiry.
- `delta` number, required — Target delta, SIGNED: calls in (0, 1), puts in (-1, 0). 0.25 = the 25-delta call; -0.25 = the 25-delta put.
- `right` string, nullable — Optional side. When given it must agree with the delta sign; when omitted the sign decides.
- `date` string, nullable — Optional snapshot date (YYYY-MM-DD). Defaults to the latest cycle.

## Response `200`

The closest-delta contract + selection disclosure.

- EnvelopeOptionsStrikeByDeltaPayload
  - `data` OptionsStrikeByDeltaPayload, required — One contract selected by closest delta - the answer to 'which strike is the 25-delta call' without downloading the ~256 KB full chain.
    - `symbol` string, required — Underlier ticker.
    - `snapshot_date` string, required — Snapshot date the selection was made on (YYYY-MM-DD).
    - `underlier_price` number, nullable — Underlier spot at snapshot time.
    - `expiry` string, required — Expiry the contract was selected from (YYYY-MM-DD).
    - `option_type` string, required — C (call) or P (put), per OCC convention.
    - `target_delta` number, required — The requested delta, signed (calls positive, puts negative).
    - `delta_distance` number, required — |contract.delta - target_delta| for the selected contract - how close the chain could get.
    - `contract` OptionContract, required — One options contract row inside an expiry block.
      - `strike` number, required — Strike price.
      - `last_price` number, nullable — Last traded price; null when no trades.
      - `bid` number, nullable — Best bid; null when no quote.
      - `ask` number, nullable — Best ask; null when no quote.
      - `volume` integer, nullable — Contracts traded since open.
      - `open_interest` integer, nullable — Outstanding open interest.
      - `implied_volatility` number, nullable — Implied volatility as a decimal (0.20 = 20%). Null when upstream missing.
      - `delta` number, nullable — Black-Scholes delta (per 1.00 underlier move). Null when IV gate triggered.
      - `gamma` number, nullable — Black-Scholes gamma. Null when IV gate triggered.
      - `theta` number, nullable — Black-Scholes theta per calendar day. Null when IV gate triggered.
      - `vega` number, nullable — Black-Scholes vega per 1% vol point. Null when IV gate triggered.
      - `rho` number, nullable — Black-Scholes rho per 1% rate point. Null when IV gate triggered.
      - `in_the_money` boolean, nullable — True when strike is in-the-money at snapshot time.
      - `contract_symbol` string, nullable — OCC OSI contract symbol.
      - `last_trade_date` string, nullable — ISO timestamp of last trade; null when no trades since open.
      - `option_type` string, required — C (call) or P (put) per OCC convention.
      - `greeks_source` string, nullable — Per-contract Greeks origin token. Categories: equity IV/Black-Scholes zero-div path, non-equity IV/BS caveat path, exchange-native Greeks (e.g. VIX), or unreliable when the IV gate rejects the input. Wire values are stable tokens (see response payload); do not treat the token string as a brand name.
    - `contracts_considered` integer, required — Contracts on the requested side of the expiry that entered selection AFTER the reliability filter.
    - `dropped_unreliable_iv` integer, required — Contracts EXCLUDED before selection because their implied volatility failed the shared plausibility gate (incl. the upstream's literal 0.0 no-data marker, API-1.8). Disclosed so a gated chain can never silently select an empty contract.
    - `dropped_missing_delta` integer, required — Contracts EXCLUDED before selection 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)
