Port Elizabeth - Dean Brownlie and BJ Watling prevented South Africa from wrapping up another Test inside three days as New Zealand were 157 for four at stumps on Sunday.
The hosts edged closer to victory with the Black Caps still facing a deficit of 247 with six wickets in hand at St George's Park.
Rory Kleinveldt struck twice after tea, with consecutive balls, to dismiss opening batsman Martin Guptill and Daniel Flynn but was denied his hat-trick by Watling - batting for the second time in one day.
Video highlights: SA v NZ, second Test, day 3
Guptill, who had scored a total of two Test runs in his three previous innings against the Proteas, made a shaky start but progressed to score 48 runs before Kleinveldt’s delivery went between bat and pad and hit the top of his off-stump.
Flynn, looking to drive his first ball through the off-side, got an outside edge through to AB de Villiers for a duck.
Watling then joined Brownlie at the crease and the pair added 73 runs together with Brownlie unbeaten on 44 and Watling on 41.
Robin Peterson took two wickets in the afternoon session, as the South Africans were made to toil for their wickets in the afternoon sun.
Captain Brendon McCullum was given out lbw for 11, after facing 57 balls, and Kane Williamson was castled after the ball stayed low.
The day began with New Zealand resuming their first innings on 47 for six. They were all out just before lunch for 121 - 404 runs behind their hosts - and captain Graeme Smith enforced the follow-on.
Dale Steyn took his 19th five-wicket haul in Test cricket and returned figures of five for 17 off his 13 overs.
Watling was the only Kiwi to offer any resistance and approached his innings in a mature manner. He was selective in his shots and stroked some wonderful cover drives. He reached his half-century off 75 balls, having hit 11 boundaries.
As the wickets tumbled around him, he remained steadfast and when he was joined by Trent Boult, the pair added a quick 59 runs off 50 balls for the last wicket.
Watling was eventually caught by Smith after he edged Morne Morkel to the slips. His departure, for 63 off 87 balls, ended the innings.
South Africa’s three centurions - Hashim Amla, Faf du Plessis and Dean Elgar - had left them in a strong position on day two after South Africa declared on 525 for eight.
South Africa first innings: 525-8 declared (Graeme Smith 54, Hashim Amla 110, AB de Villiers 51, Faf du Plessis 137, Dean Elgar 103 not out)
New Zealand first innings: 121 all out (BJ Watling 63; Dale Steyn 5-17)
New Zealand second innings: 157 for four (Martin Guptill 48)