Spinner Ravichandran Ashwin took his 35th five-wicket haul as India bowled England out for 145 on day three of the fourth Test on Sunday to set up a chase of 192 to clinch the series.
India reached 40/0 at stumps, needing another 152 to win their third straight match and the five-match Test series.
Skipper Rohit Sharma was unbeaten on 24, with Yashasvi Jaiswal on 16.
After top-scoring with sixty earlier, England's batting collapsed against India's spin attack, as Ashwin returned figures of 5/51 and Kuldeep Yadav picked up 4/20.
It was up to the bowlers to level the series and push it to a fifth-Test showdown in Dharamsala after England lost wickets frequently to complete their innings in the final session.
After wicketkeeper Dhruv Jurel struck 90 in the morning session to cut the hosts’ deficit after they started the day on 219/7, India's bowlers put up a clinical performance.
On a field with cracks and inconsistent bounce, Ashwin was given the new ball. He struck in quick succession to remove Ben Duckett, who was caught at short leg for 15, and Ollie Pope, who was leg before wicket without scoring, reducing England to 19/2.
Root, who scored an unbeaten 122 in the first innings, put on 46 with Crawley before Ashwin and India reviewed an lbw appeal, with ball tracking indicating that the ball pitched just in line and would have hit Root's leg stump.
Crawley (60) had gotten off to a good start but Yadav bowled him after he turned one sharply with his wrist spin on his left arm.
Just before tea, captain Ben Stokes was dismissed by Yadav after he was bowled off his pad by a ball that just bounced ankle high, unseating the England captain for the second time in the innings.
After tea, Jonny Bairstow was bowled out on the first ball and the innings was quickly over. Ben Foakes gave up 17 runs off 76 balls to Ashwin.
India was bowled out for 307 by England spinner Shoaib Bashir, who claimed his first five-wicket haul in a Test match, giving the visitors a 46-run lead entering their second innings.
India were rescued in the morning session by Jurel, who put on a 76-run eighth-wicket stand with overnight partner Yadav.
Veteran fast bowler James Anderson broke the stand when Yadav, on 28, played on to give the veteran seamer his 698th Test wicket.
The 41-year-old is now two victims away from becoming just the third bowler to take 700 wickets in Tests, after Sri Lanka's Muttiah Muralitharan (800) and the late Australian great Shane Warne (708).
Jurel, who made his debut in the third Test in Rajkot, hit six fours and four sixes in his 149-ball stay and picked up his maiden Test half-century.
Bashir, 20, who missed England's win in the first Test due to a visa issue, trapped debutant Akash Deep lbw for his fifth wicket and kissed the ground in celebration.
With inputs from AFP