India were on 31/1 at the break, with Murali Vijay on 12 and Cheteshwar Pujara on four.
Seam bowler Vernon Philander got the early breakthrough when Shikhar Dhawan got an edge to Jacques Kallis in the slips for 15 runs.
With that scalp, Philander became the fastest South African to take 100 Test wickets, achieving the milestone one match faster than Dale Steyn.
The Proteas were handed a blow in the final over before lunch when speedster Morne Morkel was helped off the field after twisting his ankle while fielding on the boundary. It was unclear whether he would bowl again.
Earlier, in the morning session, India wasted no time in removing the Proteas tail, dismissing the hosts for 244 runs in their first innings.
South Africa resumed at 213/6 and paceman Zaheer Khan struck early when Philander got an outside edge to Ravichandran Ashwin in the slips in the fourth over of the day.
Philander, who put up a valiant fight after a middle-order collapse on day two, made his third career half-century, contributing a well-played 59 runs off 86 deliveries.
Faf du Plessis, who shared a crucial 80-run stand with Philander, tried to prop up the tail after making a determined 20-run contribution, but Zaheer had him caught behind and the Proteas were soon bundled out.
Zaheer and Ishant Sharma took four wickets each to lead a destructive Indian pace attack that took full advantage of the conditions to give their side a narrow first innings lead.
Follow @TheCitizenSport for up to date cricket scores.