South Africa 288 for 3 (Malan 91, de Kock 78) beat India 287 for 6 (Pant Pant 85, Rahul 55, Shamsi 2-57) by seven wickets
A stroke-filled, aggressive half-century from Quinton de Kock followed by a measured fifty from Janneman Malan broke the back of India's flat-looking bowling attack to consign the visitors to their fourth straight loss of the tour and give South Africa the ODI series. South Africa's commanding performance consigned a swashbuckling half-century from Rishabh Pant to a footnote, as they chased down 288 with all of seven wickets to spare.
Barring Pant's 85, India's middle order failed to impress again. They were eyeing 300 or more but the hosts' bowlers fought back in the middle overs to snatch the momentum from India.
de Kock set the tone early for the chase by attacking every bowler he saw. He went after balls that were marginally wide or full, especially in the second over off Bhuvneshwar Kumar, dispatching him for a six behind square and two fours on the leg side. de Kock didn't spare Jasprit Bumrah's erring lengths either, and along with Malan collected 11 from R Ashwin in the eighth over to bring up the fifty partnership. That over also offered de Kock a life when Pant missed a stumping on the second ball, and the batter made India pay with a sweep for six the very next ball.
Malan was more sedate but always prepared for the poor balls. He deftly used the pace of the quick bowlers and pierced gaps against the spinners with his sweeps and reverse sweeps. de Kock got to a fifty off 36 balls, and brought up the century of the partnership with a big six over wide long-on off Bhuvneshwar - that shot brought the asking rate to under 5.50 an over from the remaining 34 overs.
It was the eighth century opening partnership India have conceded in 23 ODIs since the 2019 World Cup, and it reflected their flat performance in the series.
Shardul Thakur broke the opening stand with a low and inswinging full toss that struck de Kock in front to dismiss him on 78 off 66. Malan then chaperoned the chase, with a patient Temba Bavuma by his side. The duo chipped away with regular singles and twos in a fifty stand of their own. Malan fell in Bumrah's second spell when he misjudged and gloved an offcutter onto the stumps, but by then South Africa needed a comfortable 76 from 92 balls. Rassie van der Dussen and Aiden Markram saw them home, for the further loss of only Bavuma, who handed a return catch to Yuzvendra Chahal on 35.
India had opted to bat and had a brisk opening stand between Shikhar Dhawan and KL Rahul. Dhawan got off the mark with a flick off his pads for four and punished both Sisanda Magala and Lungi Ngidi, but he fell when he tried attacking Aiden Markram for a second four in the 12th over, not able to clear deep midwicket.
Rahul enjoyed more luck at the other end, getting as many as three lives - on 8, 27 and 42. He was first put down by Malan at gully in the fifth over, then survived a run-out chance, and was dropped by Markram in the 27th. Around these chances, he played anchor as Pant went for his shots after Virat Kohli handed a straightforward catch to cover for a five-ball duck.
Pant joined Rahul when Keshav Maharaj and Markram had choked India's scoring rate. Soon after Rahul survived that run-out chance, Pant cut loose with his usual array of shots - the powerful slog sweeps, the fierce cuts, and the unorthodox slaps on the leg side... He overtook Rahul's score in the 24th over, collecting three fours in the over off Shamsi.
India were cruising at 179 for 2 in the 32nd, when they lost Rahul and Pant in successive overs. Rahul flicked a catch to midwicket and Shamsi had the last laugh when he had Pant caught at long-on for 85. Shamsi trapped Shreyas Iyer lbw four overs later. Venkatesh Iyer was stumped down the leg side off Andile Phehlukwayo - like Pant was in the first ODI - with India running out of batters at 239 or 6 with over six overs left to play.
Thakur and R Ashwin salvaged things a bit for India in the end, with a few elegant strokes in their unbroken stand of 48 off 38. Thakur dispatched Phehlukwayo over midwicket for six and thumped him to the straight boundary for four before going after Shamsi and Maharaj in his unbeaten 40 off 38. Ashwin too swept Maharaj for six in the 47th and capped the innings with a drive over the covers for four. Ultimately, though, it would not be enough for India.