Sri Lanka's bowlers ripped through the New Zealand top order, including snaring the key wicket of Kane Williamson, to leave the hosts in trouble at 162-5 after the second day of the first Test on Friday.
After posting a competitive 355 on the green Hagley Oval wicket in Christchurch, Sri Lanka gave the New Zealand run chase a soft start before gaining momentum.
A productive burst either side of the tea break from Asitha Fernando and Lahiru Kumara claimed Devon Conway, Williamson and Henry Nicholls as New Zealand slumped from 67 without loss to 76-3.
A pin-point Fernando yorker then dismissed opener Tom Latham for 67 before Kasun Rajitha accounted for Tom Blundell for seven.
Daryl Mitchell was on 40 at stumps with Michael Bracewell on nine, but New Zealand were still 193 in arrears.
Sri Lanka need to sweep the series to keep their World Test Championship hopes alive.
Their ambition was evident as they celebrated each wicket and every saved single.
Fernando, guilty of straying too often down the legside in his opening spell, came back to trap Conway lbw for 30.
Three overs later Kumara captured the plum wicket of Williamson for one on the last ball before tea and then accounted for Nicholls for two soon after the resumption.
The Sri Lankans were jubilant with the wicket of Williamson, New Zealand's most prolific run-scorer and the hero of the recent dramatic one-run victory over England.
With the tea break beckoning he was seduced into attempting an uncharacteristic big cover drive but could not get the ball over Dimuth Karunaratne.
Nicholls, with a question mark over his Test future, had only faced six balls when a rash attempt to pull Kumara to the boundary saw him caught at mid-wicket.
Latham persevered to bring up his 27th half-century and looked well set until he was bowled by Fernando.
Sri Lanka had frustrated New Zealand from the start of the day when they resumed at 305-6 and added another 50 as they stretched the innings for a further 17 overs.
Overnight pair Dhananjaya de Silva and Rajitha clipped 11 off the opening over of the morning before skipper Tim Southee entered the attack and had De Silva caught behind for 46.
When the new ball became due, Matt Henry had Rajitha caught at mid-off for 22 and New Zealand sensed the end was near.
But Prabath Jayasuriya and Lahiru Kumara, while only adding five runs, lasted 38 deliveries for the ninth wicket.
Henry eventually had Jayasuriya caught behind for 13, leaving Kumara (13 not out) and Fernando (10) to add a further 19 runs off 26 deliveries for the final wicket.
For New Zealand, Southee finished with 5-64 and Henry 4-80.