Centurion Alviro Petersen could add only three to his overnight total of 103 before he was bowled by Trent Boult and although Faf Du Plessis made just 15, and Dean Elgar 21, the hosts went into lunch on 335 for six.
The first day could not have gone much worse for New Zealand after they were skittled out for a paltry 45 - their third lowest Test score - with South Africa ending the day on 252 for three.
However, the Black Caps made an ideal start in the second over as Boult got one to nip back at Petersen, who could only get an inside edge on the delivery before the ball clattered into the stumps.
AB de Villiers, who began the day unbeaten on 19, was tentative, scoring his first boundary in the seventh over as the hosts attempted to build on what was already a significant first-innings lead.
The boundary kick-started the scoring although the hosts suffered a blow in the 73rd over. Veteran seam bowler Chris Martin pitched one up which swung away from Du Plessis, with the batsman edging to Kane Williamson in the slips.
At 280 for four De Villiers and new batsman Elgar, playing in just his second Test, built slowly until consecutive fours from the one-day skipper off Boult yielded 10 runs in the 82nd over.
However, New Zealand struck again in the 89th over as Elgar, playing back, edged a rising Boult delivery to wicketkeeper BJ Watling, who took a simple catch.
De Villiers ended the session unbeaten on 61, while new batsman Robin Peterson had not yet got off the mark.
- Sports & Recreation
- Trent Boult
- Dean Elgar
- Faf Du Plessis