England had bowled out India for 191 and established a 99-run lead after posting 290 in reply, but Kohli’s side responded.
Player of the Match Rohit Sharma led the fightback with a century as India made 466 in the second innings, before skittling England for 210.
England had resumed at 77-0, with hope of a miracle win or draw, but lost Rory Burns for 50 to Shardul Thakur, with Dawid Malan run out for 5.
Haseeb Hameed was bowled by Jadeja before Bumrah removed Ollie Pope (2) and Jonny Bairstow (duck) in quick succession bowled. Left-hander Moeen Ali was caught for a duck at short leg off Jadeja.
The key wicket fell when India opted to not take the new ball immediately, as Joe Root edged on to his stumps bowled by Thakur for 36.
England’s tail-end resistance withered as Umesh Yadav claimed the final three wickets to bowl out the hosts for 210.
“The character that the side has shown, to come back from 100 run deficit showed that we were not down and out,” Kohli said after the game.
“I said at Lord’s as well, I am proud of the character, among the top three bowling performances I have witnessed as India captain.
“It’s relative what you call flat, the field wasn’t wet like the first three days, the ball got scuffed up nicely, one side heavier, and we exploited the reverse swing perfectly. We believed as a team that we could get all 10 wickets.”
India leads the five-game Test series 2-1 with the final Test commencing on Friday at Old Trafford.
England skipper Root added: “Frustrating not to get something from the game today, we felt we had an opportunity to win, but credit to India, they got the ball to reverse and that was the turning point.”