---
title: "Derivative contracts"
method: GET
path: "/v1/derivatives/contracts"
tags: ["derivatives"]
---

# Derivative contracts

`GET /v1/derivatives/contracts`

## Request

- Base URL: `https://api.tapetide.com`
- URL: `https://api.tapetide.com/v1/derivatives/contracts`
- Auth: HTTP bearer

Listed futures and option contracts for one underlying from 2001 onward (NSE) and 2024 onward (BSE), including expired contracts. Defaults to contracts expiring from today onward. Filter by `expiry` (exact) or `from_expiry`/`to_expiry` (historical windows at most 2 years apart). Pages by expiry, instrument, strike, option type.

## Query parameters

- `underlying` string, required
- `expiry` string
- `from_expiry` string
- `to_expiry` string
- `instrument` 'future' | 'option'
- `exchange` 'NSE' | 'BSE'
- `limit` integer
- `cursor` string

## Response `200`

OK. Costs one request unit.

- object
  - `data` DerivativeContractsItem[], required
    - `underlying` string, required: Underlying symbol.
    - `exchange` 'NSE' | 'BSE', required: Listing exchange.
    - `kind` 'index' | 'stock', required: Index or single-stock derivative.
    - `instrument` 'future' | 'option', required: future or option.
    - `expiry` string, required: Expiry date (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.
    - `lot_size` number, nullable, required: Contract lot size in units of the underlying, as first listed. Not adjusted for later splits/bonuses; null before 2024 where not published.
    - `trading_symbol` string, nullable, required: Exchange trading symbol, e.g. NIFTY-Oct2026-22600-CE.
  - `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)
