Hashim Amla was slammed for a "selfish" innings as Pakistan got one back on South Africa by winning the first one-day international by five wickets on Saturday.
The tourists were whitewashed 3-0 in the tests but found the change to limited-over cricket to their liking as they took an early advantage in the five-match series.
Experienced batsman Mohammad Hafeez, credited for the ODIs, secured victory with 71% off on his side finished on 267-5 to win with five balls to save.
Earlier, Amla made 108 out and Rassie van der Dussen hit 93 on his ODI debut as South Africa set a target of 266-2.
Despite their 155-run partnership for the second wicket, South Africa did not push on to the big score that seemed achievable.
South Africa was 160-1 after 35 overs but failed to capitalize and added just 76 runs in the last 10 overs despite having wickets in hand.
Amla made his 27th ODI hundred while van der Dussen was caught at mid-off chasing quick runs at the end. The home team's attempt to accelerate came too late.
"Those two guys really got really well 15 or 20 more runs that we could have scored if we had pushed a bit harder," said South African captain Faf du Plessis. "Pakistan bowled really well in the middle overs."
Pakistan's chase was comfortable until opener Imam-ul-Haq was dismissed for 86, the first of three quick wickets near the end. The 38-year-old Hafeez saw his side home with his 35th ODI half-century.
“We were confident because we knew 266 was not a score on this track. The first win of the series is very important, ”the man of the match said.
Hafeez hit eight fours and two sixes. Duanne Olivier landed on the roof of one of the stands and bounced out of the st. George’s Park stage.
Olivier was Pakistan's chief destroyer in the test series but could not bring his form to the short format on his ODI debut, with the tourists enjoying the slow Port Elizabeth pitch.
Shadab Khan's and Hasan Ali's bowlers took the wickets but crucially kept the South Africans in check with economy rates of less than five and over.
Imam and Babar Azam (49) then laid the foundation for the successful chase with a 94-run stand for the second wicket and Hafeez finished it off.