AB de Villiers and Rohit Sharma enhanced personal reputations with scintillating centuries but it was the timely interventions of South African bowlers that secured the visitors' five-run win over India in the first ODI.
De Villiers' unbeaten 73-ball century provided the late impetus as South Africa posted 303 for five, the highest team total at the Green Park Stadium, after deciding to bat first.
Sharma led India's strong reply with a brilliant 150 before leg-spinner Imran Tahir turned the runfeast on its head by claiming two wickets in his final over.
Paceman Kagiso Rabada then dismissed two Indian batsmen in two deliveries in the final over to put South Africa 1-0 up in the five-match series.
India needed 22 runs of the last two overs with five wickets in hand and Dale Steyn conceded 11 before 20-year-old Rabada claimed back-to-back wickets to restrict the hosts to 298 for seven.
"I thought Tahir first of all changed the game and gave us a chance," De Villiers, who was adjudged man-of-the-match for his unbeaten 104-run blitz, told reporters.
"And lot of credit to Dale and Kagiso. The youngster proved quite handful and he has got a bright future," added the South Africa captain who set alight the stadium with his superb stroke-making.
De Villiers did not hit a boundary in the first 33 balls he faced but was unstoppable when he got going.
The right-hander clobbered his sixth six off the final ball of the innings to bring up his 21st ODI century as South Africa plundered 109 runs from the last 10 overs.
When India came out to bat, Sharma added 149 runs with Ajinkya Rahane (60) and the hosts looked on course to chase down the target without any fuss.
Sharma hit six sixes and 13 boundaries before giving a return catch to Tahir who dismissed Suresh Raina in the same over.
South Africa 303-5 in 50 overs (De Villiers 104, Mishra 2-47)
India 298-7 in 50 overs (Sharma 150, Tahir 2-57)