Stand-in captain Faf du Plessis scored his fifth Test century before his bowlers ripped through the New Zealand top order to leave South Africa firmly in charge after day two of the second Test at Centurion.
Du Plessis was unbeaten on 112 on Sunday when South Africa declared on 8-481 before reducing New Zealand to 3-38 at the close with superb fast bowling on a wicket that has both sideways movement and variable bounce.
Skipper Kane Williamson is not out on 15 and will carry the hopes of the touring side into the third day, along with Henry Nicholls who is unbeaten on four.
South Africa's opening bowlers, Dale Steyn and Vernon Philander, both returning to the side for this series after injury layoffs, used the conditions superbly and were unlucky not to find more success.
Philander had Martin Guptill (eight) caught at slip by Stiaan van Zyl before Steyn induced an edge from Tom Latham that was caught by wicketkeeper Quinton de Kock.
With plenty of deliveries beating the bat and the scoring rate slow, Ross Taylor (one) showed signs of panic. He took on the arm of the nippy Temba Bavuma at midwicket and was run out to compound the misery for New Zealand.
Du Plessis had earlier shown the way with a patient innings that took 234 balls and was his first Test ton in 17 visits to the crease, a timely return to form as he stands in for regular captain AB de Villiers.
JP Duminy, restored to the team in the absence of De Villiers, missed out on his century, though, falling for 88 caught behind off a wild hook.
Neil Wagner was the pick of the New Zealand bowlers with figures of 5-89 in 39 overs.