India managed to remove South Africa for 184, but were dealt a blow in their second innings when they lost Shikhar Dhawan for a duck before tea on day two of the first Test.
After a troubling first innings on the opening day, India recovered with the ball by snatching three wickets in the morning session.
The Proteas reached lunch on 127-5, but India were not done as Ravindra Jadeja, Amit Mishra and Ravichandran Ashwin all grabbed wickets in the afternoon session.
Vernon Philander (3), Simon Harmer (7), Dale Steyn (6) and Imran Tahir (4) were all sent packing, but the significant dismissal was that of AB de Villiers, who battled to 63 off 83 balls before getting bowled out by Mishra.
The Indian bowler nabbed two wickets overall, while Jadeja claimed three and Ashwin took an impressive five wickets in South Africa's first innings.
After a decent spell on the field, India returned to the crease, but the hosts' momentum was lost when De Villiers caught out Dhawan for a duck off the bowling of Philander inside the third over.
India had just nine runs on the board, but they managed to reach the end of the session without any more casualties.
The hosts are 13-1 with a 30-run lead over South Africa.