New Zealand extended their lead to a challenging 188 after spinner Mitchell Santner took 7-53 to bowl out India cheaply on day two of the second Test on Friday.
India fell to 156 all out in their first innings, giving the visitors a lead of 103 on a turning pitch in Pune.
New Zealand, who lead the three-match series 1-0, were 85-2 at tea in their second innings after Washington Sundar trapped Devon Conway lbw for 17 and Ravichandran Ashwin got Will Young for 23.
Skipper Tom Latham, on 37, and Rachin Ravindra, on seven, were batting at the break to keep up New Zealand's hopes of a first-ever Test series win in India.
Santner stood out with his left-arm spin as he claimed his first five-wicket haul in 29 Test appearances to trump India at their own game of spin.
Ravindra Jadeja top-scored with 38 but India's batting fell apart, with the hosts bowled out in the second session in just 45.3 overs.
Overnight batsmen Yashasvi Jaiswal and Shubman Gill started cautiously before Santner struck in the 11th over of the day.
He trapped Gill lbw for 30 with a slider to the right-hander.
The home fans were then stunned into silence when Santner took the prized wicket of Kohli, bowled on a low full toss.
Off-spinner Glenn Phillips struck on his fourth ball to get the left-handed Jaiswal caught at slip for 30 to leave the hosts on 70-4 and then 83-5 when he bowled Rishabh Pant for 18.
First-match centurion Sarfaraz Khan managed 11 before Santner got him caught at mid-on.
Spinner Sundar returned to India's Test team with 7-59 on Thursday to bowl out New Zealand after gritty knocks from Devon Conway (76) and Rachin Ravindra (65).
Last week's win by New Zealand was their first Test victory on Indian soil since 1988.