South Africa were 283 for three at the end of a day when New Zealand were on the wrong end of no fewer than five leg before wicket decisions, while seam bowler Doug Bracewell limped off late in the day with what appeared to be a hamstring injury.
Stephen Cook (56) and Quinton de Kock (82) gave South Africa a strong start with an opening partnership of 133. Hashim Amla and JP Duminy followed up with innings of 58 and 67 not out respectively.
Cook, Amla and Duminy all survived close calls by the umpires.
New Zealand unsuccessfully called for a review when Cook was given not out against Trent Boult by umpire Paul Reiffel when he was on one. Replays showed he got a faint inside edge.
Umpire Ian Gould was then involved in four decisions, giving Amla and Duminy out but seeing both overturned on review, while New Zealand failed to call for reviews when Cook and Duminy were given not out, with replays showing the ball hitting the stumps convincingly on both occasions.
The brightest batting came in the morning when Cook and De Kock took South Africa to 100 for no wicket.
It was South Africa’s first Test century opening partnership since December 2013, while it was indicative of the difficulty of batting first on the often-lively pitches in South Africa that it was the first time since March 2009 that any team had reached three figures without losing a wicket before lunch on the first day of a Test in the country, when Simon Katich and the late Phillip Hughes did it for Australia in Durban.
De Kock, the South African wicketkeeper, was moved up to open the batting, which he does regularly in limited-overs internationals, after Dean Elgar sprained an ankle during fielding practice on Friday.
Stiaan van Zyl came into the side and was expected to bat at number seven.
De Kock made 82 off 114 balls, hitting 15 boundaries, before hooking Neil Wagner to Boult on the fine leg boundary, while Cook made a patient 56 off 143 deliveries before falling to a low catch by New Zealand captain Kane Williamson at gully off Bracewell.
Amla survived a shaky start to again show a liking for New Zealand bowlers, taking his Test aggregate against the Black Caps to exactly 1000 runs in 11 matches at an average of 76.92, while he continued to score heavily at Centurion, where he has made 1201 runs in 11 matches at an average of 85.78.
Amla eventually fell to a good delivery from the left-armed Wagner, who switched to bowling around the wicket and produced a ball which swung in and then straightened to have Amla caught behind.
Wagner was the most impressive of the New Zealand bowlers, showing plenty of energy as he charged in for 22 overs, taking two for 51. But Tim Southee, Boult and Bracewell all bowled testing spells on a day on which not much went right for the tourists.
Bracewell limped off two balls into the penultimate over of the day after clutching his hamstring. His over had to be completed by Boult.