Ishant Sharma took five wickets, including three in an over, to leave India with a target of just 194 to win the first Test against England -- and more than two days' play to get them.
England were dismissed for 180 in a second innings that lasted a mere 53 overs on the third day at Edgbaston on Friday.
Their 1,000th Test match had threatened to end in a humiliating defeat as they slumped to 87 for seven shortly after lunch.
But Sam Curran, in just his second match at this level, struck a dashing 63, his maiden Test fifty, to leave England with a glimmer of hope in the first of this five-match series.
It was an impressive effort by the 20-year-old Curran, batting at No 8 and came just a day after the Surrey left-arm swing bowler had taken Test-best figures of four for 74.
But it also showed up the poor display by England's top order, with the next best score in the innings Jonny Bairstow's 28.
England had been on course to build a first-innings lead of more than a hundred runs.
But a masterful 149 by India captain Virat Kohli, the star batsman's first Test century in England, took India to 274 all out, a deficit of just 13 runs.
And before Thursday's close, India captured the prize wicket of Alastair Cook, England's all-time leading Test run-scorer, for a duck when, for the second time this match, off-spinner Ravichandran Ashwin bowled him with a superb delivery that pitched on middle and hit the off-stump.
It was not long on Friday before were England were 18 for two when Keaton Jennings nicked Ashwin to KL Rahul at second slip.
Ashwin struck again when England captain Joe Root, his team's best batsman, saw a genuine clip off pads lead to an excellent low catch at leg-slip by Rahul.
Root, who top-scored with 80 in England's first innings, put his hand on his head in despair at what he'd done in falling for 14.
Ashwin took three for 59 to follow his first-innings return of four for 62.
Middlesex left-hander Dawid Malan arguably 'owed' England a big score after dropping Kohli in the slips on 21 and 51 on Thursday.
But he fell for 20 when, squared up by Sharma's superb outswinger from around the wicket, he edged to Ajinkya Rahane in the gully.
Sharma then had Bairstow taken by Shikhar Dhawan at first slip and two balls later he dismissed Ben Stokes (six) via a fine low catch by Kohli at third slip off what became the last ball before lunch, with England 86 for six off 30.4 overs at the interval.
Two balls after play resumed, Sharma had dangerman Jos Buttler caught behind and England were 87 for seven.
But Curran, after a couple of fortunate edges and being dropped on 13 by Dhawan in the slips -- a tough chance -- found his form.
He struck Ashwin for a magnificent straight six and next ball drove him down to long-on for four.
Curran then brought up his maiden Test fifty in style when he lofted Sharma over extra-cover for a second six to reach the landmark in just 54 balls, including eight fours.
He was eventually last man out on the stroke of tea, caught behind off Umesh Yadav.