Dale Steyn claimed six Indian wickets as South Africa finally found some life in the Kingsmead pitch to bowl the tourists out for 334 on the second day of the second Test on Friday.
The home side reached 82 without loss by stumps to cut the deficit to 252 runs.
After a three-hour rain delay, Steyn took three wickets in 10 balls at the start of play and another three after tea to pull India back from a big total after they resumed on 1-181.
Steyn (6-100) began by finding the outside edge of Cheteshwar Pujara’s bat to remove him for 70 and end a 157-run overnight partnership with Murali Vijay.
South Africa’s spearhead also had Vijay for 97 and Rohit Sharma for a first-ball duck.
Ajinkya Rahane resisted for a first Test half-century, but Steyn returned to dismiss another three Indians in the space of eight balls.
India had two solid partnerships around the impressive Rahane, playing his third Test, when he combined for 66 with Virat Kohli (46) to recover from Steyn’s initial onslaught.
Rahane also shared an attacking 55-run stand with captain Mahendra Singh Dhoni (24) before Dhoni’s edge off Steyn to Graeme Smith at first slip began India’s second and final collapse.
They lost their last five wickets for 14 runs.
Spinner JP Duminy’s solitary wicket, removing Ravindra Jadeja for a duck, also produced a milestone for retiring allrounder Jacques Kallis as he went low to his left at slip to scoop his 200th Test catch in his final match. Only former India batsman Rahul Dravid has taken more catches in Tests.
Wicketkeeper AB de Villiers also claimed five catches in the innings, including a standout high jumping one-handed take off a thick edge from Zaheer Khan’s shot off Steyn.
The top-ranked South Africans forced their way back into the series-deciding game of the two-Test contest after No.2-ranked Indians completely dominated the first day.