Paarl: South Africa defeated India by 31 runs to go 1-0 up in the three-match ODI series here on Wednesday.
Chasing a target of 297, India could only manage 265/8 with Shardul Thakur unbeaten on 50 runs.
India had lost the plot in the middle after a 92-run stand for the second wicket between Shikhar Dhawan and Virat Kohli had the visitors in control.
Dhawan departed for 79 while Kohli made 51. For South Africa, Phehlukwayo, Shamsi and Ngidi bagged two wickets each.
Earlier, skipper Temba Bavuma and Rassie van der Dussen struck contrasting hundreds en route to their 204-run stand to take South Africa to 296/4.
After a sluggish start, van der Dussen (129 not out off 96) and Bavuma (110 off 143) shared the second highest partnership ever against India in ODIs to ensure a competitive total for the home team.
Jasprit Bumrah (2/48) was the stand out bowler for India in an otherwise ordinary bowling effort.
South Africa opted to bat on a slow surface at Boland Park. The white ball did a bit early on with both Bumrah and Bhuvneshwar Kumar getting to move it off the pitch as well as in the air.
After an inaccurate first over, the usually accurate Bumrah got his act together and had opener Janneman Malan (6) caught behind with an outswinger. Expecting an incoming ball, Malan was caught on the crease with his loose push taking the outside edge.
South Africa struggled to 39 for one in 10 overs with Indian bowlers restricting the flow of runs.
Quinton de Kock (27 off 41), playing his first game since announcing his Test retirement, and Bavuma found the going tough with ball not coming on to the bat.
De Kock perished while trying to break the shackles. Ashwin, featuring in his first ODI since June 2017, found de Kock's stumps with a slider as the opener went for a cut shot.
It became 68 for three in the 18th over when Aiden Markram got run out from a direct hit by Venkatesh Iyer after he went for a single that was not for the taking.
At that stage, it seemed South Africa would find it tough to get past 200 but a fighting stand between Dussen and Bavuma changed the course of the innings.
Indian bowlers looked rather ordinary in the middle overs with the well-set South African pair rotating strike regularly besides picking up an odd boundary.
Van der Dussen was the aggressor in the partnership from the word go as Bavuma played anchor.
Van der Dussen used the reverse sweep for four runs off Yuzvendra Chahal to put the leg spinner under pressure before using the conventional sweep twice to collect more boundaries.
He later used a free hit to smash a Shardul Thakur full toss for a six as South Africa's innings found much needed momentum. Two pick up shots on one knee for six over deep backward square were the highlight of van der Dussen's entertaining knock. He ended with nine four and four sixes.
Bavuma was happy picking singles at the other end while anything loose on offer was put away behind the ropes.
The skipper got his hundred in the 45th over while his batting partner achieved the milestone in 48th over. It was the second ODI hundred for both the batters.
The last over bowled by Thakur went for 17 runs, taking the hosts close to 300. Thakur was the most expensive bowler, bleeding 72 in his quota of 10 overs even as the sixth bowling option Venkatesh Iyer was not used.