Lutho Sipamla tore through the Sri Lanka tail to set up a chase of 67 for South Africa, which openers Dean Elgar and Aiden Markram managed with little difficulty as the hosts registered a 10-wicket win at the Wanderers Stadium in Johannesburg on Tuesday.
With just 67 runs needed to secure victory, Dean Elgar and Aiden Markram set out positively. The five overs of play before lunch saw them reach 24/0, although there was a late scare for Markram as he edged one low to slip. However, the third umpire adjudged that it had not carried.
In all the pair took just 13.2 overs to reach the target, securing a 2-0 series sweep as well as a full 120 ICC World Test Championship points from the series.
The visitors resumed with a small lead of just five runs, and six second-innings wickets in hand on day three. Dimuth Karunaratne had been instrumental in knocking off the deficit, and he soon moved to his 10th Test hundred.
But the skipper skied an attempted pull off Anrich Nortje shortly after and was caught for 103, before Niroshan Dickwella mistimed a drive to hand Lungi Ngidi his fourth wicket of the innings. Dasun Shanaka was caught at mid-on from the bowling of Wiaan Mulder for eight, and Wanindu Hasaranga's innings of 16 ended with a heave across the line against Sipamla.
The 22-year-old quick bowler, in just his second Test, then wrapped up the innings by having Dushmantha Chameera caught behind before clattering Asitha Fernando's off stump to leave the visitors 211 all out.
Sri Lanka will now head home to face England in another two Tests, while South Africa's next challenge will be their visit to Pakistan.
Brief Scores: Sri Lanka 157 and 211 (Dimuth Karunaratne 103; Lungi Ngidi 4/44); South Africa 302 and 67/0 (Aiden Markram 36*)