In an improved performance, Sri Lanka set the Proteas a target of 267 in the third one-day international in Bloemfontein on Wednesday.
On a batsman friendly wicket, the visitors enjoyed their best opening partnership of the series, and the tour, losing their first wicket for 94.
It was the spinners who eventually made the breakthrough, taking the first two wickets.
Robin Peterson broke the flow of runs ending Upal Tharanga's innings of 58 (50 off 54-balls).
Losing concentration, he carelessly top-edged an attempted sweep to Colin Ingram at short fine-leg after a flawless innings.
JP Duminy made a fine comeback in his second spell, taking a wicket with his first ball, after Tharanga had earlier hit him for two sixes.
It took a superb, tumbling catch from Dale Steyn at deep backward square-leg to get rid of the Sri Lankan skipper, Tillakaratne Dilshan (33), who had played an uncharacteristic innings.
Known for his flamboyant style, Dilshan played tamely, taking 42-balls to score his first boundary of the match and the series.
Some fine fielding put paid to Sri Lanka's two renowned batsmen, who once again failed to set the innings alight.
Kumar Sangakkara, sharing a 50-run stand, off 57-balls, for the third wicket with Dinesh Chandimal was run out by Faf du Plessis, who uprooted the stumps at the striker's end with an electric throw from backward point.
It was all the more unfortunate as Sangakkara seemed to have finally regained his flair and had batted magnificently for his 38.
Colin Ingram ended any hopes of Mahela Jayawardene proving he too had remembered how to bat, with a direct hit as the batsman set off for a run and turned too late.
The Proteas' fielding went from one extreme to the other, at times brilliant and at other times shoddy. They dropped several catches, two of which were put down by captain AB De Villiers behind the stumps.
He gave Dilshan a life when he was on nine, as the ball clipped his gloves.
It was a straightforward chance, however, when Nuwan Kulasekara got an outside edge straight into the gloves, until it popped out again.
Albie Morkel put one down and Robin Peterson missed out on a caught and bowled chance when a low return ball slipped through his fingers.
The Sri Lankans would be happy they finally reached the elusive 250 spoken about too often in vain.
At the end of their 50 overs, they made 266 for nine, losing a wicket on the last ball to another run out. – Sapa