Jasprit Bumrah was exceptional with the new ball, perhaps making South African captain Faf du Plessis regret his decision to bat first after winning the toss. Bumrah struck twice in his first spell, removing openers Hashim Amla (6) and Quinton de Kock (10) as South Africa stumbled to 2/24.
Du Plessis tried to resurrect the innings but that his modest 38 was the second-top score reflected how poor his team was with the bat. His teammates were mesmerised by the leg-spin of Yuzvendra Chahal, who spun a web around the men in green on his way to grabbing 4/51 from 10 overs.
His first victim was Rassie van der Dussen, bowled for 22 before the tweaker took the all important wicket of du Plessis in the same fashion just two runs later. Left-arm wrist spinner Kuldeep Yadav joined the party and trapped JP Duminy LBW as South Africa lost 3/11, slumping to 5/89.
Chahal then took care of David Miller (31) and Andile Phehlukwayo (34) as Proteas batsmen again failed to convert promising starts into meaty scores. No. 8 Chris Morris top scored with 42.
"To have so many 30s and 40s is not acceptable," du Plessis said after the match.
Bhuvneshwar Kumar chipped in with two late wickets as South Africa bumbled its way to less-than-inspiring 9/227 from its 50 overs.
While it was a total that would hardly have struck fear into Indian hearts, the way the South African quicks started, there would have been some nervous players in the opposition dressing room. Kagiso Rabada and Morris were exceptional up front, generating steep bounce from a length, beating the bat with seam movement and making life miserable for Rohit Sharma and Shikhar Dhawan.
Sharma was lucky to survive when du Plessis shelled a tough chance, running forwards from second slip but unable to hold onto the ball just above the turf when Rabada hit the shoulder of the bat. Morris had similar bad luck when another ball hit the splice and lobbed just over point.
South Africa eventually found some joy when Dhawan edged Rabada behind to wicketkeeper de Kock and the battle that ensued between the star quick and Indian skipper Virat Kohli was worth the price of admission alone.
Rabada steamed in and made Kohli earn his survival every ball as the world's best ODI batsman was given no freebies. Normally such a fluent scorer, Kohli was restricted to 18 from 34 balls as the Proteas followed a plan to hit areas short-of-a-length outside off stump.
Rabada gave India's maestro a working over but Phehlukwayo got the ultimate reward when Kohli flashed at a wide delivery, getting an edge that was snaffled brilliantly by a diving de Kock behind the stumps. The gloveman was airborne as he flew to his right, plucking the ball one-handed in a spectacular show of acrobatics.
India was 2/54 at that stage and the Proteas sniffed a possible upset but Sharma and KL Rahul blunted the bowling attack to put on 85 runs for the third wicket. Sharma dominated the scoring but Rahul's 26 was valuable in settling things down and bringing the momentum back India's way.
When he chipped Rabada to mid-off MS Dhoni came in and coolly accompanied Sharma to his ton and put the result beyond doubt. Dhoni fell for 34 but by then the win was assured, and Sharma remained unbeaten as Hardik Pandya hit the winning runs.
Former South African stars Pat Symcox and Herschelle Gibbs were among those to criticise the Proteas.
South Africa's hopes of making the semi-finals aren't completely done just yet after three straight defeats but it will need to win its remaining six matches to stand a chance of progressing to the knockout stage.