Dale Steyn took five for 17 as New Zealand were bowled out for 121 in their first innings.
Left-arm spinner Robin Peterson took the first two wickets in the second innings and paceman Rory Kleinveldt followed up with two wickets off successive deliveries.
New Zealand wicketkeeper Brian Watling followed up an impressive first innings of 63 — more than half his team’s total — with 41 batting as he shared an unbeaten fifth wicket stand of 73 with Dean Brownlie (44*) to delay South Africa’s progress.
Brief scores South Africa 25/8 dec vs NZ 121 (Steyn 5/17) and 157/4 (M Guptill 48, B Watling 41*)