Shai Hope made 128 not out in his first game as West Indies one-day captain to set up a 48-run win over South Africa. (More Cricket News)
Proteas skipper Temba Bavuma replied with a century of his own in the second ODI at Buffalo Park but his 144 from 118 balls wasn't enough as the other South African batters failed around him.
Hope's century inspired West Indies to 335-8 and South Africa was all out for 287 in 41.4 overs despite Bavuma's best efforts.
South Africa appeared on course to challenge the big total at 184-2 in the 25th over. Left-arm spinner Akeal Hosein then turned the game in West Indies' favor.
He removed Tony de Zorzi for 27 to start South Africa's slide, claimed another two wickets and created a run out, as West Indies took a 1-0 lead in the three-match series.
The first ODI was abandoned because of rain.
Hosein finished with 3-59 and West Indies took eight wickets for just 103 runs to finish off South Africa after its bright start. West Indies fast bowler Alzarri Joseph had 3-53.
Hope hit five fours and seven sixes in his 115-ball knock after winning the toss and choosing to bat first. He marked the start of his captaincy with his 14th ODI hundred.
He had support from Nicholas Pooran (39) in an 86-run stand and Rovman Powell (46) in an 80-run stand. Hope's unbroken partnership of 42 with Joseph at the end took West Indies to its highest ODI total against South Africa.
Bavuma and Quinton de Kock (48 off 26 balls) put South Africa on course straight away with their 76-run opening stand.
But there was little support for Bavuma after de Kock fell lbw to Kyle Mayers and his career-best ODI score came in a loss.
Bavuma and No. 10 Lungi Ngidi gave South Africa a glimpse of hope as they scrambled for a 49-run stand right near the end. South Africa's chances went with Bavuma when he attempted a hook shot off Joseph and gloved a catch to wicketkeeper Hope.
Joseph removed last man Tabraiz Shamsi for a duck two balls later to seal victory.