KiteConnect Historical API is returning wrong data for almost all symbols

connectgovind
KiteConnect Historical API is returning wrong data for almost all symbols. I'm not sure what is the reason.

Can I not rely on Kite Historical API's data for any research? FYI, I'm using Java kiteconnect 3.5.1 version.

Example:
Below are the values returned by Kite Historical API vs NSE Bhav Copy.

Kite Historical API: ITC Day candle for 2025-09-22:
Open: 410.65, High: 412.0, Low: 407.55, Close: 408.2, Volume: 10425600

NSE Bhav Copy: ITC Day candle for 2025-09-22:
Open: 410.65, High: 411, Low: 406.05, Close: 406.95, Volume: 8930779
-----------------------------------------------------------------------------------------------------------------------
Kite Historical API: ITC Day candle for 2025-09-23:
Open: 410.4, High: 410.4, Low: 402.95, Close: 404.8, Volume: 9790400

NSE Bhav Copy: ITC Day candle for 2025-09-23:
Open: 407.1, High: 408.1, Low: 402.1, Close: 403.2, Volume: 14936357
  • Nivas
    If you’ve retrieved today's candle data on the same day, the OHLC data will not match the bhavcopy. This is because the OHLC updates through the bhavcopy occur at midnight. Therefore, starting the next morning, the day's OHLC in the bhavcopy and the historical OHLC data via API should be consistent.
  • connectgovind
    The data I shared were not retrieved on the same day. All are historical data only.

    Just now I tested for 22nd September. Still it's not matching with NSE data.

    NSE:ITC, Timestamp: 2025-09-22T00:00:00+0530, Open: 410.65, High: 412.0, Low: 407.55, Close: 408.2, Volume: 10425600
  • Nivas
    I attempted to fetch historical data via the API, and it appears to match the NSE bhavcopy accurately. I recommend reviewing your code logic to identify and address any issues.
  • connectgovind
    Thanks for your input. Possible to share the snippet which you are using?
    Below is how I fetch it. Is it incorrect?
            interval = "day";
    fromDate = formatter.parse("2025-09-22 09:15:00");
    toDate = formatter.parse("2025-09-22 15:30:00");
    historicalData = kiteConnect.getHistoricalData(
    fromDate,
    toDate,
    instrumentToken,
    interval,
    false,
    false
    );
  • connectgovind
    Just noticed that my program was fetching current month future's token it seems.
    Sorry about the confusion. Kite API is working fine.
This discussion has been closed.