Repeated critical failures in Kite API

I am repeatedly getting incorrect prices in kite through websocket and API calls where best bid price is higher than best ask price. This is an impossible scenario.

I have been getting this issue throughout the last 2 days, with multiple and different instruments every second

To verify if it is an exchange issue or broker issue whenever I received such a tick, I simultaneously placed an API call to kite and another broker to compare and the prices on second broker are always correct. So this is clearly a Zerodha issue and not an issue with the exchange feed.

For example, this is the quote sent for GOLD26JAN134000PE:
Kite showing best bid 14308.5 and best ask 78
{‘124050183’: {‘instrument_token’: 124050183, ‘timestamp’: datetime.datetime(2026, 1, 20, 15, 55, 9), ‘last_trade_time’: datetime.datetime(2026, 1, 20, 15, 54, 37), ‘last_price’: 87.5, ‘last_quantity’: 1, ‘buy_quantity’: 41, ‘sell_quantity’: 30, ‘volume’: 378, ‘average_price’: 64.01, ‘oi’: 235, ‘oi_day_high’: 274, ‘oi_day_low’: 235, ‘net_change’: 0, ‘lower_circuit_limit’: 0.5, ‘upper_circuit_limit’: 2124.5, ‘ohlc’: {‘open’: 72, ‘high’: 100, ‘low’: 50, ‘close’: 73.5}, ‘depth’: {‘buy’: [{‘price’: 14308.5, ‘quantity’: 2, ‘orders’: 2}, {‘price’: 78, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 79.5, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 74, ‘quantity’: 3, ‘orders’: 2}, {‘price’: 73.5, ‘quantity’: 1, ‘orders’: 1}], ‘sell’: [{‘price’: 74, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 86, ‘quantity’: 2, ‘orders’: 2}, {‘price’: 85, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 88, ‘quantity’: 2, ‘orders’: 1}, {‘price’: 91, ‘quantity’: 1, ‘orders’: 1}]}}}
Broker 2 showing best bid at 79.5 and best ask at 85
{‘message’: ‘’, ‘code’: 200, ‘d’: [{‘n’: ‘MCX:GOLD26JAN134000PE’, ‘v’: {‘ask’: 85, ‘bid’: 79.5, ‘chp’: 19.05, ‘ch’: 14, ‘description’: ‘MCX:GOLD26JAN134000PE’, ‘exchange’: ‘MCX’, ‘fyToken’: ‘1120260127484571’, ‘high_price’: 100, ‘low_price’: 50, ‘lp’: 87.5, ‘open_price’: 72, ‘original_name’: ‘MCX:GOLD26JAN134000PE’, ‘prev_close_price’: 73.5, ‘short_name’: ‘GOLD26JAN134000PE’, ‘spread’: 5.5, ‘symbol’: ‘MCX:GOLD26JAN134000PE’, ‘tt’: ‘1768867200’, ‘volume’: 378, ‘atp’: 64.01}, ‘s’: ‘ok’}], ‘s’: ‘ok’}

You can see best buy price as per kite is 14308.5 and best sell price as per kite is 78. This is an impossible situation as sell price always must be > buy price otherwise exchange will match the prices and trades will execute. Not just this, the best bid is higher than the upper circuit limit of 2124.5
On broker 2, best buy price (bid) is 61116 and best sell price (ask) is 63800 which is correct

Similarly, yesterday there are some ticks where Zerodha has sent price of NATURALGAS JANUARY FUTURE in the quote/websocket of NATURALGAS FEBRUARY FUTURE. The 1 tick where the mismatch has happened is showing higher volume than the entire day volume of the contract.
This is visible on the chart also
NATURALGAS26FEBFUT:


NATURALGAS26JANFUT:

**Anyone using these prices to trade/calculate indicators would have seen disastrous results. **
Raising the issues to support is pointless as they have no clue and no one from the tech side ever gets looped in. What is the solution here?

More examples:
GOLD26JAN137000PE on kite showing best bid 136.5 and best ask 131.5
{‘126231047’: {‘instrument_token’: 126231047, ‘timestamp’: datetime.datetime(2026, 1, 20, 15, 50, 20), ‘last_trade_time’: datetime.datetime(2026, 1, 20, 15, 50, 7), ‘last_price’: 137, ‘last_quantity’: 1, ‘buy_quantity’: 42, ‘sell_quantity’: 38, ‘volume’: 554, ‘average_price’: 108.67, ‘oi’: 447, ‘oi_day_high’: 487, ‘oi_day_low’: 447, ‘net_change’: 0, ‘lower_circuit_limit’: 0.5, ‘upper_circuit_limit’: 4580, ‘ohlc’: {‘open’: 116, ‘high’: 155.5, ‘low’: 84.5, ‘close’: 118}, ‘depth’: {‘buy’: [{‘price’: 136.5, ‘quantity’: 2, ‘orders’: 2}, {‘price’: 134.5, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 133.5, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 132, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 132, ‘quantity’: 2, ‘orders’: 1}], ‘sell’: [{‘price’: 131.5, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 140.5, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 142.5, ‘quantity’: 2, ‘orders’: 2}, {‘price’: 142.5, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 145, ‘quantity’: 2, ‘orders’: 1}]}}}
GOLD26JAN137000PE on broker 2 showing best bid 136.5 and best ask 140.5
{‘message’: ‘’, ‘code’: 200, ‘d’: [{‘n’: ‘MCX:GOLD26JAN137000PE’, ‘v’: {‘ask’: 140.5, ‘bid’: 136.5, ‘chp’: 16.1, ‘ch’: 19, ‘description’: ‘MCX:GOLD26JAN137000PE’, ‘exchange’: ‘MCX’, ‘fyToken’: ‘1120260127493090’, ‘high_price’: 155.5, ‘low_price’: 84.5, ‘lp’: 137, ‘open_price’: 116, ‘original_name’: ‘MCX:GOLD26JAN137000PE’, ‘prev_close_price’: 118, ‘short_name’: ‘GOLD26JAN137000PE’, ‘spread’: 4, ‘symbol’: ‘MCX:GOLD26JAN137000PE’, ‘tt’: ‘1768867200’, ‘volume’: 554, ‘atp’: 108.82}, ‘s’: ‘ok’}], ‘s’: ‘ok’}

SILVERM26JAN262000CE on kite showing best bid 92511.5 and best ask 63800
{‘130384135’: {‘instrument_token’: 130384135, ‘timestamp’: datetime.datetime(2026, 1, 20, 15, 27, 14), ‘last_trade_time’: datetime.datetime(2026, 1, 20, 14, 48, 10), ‘last_price’: 60980.5, ‘last_quantity’: 1, ‘buy_quantity’: 3, ‘sell_quantity’: 5, ‘volume’: 144, ‘average_price’: 59097.47, ‘oi’: 375, ‘oi_day_high’: 412, ‘oi_day_low’: 375, ‘net_change’: 0, ‘lower_circuit_limit’: 24619.5, ‘upper_circuit_limit’: 92511.5, ‘ohlc’: {‘open’: 52486.5, ‘high’: 69616.5, ‘low’: 52451, ‘close’: 51213.5}, ‘depth’: {‘buy’: [{‘price’: 92511.5, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 35000.5, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 35000, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 0, ‘quantity’: 0, ‘orders’: 0}, {‘price’: 0, ‘quantity’: 0, ‘orders’: 0}], ‘sell’: [{‘price’: 63800, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 63801, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 63826, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 63830, ‘quantity’: 1, ‘orders’: 1}, {‘price’: 86800, ‘quantity’: 1, ‘orders’: 1}]}}}
SILVERM26JAN262000CE on broker 2 showing best bid 61116 and best ask 63800
{‘message’: ‘’, ‘code’: 200, ‘d’: [{‘n’: ‘MCX:SILVERM26JAN262000CE’, ‘v’: {‘ask’: 63800, ‘bid’: 61116, ‘chp’: 19.07, ‘ch’: 9767, ‘description’: ‘MCX:SILVERM26JAN262000CE’, ‘exchange’: ‘MCX’, ‘fyToken’: ‘1120260127509313’, ‘high_price’: 69616.5, ‘low_price’: 52451, ‘lp’: 60980.5, ‘open_price’: 52486.5, ‘original_name’: ‘MCX:SILVERM26JAN262000CE’, ‘prev_close_price’: 51213.5, ‘short_name’: ‘SILVERM26JAN262000CE’, ‘spread’: 2684, ‘symbol’: ‘MCX:SILVERM26JAN262000CE’, ‘tt’: ‘1768867200’, ‘volume’: 144, ‘atp’: 59097.47}, ‘s’: ‘ok’}], ‘s’: ‘ok’}
Like I said, multiple examples every single second.

3 Likes

@nivas_k

We identified this behavior in a few commodity contracts and have escalated the matter to our service provider and the exchange. We are currently following up with them.

What is the ETA for this? I’m unable to take any trades until this is resolved

The issue is because of wrong mapping of prices to instruments right?

We understand the urgency of this issue. It has been escalated to the service provider and the exchange, and we are awaiting further details from them.

While we are pushing for a resolution as quickly as possible, we’re unable provide a firm timeline yet, as we are dependent on their external investigation.

Hi @nivas_k @siva , It’s been 1 week and there doesn’t seem to be any improvement in the matter. I continue to see incorrect option prices on the API/websocket

To make matters worse, my GOLD option contract has been settled at an incorrect price on expiry. I had an open sell position of 1 quantity of GOLD26JAN157900PE day before yesterday at expiry.
The closing price of GOLD Future was 157699 on expiry so my option is ITM and should have been settled at a price of 201 and devolved into a long future position. But the contract note is showing that the option has been incorrectly settled at a price of 0 and the option has not devolved into a future.
I had a short future position entered as a hedge for this devolvement and since devolvement has not happened, I was left with an outstanding short position overnight, which I had to close yesterday at open at a devastating loss of -2,78,600

@nithin - are you aware of these issues? Zerodha is knowingly working with incorrect prices since at least 1 week and has neither sent out a notification, nor fixed the issue. Can I expect any resolution here?

Can you DM me your ID?

Hi

You had GOLD26JAN157900PE short 1 qty. It was not devolved because the buyer opted for DNE.
The entire premium received while entering the position will be your profit.

Details here.

Shouldn’t there be some notification when counterparty has opted for DNE?
Otherwise it is impossible to know whether devolvement will happen or not and there will be overnight risk?
Also Zerodha doesn’t provide the option for DNE right?

MCX exchange does not give specific data for positions where DNE is opted.
Also, DNE can be submitted from the buyer’s side on the option expiry day upto 15 minutes after market close, so there is always overnight risk.

Understood, so this is not related to the incorrect prices streaming issue.

Does Zerodha allow clients to choose DNE?

Also, any resolution on the incorrect prices issue?

No, because the long option client will lose the entire premium if he opts for DNE.

In the current volatility scenario, it is better to let go of 100-200 premium when overnight risk is easily 3000-4000 points
The option not to exercise should definitely be provided since illiquidity doesn’t allow you to easily exit the position

Can something please be done about this please! The prices are completely off

Bid price is higher than offer price and offer prices are not even in correct order

Still noticing this?

Yes this screenshot is from today

@siva is anyone intending to resolve this? It’s been 20 days since I highlighted the issue.
I don’t suppose Zerodha is expecting traders to pay for (and trade with) this quality of data?

We have taken this up with our vendor and exchange, following up, can take few more days to get resolution.