Jacques Kallis and AB de Villiers consolidated South Africa's position with half-centuries after Dale Steyn sparked a sensational Indian collapse in the second Test here on Thursday.
The 24-year-old Steyn gave a magnificent display of fast bowling on a lively track to finish with 5-23 as India crashed to 76 in their first innings in one of their worst batting performances in recent years.
Kallis (60 not out) and De Villiers (59 not out) put on 106 for the unfinished fifth-wicket stand to press home the advantage given by Steyn as South Africa reached 223-4 in reply at stumps, for a lead of 147 runs.
India made a horror start after winning the toss as their batsmen looked clueless against a quality pace attack led by Steyn, who bagged his eighth haul of five or more wickets in a Test innings.
Steyn was brilliantly supported by Makhaya Ntini (3-18) and Morne Morkel (2-20) as India were dismissed before lunch on the opening day for the first time in Test cricket. The innings lasted only 20 overs.
India's total was their lowest against South Africa and the second-lowest at home in Tests. It was also their second-shortest innings, after 17 overs against England at Lord's in 1974, when they were shot out for 42.
Off-spinner Harbhajan Singh briefly boosted India's hopes of restricting South Africa's lead with three wickets in four overs, but Kallis and De Villiers batted sensibly to deny the hosts further success.
South Africa gained the lead without losing a wicket as skipper Graeme Smith (34) and Neil McKenzie (42) put on 78 for the opening wicket.
Harbhajan removed first-Test century-makers McKenzie and Hashim Amla (16) before accounting for Ashwell Prince (two) in quick succession, but South Africa found the right pair in Kallis and De Villiers.
The Indian batsmen, who had posted 627 on a flat track in the drawn opening Test in Chennai, were exposed against pace on a pitch having both pace and movement in the morning session.
Irfan Pathan (21 not out) and wicketkeeper Mahendra Singh Dhoni (14) were the only batsmen to reach double figures in a fragile batting performance. Extras were the second-highest contributors with 19.
India were in danger of falling to their lowest-ever total of 66 (at Durban in 1996) against South Africa when they were 56-8, but Pathan and Rudra Pratap Singh put on 20 for the ninth wicket.
Steyn took two big wickets when he dismissed hard-hitting Virender Sehwag and Rahul Dravid, India's key batsmen in the previous match.
Sehwag, who hammered the fastest recorded triple-century in Chennai, made six this time before inside-edging a delivery on to his stumps.
Dravid, who scored a hundred to join the 10,000-run club in the last game, was also beaten by the movement after making three.
India's batting problems began in the fourth over when Ntini had Wasim Jaffer (nine) caught by Smith, who held a low catch to his left at first slip.
Ntini then bagged two wickets in his fourth over as Venkatsai Laxman was bowled shouldering arms and Sourav Ganguly played a delivery on to his stumps before Steyn and Morkel made short work of the Indian innings.