At lunch on day five of the second and final Test, India had reached 173/7, leading by seven runs in their second innings, with Ajinkya Rahane bringing up his second half-century of the match shortly before the interval as he put up a lone fight against the Proteas attack.
Rahane was unbeaten on 51 at the break, with Zaheer Khan on two not out.
Fast bowler Dale Steyn produced an early double strike to put India on the back foot after they resumed at 68/2, trailing the hosts by 98 runs.
Steyn removed Virat Kohli with the first ball of the day when the top-order batsman was caught behind for 11 runs.
While Kohli clearly felt aggrieved by the decision, and replays showed the ball clipped his arm, with India’s refusal to adopt the decision review system he was forced to return to the dressing room.
In his next over, Steyn dislodged Cheteshwar Pujara’s off stump for 32 runs and India were in trouble as they fought for a draw.
Rahane and Rohit Sharma attempted to stabilise the innings but Vernon Philander broke their 33-run stand for the fifth wicket when he trapped Sharma, who was involved in a verbal spat with Steyn, leg-before for 25 runs.
Rahane then combined with Indian skipper MS Dhoni in a 42-run partnership before spinner Robin Peterson got the breakthough with a double strike half an hour before the lunch break.
Peterson dismissed Dhoni, who made 15, and Ravindra Jadeja, who contributed eight runs, in the same over as both batsmen gifted the hosts their wickets with simple catches.