South Africa seamer Lungi Ngidi took 6-71 as South Africa made light work of bowling India out for 327 on the third morning of the first test on Tuesday and reached lunch on 21 for one wicket in reply.
Opener Aiden Markram (nine not out) and Keegan Petersen (11) will resume in an extended afternoon session after rain washed out the entire second day at Centurion Park.
South Africa captain Dean Elgar (1) was the batsman dismissed on a wicket that has quickened up considerably after a slow first day. He edged India seamer Jasprit Bumrah to wicketkeeper Rishabh Pant.
Ngidi, who took career best 6-39 on debut against India at Centurion in 2018, profited from the added bounce under a hot Highveld sun as he helped South Africa claim the last seven Indian wickets for the addition of only 55 runs.
The touring side had resumed their first innings on 272 for three, but were bowled out within another 15.3 overs after fiery fast bowling from Ngidi and Kagiso Rabada (3-72) and poor shot selection from their batsmen.
Opener KL Rahul could only add a single run to his score before he was out for 123, caught by wicketkeeper Quinton de Kock as he attempted a pull off Rabada.
Ajinkya Rahane (48) was undone by extra bounce from Ngidi and edged to De Kock, while Pant (8) was caught by Rassie van der Dussen at short leg off the same bowler.
The Indian tail-enders tried to hit their way out of trouble, but wickets continued to fall at regular intervals.
Bumrah (14) was the last man out, providing a first test wicket for 21-year-old debutant seamer Marco Jansen.
Watch the latest DH videos: