Skip to content

    Trading APIs

    Historical data API India: what each archive actually contains

    A historical data API in India can provide daily candles, intraday candles or expired derivatives, but those are different datasets. The six broker services checked on 14 October 2026 document different intervals and access conditions. Official NSE and BSE bhavcopies, daily exchange files, provide another starting point. Request limits, retention and permission to reuse data must be checked separately.

    Facts checked 14 Oct 2026 against 21 sources. No affiliate links. Not investment advice.

    Match the archive to the question before choosing an API

    For an end-of-day price study, an exchange bhavcopy or daily-candle endpoint may supply the observations you need. For an intraday options study, you also need the right expired contract, interval and price fields. A long equity archive does not establish expired-option coverage, and an endpoint accepting a date does not prove that data exists for that date.

    This comparison covers published documentation at Zerodha, Dhan, Upstox, ICICI Direct, FYERS and Shoonya. It does not rank accuracy or speed: no broker account was used to test downloads. We did download and inspect the two named official exchange files later in the page. Those file checks establish their dates and structure, rather than the completeness of an entire exchange archive.

    The dataset specification to write down

    • Identity

      Name the exchange, segment and instrument. For options, retain the expiry, strike and call/put side, rather than just the underlying index name.

    • Observation

      Specify daily, minute or second candles and the required opening, high, low and closing prices (OHLC), volume or open-interest fields. A candle summary is different from a sequence of individual trades.

    • Time coverage

      Record the earliest required date separately from the maximum period allowed in one request. A short request window may still sit inside a long archive.

    • Entitlement

      Check the account, subscription and endpoint permissions. A general free-API headline may have a specific paid endpoint exception.

    Six broker historical services, with their documented boundaries

    Official documentation and company-owned references opened 14 October 2026. Selected services, not an exhaustive list. Unverified fields remain unverified; no download-quality test was performed.

    ServiceIntervals documentedPublished lookbackOne-request boundaryAccess or cost condition
    Zerodha Kite Connect1, 3, 5, 10, 15, 30, 60 minutes; dailySeveral years; no universal first date in endpoint docsStaff table edited May 2020: 1 min 60 days; 3/5/10 min 100; 15/30 min 200; 60 min 400; daily 2,000Connect ₹500 per app/month; Personal excludes history. GST treatment unstated; eligible renewal credits separate
    DhanHQ1, 5, 15, 25, 60 minutes; dailyIntraday last 5 years for active instruments; daily back to inceptionIntraday 90 daysData API subscription ₹499 + applicable taxes, renewed every 30 days
    Upstox historical v3Minutes 1–300; hours 1–5; daily, weekly, monthlyMinute/hour from January 2022; daily/week/month from January 20001–15 min: 1 month; longer minute/hour: 1 quarter; daily: 1 decade; week/month: no stated limitGeneral API page says free; expired endpoint has a separate Plus gate
    ICICI Direct BreezeV2 SDK options note: 1 second; 1, 5, 30 minutes; dailyProduct page: 3 years of second-level last traded price (LTP); official Python package: 10 years including 1-second OHLC and volume. Conflict unresolvedV2 SDK note: maximum 1,000 candle intervals per requestAPI access/history free with an ICICI Direct account; brokerage is separate
    FYERS history5/10/15/30/45 seconds; 1/2/3/5/10/15/20/30/60/120/240 minutes; daily/week/monthDeveloper reference: minute history from 3 July 2017; seconds last 30 trading daysMinute: 100 days; daily/week/month: 366 daysSupport FAQ says history, quotes and market data are free
    ShoonyaDaily EOD; intraday 1/3/5/10/15/30/60/120/240 minutesDaily spans described as weeks/months/years; intraday short lookback, without a numerical retention promiseExact archive/request span not established in these docsSeparate API fee not established by the historical endpoint pages

    Kite intervals/continuous scope: endpoint docs; request spans: dated staff reply; entitlement: pricing FAQ. Dhan: historical docs and subscription FAQ. Upstox: v3 docs plus expired endpoint and general API page. Breeze: product page and official Python-package documentation, including their unresolved depth conflict. FYERS: its verified-domain developer organisation's reference plus support fee FAQ. Shoonya: daily and Time/Price Series docs. Starting dates do not guarantee every instrument existed or has complete observations.

    Expired options require an extra identity check

    There are two questions to ask an options-data provider: can it identify a contract that has expired, and can it return the observations required for that contract? An option-chain screen showing today's contracts answers neither question about an old backtest.

    Dhan's rolling endpoint deserves particular attention. Its strike selection is relative to spot, such as at-the-money (ATM) or a position above or below ATM, and the returned fields include the actual strike. A rolling ATM series can refer to changing strikes across timestamps. Preserve that strike column if your research requires a fixed contract; do not relabel the rolling series as one unchanged option.

    Kite's documented continuous facility is for daily expired NFO and MCX futures. That is useful scope information, but it should not be expanded into an expired-options intraday promise. Its instrument master contains live contracts, and the docs discuss caching tokens before expiry. Token storage and historical-data availability remain separate requirements.

    Expired derivatives: which documentation answers which question?

    Checked 14 October 2026. “Not established” is a limit of the sources opened, rather than a claim that a broker has no capability.

    ServiceWhat is establishedBoundary to retain
    Dhan rolling optionsIndex and stock options, up to 5 years; 1/5/15/25/60 min; up to 30 days per callNear-expiry index options ATM ±10; other contracts ATM ±3. Relative-strike series; end date non-inclusive
    Upstox expired instrumentsSeparate expired-instrument key and historical endpoint; Plus subscription requiredParameter/prose lists 1/3/5/15/30 min and daily; error table instead lists 1/30 min, daily/week/month. Universal depth and Plus price not verified here
    Kite continuous futuresDaily expired NFO and MCX futures through a live contract tokenDoes not document an equivalent complete expired-options intraday archive
    BreezeHistorical options requests have expiry, strike and call/put inputs in official SDK examplesSamples and headline lookback do not establish every expired contract's coverage; 3-year/10-year conflict remains
    FYERSReference includes continuous-futures flagComplete expired-option coverage not established by the reference opened
    ShoonyaDaily instrument and intraday token-based endpointsExpired-contract lookup and retention not established by these pages

    Upstox's overlapping interval statements agree on 1 minute, 30 minutes and daily; that agreement is documentation evidence, not an authenticated test. Specific expired access is restricted to Plus despite the general free-API headline. Check the endpoint permission instead of assuming the headline covers it.

    Sources: [6], [9], [1], [12], [13], [15], [16]

    An approximate five-year minute archive: requests, not a speed test

    Illustrative assumptions: a 1,825-day window, 500 instruments with usable history, one instrument per request and non-overlapping 60-day chunks. The window is an approximation, not a dated five-year calendar period. We use Kite's published staff span and current historical rate limit. No download was timed.

    Requests for one instrumentceil(1,825 ÷ 60) = 31; round upward because the last partial window still needs a call
    31
    Requests for the assumed universe31 × 500
    15,500
    Simplified rate budget15,500 ÷ 3 historical requests per second
    5,166.6667 seconds
    Expressed in minutes5,166.6667 ÷ 60; rounded to 2 decimal places
    86.11 minutes
    Same simplified budget in hours
    1.44 hours

    Sources: [2], [3]

    What the time estimate leaves undecided

    The arithmetic translates a request count into a rate budget. It assumes the requested history exists and ignores response times, network transfer, authentication, errors and retries. It also assumes that the date boundaries can be divided as specified without extra overlap calls. Those assumptions need checking in the actual endpoint and client implementation.

    It is therefore unsuitable as a promise that a job will finish in that time. A request that returns no records still consumes effort, and an apparently successful response may contain fewer timestamps than expected. We have not measured file size, compression, memory use or sustained endpoint throughput, so none is inferred from this model.

    For a download plan, first calculate calls for the exact interval and permitted window. Keep that plan beside a log of completed date ranges. If the service caps returned candles rather than dates, use its stated candle limit instead of borrowing another provider's day limit. Comparing those units is more useful than calling a vendor fast without a controlled test.

    A bhavcopy walkthrough using an official file

    1. 1

      Select the exchange report family

      On NSE's All Reports page, choose the capital-market reports for equities or the derivatives reports for F&O. The catalogues point to current UDiFF common bhavcopies. Select the desired report date; do not assume an old-format filename from a tutorial remains the current download.

    2. 2

      Download and preserve the original

      Use the exchange's offered file. For this guide, the named NSE CM ZIP for 13 October 2026 was downloaded and extracted successfully. Record the exact URL, trade date and retrieval date before working on a copy. A local filename alone is weak evidence of which day the content represents.

    3. 3

      Read identity and date fields first

      The downloaded NSE file has TradDt, BizDt, Sgmt, FinInstrmId, ISIN and TckrSymb fields. Its records carry the stated trade date and CM segment. Check the identifiers before joining files; similarly named securities or different share series should not be silently combined.

    4. 4

      Use the observations the file contains

      Its fields include opening, high, low and closing prices and total trading volume. The daily file is not a recovered sequence of minute candles. In derivatives data, preserve contract identity fields rather than treating the underlying name alone as the instrument.

    5. 5

      Keep the unmodified copy and its terms

      Analyse a separate working copy and acknowledge the source. The downloaded BSE CM file for the same date also has UDiFF identity and daily price fields. This inspection verifies those files, without establishing permission to republish them commercially or a guarantee that every historical date is available.

    “Users may view, print copies and download the Content for personal, non-commercial or educational purpose”
    NSE copyright policy, opened 14 October 2026; accompanying conditions include acknowledgement and preserving the content.

    Source: [19]

    The two original files actually inspected

    NSE CM bhavcopy, 13 October 2026
    3,648 records
    Downloaded ZIP, extracted CSV; checked trade date, segment and field names. No price-quality benchmark.

    Source: [20]

    BSE CM bhavcopy, 13 October 2026
    5,033 records
    Downloaded CSV; checked trade date, segment and field names. Different record counts do not compare exchange quality.

    Source: [21]

    Free access, account access and reuse permission

    Start with an official exchange download when its daily observations answer the question. If you need intraday candles or contract-specific history, use the documented broker endpoint and its account entitlement. A broker's inclusion of history in an account service does not automatically make it a public data product for redistribution.

    NSE's copyright permission includes acknowledgement, accurate reproduction and conditions on preserving content. The availability of a download link is therefore different from a licence to sell a dataset or operate a public feed. This guide offers no scraping route or workaround for access restrictions. If your intended use goes beyond the stated permission, seek the data owner's appropriate terms.

    For subscription billing and brokerage, follow the API-fee comparison; the Kite plan guide explains its pricing timeline and credit uncertainty. If you are preparing a strategy test, backtesting basics can help define the study, while backtest versus live results covers the separate interpretation of the result. Neither a long archive nor a paid subscription demonstrates future profitability.

    Before treating the dataset as ready

    • Record the actual coverage

      Keep the first and last returned timestamps, instrument identity, interval and any missing ranges. Preserve a log of unavailable requests instead of filling holes without a stated method.

    • Resolve source conflicts

      Ask ICICI Direct which instruments and intervals have the advertised ten-year coverage. Confirm Upstox expired-endpoint entitlements and the inconsistent interval list before building around them.

    • Keep the study and trade record distinct

      When you later compare model assumptions with your own outcomes, use real recorded trades and the expectancy calculator. A historical price file supplies observations; it does not record your decision or execution.

    Sources

    Every figure on this page comes from one of these. Each was checked on the date shown.

    1. [1]Kite historical candles · checked 14 Oct 2026
    2. [2]Kite staff request-span table, edited May 2020 · checked 14 Oct 2026
    3. [3]Kite endpoint rate limits · checked 14 Oct 2026
    4. [4]Kite plan pricing · checked 14 Oct 2026
    5. [5]Dhan historical data endpoints · checked 14 Oct 2026
    6. [6]Dhan expired rolling options · checked 14 Oct 2026
    7. [7]Dhan Data API subscription · checked 14 Oct 2026
    8. [8]Upstox historical candles v3 · checked 14 Oct 2026
    9. [9]Upstox expired historical candles · checked 14 Oct 2026
    10. [10]Upstox API overview · checked 14 Oct 2026
    11. [11]Breeze product page and FAQs · checked 14 Oct 2026
    12. [12]Official Breeze Python client documentation · checked 14 Oct 2026
    13. [13]FYERS developer market-data reference · checked 14 Oct 2026
    14. [14]FYERS historical-data fee FAQ · checked 14 Oct 2026
    15. [15]Shoonya daily history · checked 14 Oct 2026
    16. [16]Shoonya Time/Price Series · checked 14 Oct 2026
    17. [17]NSE capital-market report catalogue · checked 14 Oct 2026
    18. [18]NSE derivatives report catalogue · checked 14 Oct 2026
    19. [19]NSE copyright policy · checked 14 Oct 2026
    20. [20]NSE original CM bhavcopy, 13 October 2026 · checked 14 Oct 2026
    21. [21]BSE original CM bhavcopy, 13 October 2026 · checked 14 Oct 2026