Soumya hit a stroke-filled unbeaten 88 while Mahmudullah made 50 as Bangladesh raced to 167-3 with more than 22 overs in hand, keeping Bangladesh in the series after Friday’s first game loss.
Earlier the home team made swift work of the visitors, bowling with heart for 162 runs in 46 overs, effectively making the contest a one-sided affair.
Kagiso Rabada, who had set a new one-day debut bowling record in the previous match, raised hopes when he bowled out Tamim Iqbal (five) and Litton Das (17).
But Soumya and Mahmudullah stood firm for a 135-run third wicket stand as the Tigers carried the game safely in front of packed stadium.
Soumya, who faced 79 balls and hit 13 fours and a six, swept Imran Tahir over the mid wicket fence to complete the emphatic victory — only Bangladesh’s second against South Africa in 16 ODIs.
“This was a much-needed win,” said Bangladesh captain Mashrafe Mortaza.
“The last eight months we have been playing well. We lost the last four matches but we have come back,” he said.
The win, which followed Bangladesh’s steady progress in one-day rankings, also cemented their place in the eight-team ICC Champions Trophy, scheduled to be held in England in 2017.
Only the hosts and seven other top-ranked ODI teams are eligible to qualify for the tournament.
Earlier, Nasir Hossain finished with a career best 3-26 while left-arm pacer Mustafizur Rahman grabbed 3-38 as South Africa were bowled out with their lowest score against Bangladesh on a slow pitch at the Sher-e-Bangla National Stadium.
Mustafizur drew the first blood in the fifth over when he forced a leading edge from opener Quinton de Kock as Sabbir Rahman took a simple catch at backward point.
Rubel Hossain, who returned to the starting lineup for leg-spinner Jubair Hossain, made an instant impact by knocking the stumps off Hashim Amla (22).
South Africa began to feel the pressure when Nasir bowled Rilee Rossouw off his first ball, and Mahmudullah sent David Miller home by forcing him to give a simple catch to Mashrafe Mortaza at short mid wicket to leave the visitors wobbling at 74-4.
Faf Du Plessis, who looked solid holding one end, holed out a catch at long-on to Soumya Sarkar off Nasir. His departure after the top score of 41 from 64 balls firmly swung the game in favour of the hosts.
Mustafizur deceived JP Duminy with an off cutter, forcing him to give a catch at short cover to Sabbir for 13 before Rubel trapped Chris Morris leg-before for 12.
Farhaan Behardien, who survived a leg-before decision after it was overturned by the TV umpire, held Bangladesh off to score 36 before he became the last man to be dismissed.
South Africa captain Hashim Amla blamed his side’s batting for the loss.
“It was not a 160-wicket. We had a really bad day and did not apply ourselves,” he said.
“Credit to Bangladesh. The key on this wicket is to get in and make it count. We did not do that today,” he added.
The third and final match of the series will be held in Chittagong on July 15. -AFP