New Zealand snared early wickets to have South Africa 42 for three and leading by 113 at tea on day three of the second Test against New Zealand at Hagley Oval in Christchurch on Sunday.
Tim Southee removed Sarel Erwee and Dean Elgar, with Matt Henry claiming Aidan Markram.
At the end of the session, Rassie van der Dussen was on seven with Temba Bavuma yet to score.
South Africa held a 71-run first innings lead after earlier bowling out New Zealand for 293.
New Zealand recovered from 91 for five largely thanks to Colin de Grandhomme’s unbeaten Test-best 120, his second century for the Black Caps, and his 133-run sixth-wicket stand with Daryl Mitchell.
With seven and a half sessions remaining, South Africa had time to build a formidable target but Erwee was in no mood for caution. His eight came off nine deliveries before a Southee inswinger beat the bat and trapped him lbw.
Elgar batted positively through the first 10 overs and it took an excellent one-handed catch by wicketkeeper Tom Blundell to remove him.
Markram, who had been struggling for runs before his first innings 42, took 25 deliveries before getting off the mark.
He reached 14 before he was bowled by a Henry yorker.
New Zealand began the day at 157 for five with de Grandhomme and Mitchell looking to dominate the bowling.
De Grandhomme despatched the first ball to the boundary and Mitchell added another four in the second over to ensure New Zealand avoided the follow-on.
The pair added 67 in a little more than 15 overs with Mitchell bringing up his third Test fifty with a four off Rabada.
Elgar turned to Wiaan Mulder to break the partnership but he lasted one over after de Grandhomme smacked back-to-back fours which led to the introduction of Keshav Maharaj who made the breakthrough.
Mitchell had looked comfortable against the pace bowlers but was less certain against Maharaj’s spin.
After edging one ball short of the sole slip, he played outside the line to the next and was trapped plumb in front.
Kagiso Rabada and Marco Jansen mopped up the tail with Rabada taking five for 60 and Jansen four for 98.