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.