Two late strikes by Jasprit Bumrah kept India on course for victory despite a defiant half-century by South African captain Dean Elgar on the fourth day of the first Test at SuperSport Park in Centurion on Wednesday.
South Africa, needing 305 to win, were 94 for four at the close.
Bumrah produced a superb delivery which cut back sharply to end a long defensive innings by Rassie van der Dussen before bowling nightwatchman Keshav Maharaj in the last over of the day.
Elgar batted for more than three hours to make 52 not out against hostile bowling on a pitch of variable bounce.
It was a typically determined effort by Elgar, who saw opening partner Aiden Markram bowled by Mohammed Shami in the second over of the innings.
Markram’s early dismissal continued a dismal sequence of opening partnerships for South Africa in their last three Tests of 0, 1, 4, 2 and 1.
Keegan Petersen made 17 before he was caught behind off Mohammed Siraj but Elgar and van der Dussen (11) made the bowlers work for more than 22 overs on a hot afternoon before the latter fell to Bumrah.
It was a day of contrasts.
India eked out 63 runs for the loss of three wickets in the morning, seeing off the shine and hardness of a ball which was still relatively new.
But the match moved ahead rapidly during an extended afternoon session.
Starting the afternoon with an overall lead of 209 India took a more attacking approach as they added 95 runs off 18.3 overs while losing their remaining seven wickets.
Despite captain Virat Kohli falling to the first ball after lunch, edging a drive against a delivery slanted across him from tall left-arm fast bowler Marco Jansen, the Indian batsmen went for their shots while wickets fell at regular intervals.
Ajinkya Rahane hit Jansen for 4, 6, 4 off successive deliveries before being caught in the deep off the same bowler in his next over.
Risabh Pant played a typically aggressive innings and top-scored with 34 off 34 balls.
Debutant Jansen took four for 55 and Kagiso Rabada claimed four for 42.