Port Elizabeth, Feb 21: Vishwa Fernando and Kasun Rajitha took three wickets apiece as history-chasing Sri Lanka dismissed South Africa for 222 on day one of the second Test at St George's Park.
No Asian nation has won a Test series in South Africa, but Sri Lanka could become the first after a sensational victory at Kingsmead and they made a promising start in Port Elizabeth.
Needing to avoid defeat in order to go down in the record books, Vishwa (3-62) and Rajitha (3-67) excelled on a grassy pitch as the Proteas were bowled out early in the final session.
South Africa slumped to 15-3 before Aiden Markram (60) and Quinton de Kock (86) spared their blushes and Sri Lanka were 60-3 in reply at stumps, Duanne Olivier taking 2-25.
Vishwa offered great support for Kusal Perera in a record match-winning 10th wicket stand in Durban after starring with the ball and the paceman gave Sri Lanka a dream start on Thursday.
The left-armer removed Dean Elgar's off stump and produced a peach of a delivery to clean up Hashim Amla first ball in a magnificent sixth over.
Temba Bavuma only just survived the hat-trick ball and fell without scoring when he was run out by a direct hit from Rajitha at the non-striker's end.
South Africa were in the mire on 15-3 when Faf du Plessis strolled out to the middle not long after winning the toss and the captain was content to hang in there as Vishwa continued to steam in, generating movement and bounce.
Markram was in great touch, playing glorious drives on both sides of the wicket as Du Plessis dug in at the other end, but captain Dimuth Karunaratne yorked his opposite number for 25 in his first over on the stroke of lunch to end a stand of 58.
The stylish Markram had a deserved sixth Test half-century early in the afternoon session and looked untroubled until he was trapped in front by Rajitha, who quickly dismissed debutant Wiaan Mulder in the same fashion.
South Africa were 157-7 when Keshav Maharaj became the excellent Rajitha's third victim, but De Kock played with great fluency in a typically attacking knock.
De Kock brought up his half-century from only 51 balls before Kagiso Rabada (22) was dropped by Dhananjaya de Silva and Lasith Embuldeniya, who was left with blood streaming from his thumb after putting down a simple chance off his own bowling.
Wicketkeeper-batsman De Kock needed treatment on his left leg, but that did not stop him from hooking and driving Vishwa to the boundary before he was bowled by De Silva (2-15).
De Silva and Vishwa mopped up the tail, then Olivier saw the back of Oshada Fernando and Kusal Mendis after Rabada had Karunaratne caught behind to leave the match well poised.