An undefeated century from Alviro Petersen helped South Africa reach 252 for three after skittling New Zealand for 45 on a dramatic opening day of the first Test on Wednesday.
New Zealand, dogged by the controversy surrounding the sacking of former captain Ross Taylor, capitulated to the South African pace attack, their innings lasting just 19.2 overs as fast bowler Vernon Philander completed figures of five for seven.
Morne Morkel and Dale Steyn cleaned up the tail, the latter picking up his 300th Test scalp and South Africa's perfect day was complete when all-rounder Jacques Kallis passed the milestone of 13,000 Test runs shortly after tea.
New Zealand's total was the eighth-lowest in Test history, only Kane Williamson reaching double-figures with a score of 13.
South Africa had two overs to face before the lunch break and captain Graeme Smith became the 11th victim of the morning when Doug Bracewell trapped him lbw for one.
But Petersen and Hashim Amla consolidated in the second session and a century-stand put the hosts in control of the game.
Amla fell for 66 shortly before tea but Petersen reached his fifty off Bracewell in the first over after the interval.
Kallis brought the crowd to their feet when he blazed a boundary through backward point to become only the fourth player and first South African to score 13,000 Test runs.
Kallis cruised to his 57th half-century but the second century partnership of the innings ended when Trent Boult had the all-rounder caught behind for 60 with the total on 212 for three.
The stylish Petersen has been criticised for failing to convert starts into big scores, but he silenced the doubters when he brought up his fifth Test century in the penultimate over with a guided shot behind point for two.
Petersen will resume on day two on 103 with his partner AB de Villiers on 19.
Philander claimed five early wickets as South Africa made New Zealand skipper Brendon McCullum pay for choosing to bat first.
Philander struck in the second over when he had Martin Guptill caught behind for one.
That triggered an ignominious procession for the New Zealanders with Philander removing McCullum, Dean Brownlie and Williamson in his next three overs as the visitors lost their top order for 27 runs inside 10 overs.
Morkel (three for 14) soon got into the act, removing James Franklin caught at first slip for one.
Steyn reached the 300 mark when he returned after a barren first spell to remove Bracewell's off-stump with a fine out swinger.
Morkel claimed the wickets of Jeetan Patel and Boult before Steyn picked up the final wicket when Daniel Flynn, who survived 28 deliveries, skied a catch back to the fast bowler.