---
title: "Derivative daily bars"
method: GET
path: "/v1/derivatives/{underlying}/bars/daily"
tags: ["derivatives"]
---

# Derivative daily bars

`GET /v1/derivatives/{underlying}/bars/daily`

## Request

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

End-of-day OHLC, settlement, volume and open interest for every contract of one underlying and expiry. NSE history from 2001, BSE from 2024. `expiry` is required (see /expiries); narrow with `instrument`, `strike`, `option_type`, `exchange`. Window defaults to the 90 days before `to` (max 400 days). Untraded sessions publish null open/high/low/close with `traded: false`; use `settle_price` as the mark. Pages by date, then contract.

## Path parameters

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

## Query parameters

- `expiry` string, required
- `instrument` 'future' | 'option'
- `strike` number
- `option_type` 'CE' | 'PE'
- `exchange` 'NSE' | 'BSE'
- `from` string
- `to` string
- `limit` integer
- `cursor` string

## Response `200`

OK. Costs one request unit.

- object
  - `data` DerivativeDailyBarsItem[], required
    - `date` string, required: Trading session (YYYY-MM-DD).
    - `exchange` 'NSE' | 'BSE', required: Listing exchange.
    - `instrument` 'future' | 'option', required: future or option.
    - `expiry` string, required: Contract expiry (YYYY-MM-DD).
    - `strike` number, nullable, required: Strike price in INR (index points for index options); null for futures.
    - `option_type` 'CE' | 'PE', nullable, required: CE (call) or PE (put); null for futures.
    - `open` number, nullable, required: Open price in INR. Null when the contract did not trade that session.
    - `high` number, nullable, required: High price in INR. Null when untraded.
    - `low` number, nullable, required: Low price in INR. Null when untraded.
    - `close` number, nullable, required: Last traded price in INR. Null when untraded (no stale carried-forward close is published).
    - `settle_price` number, nullable, required: Exchange daily settlement price in INR, the session's mark for untraded contracts. On an option's own expiry day this is the option's final settlement value, derived as intrinsic value at `underlying_settlement_price`. Null when not published.
    - `underlying_settlement_price` number, nullable, required: Only on the contract's expiry date: the underlying's final settlement price used to settle it. Null on all other days, and on expiry days before Feb 2020 where it was not published.
    - `traded` boolean, nullable, required: True when at least one contract traded that session.
    - `volume_contracts` number, nullable, required: Contracts traded. Normalised across exchanges; null when it cannot be derived (BSE without a known lot size).
    - `volume_units` number, nullable, required: Volume in units of the underlying (shares, or index units for index derivatives). Null before 2024 for NSE where the lot size is not known.
    - `open_interest_units` number, nullable, required: Open interest at session end, in units of the underlying.
    - `open_interest_contracts` number, nullable, required: Open interest in contracts (units / lot size). Null when the lot size is unknown.
    - `change_in_open_interest_units` number, nullable, required: Change in open interest versus the previous session, in units of the underlying.
    - `lot_size` number, nullable, required: Lot size in force that session, in units of the underlying. Null before 2024 where not published.
  - `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)
