South Africa survived a batting collapse precipitated by a hattrick from spinner Prosper Utseya to beat Zimbabwe by 61 runs in the third match of the triangular series on Friday.
Utseya, who finished with career-best figures of five for 36, became only the second Zimbabwean to take a hattrick in a one-day international as South Africa delivered an off-key batting performance to be bowled out for 231.
But Zimbabwe, with their best chance of rare win over a major cricketing power, fell well short of the target as they were bowled out for 170 off 38.3 overs.
South Africa, who convincingly beat Australia thanks to a fine batting display on Wednesday, raced to 142 after 24 overs before stand-in captain Hashim Amla was stumped off Utseya for 66.
Five runs later fellow opener Quinton de Kock also departed, caught for a run-a-ball 76 as he tried to reverse sweep to become the first of Utseya's hat-trick victims.
Rilee Rossouw was caught at first slip from the next ball and the big-hitting David Miller was trapped lbw as Utseya bowled an attacking line to the left-hander.
South African wickets continued to tumble at regular intervals as they teetered at 195 for nine with seven overs left before a last-wicket partnership of 36 lifted them to a more respectable total.
Imran Tahir made 23 not out to ensure the visitors used up all but one ball of their allocated 50 overs.
Impressive hitting from Sikandar Raza and Hamilton Masakadza gave Zimbabwe a confident start but spinner Aaron Phangiso bowled the beefy Masakadza with his fourth ball and uprooted the wicket of the dangerous Brendan Taylor for a duck.
Sean Williams and Malcolm Waller put together a 46-run fifth wicket partnership but Waller was caught off a short delivery from Dale Steyn and Williams, who top-scored for Zimbabwe with 46 runs off 79 balls, holed out to Amla at midwicket off Ryan McLaren.
SCORES IN BRIEF
SOUTH AFRICA: 231 all out in 49.5 overs (Amla 66, De Kock 76, Du Plessis 15, Tahir 23 not out; Chatara 2-28, Utseya 5-36)
ZIMBABWE: 170 all out in 38.3 overs (Raza 35, Masakadza 25,
Williams 46, Waller 20, Chigumbura 22; Steyn 3-36, Phangiso 2-33, McLaren 3-24)
Result: South Africa won by 61 runs.
Player-of-the-match: Prosper Utseya.