India 299 for 8 (Virat 138, Raina 53) beat South Africa 264 for 9 (de Villiers 112) by 35 runs
Scorecard and ball-by-ball details
Virat Kohli scored his first ODI century against South Africa and first in 14 innings since the World Cup to anchor an authoritative Indian batting performance. Although they did not reach 300, this was their highest score of the series so far, and their spinners made sure it was enough.
On a slow surface which took turn, the slow men burrowed their way into South Africa's middle order, taking 32 for 3 between the 10th and 20th over, to blunt the challenge even with AB de Villiers still at the crease. The captain did his bit with a heroic hundred and a share in the highest stand of South African innings, 56 for the fifth-wicket alongside Farhaan Behardien, but by then it was too late.
What South Africa lacked was big partnerships, which India had a double dose of. Kohli put on 104 with Ajinkya Rahane and 127 with Suresh Raina, who scored a much-needed half-century after back-to-back ducks, to set India up for a substantial score despite a squeeze at the end of their innings.
South Africa's seamers bookended the Kohli assault with incision, restricting India to 35 for 2 in the first eight overs and claiming 4 for 29 in the final five but it was what happened inbetween that separated the sides. Kohli was in sublime touch, timed the ball well and paced his innings sensibly.
He took advantage of a six-man attack that was found strategically wanting, overusing the short ball and obviously missed Morne Morkel, who was out with an quad injury and could have generated awkward bounce. Morkel's replacement, Chris Morris, ended up being the most expensive of the South African seamers but did not concede as much as Imran Tahir, who led an ineffective slower-bowling section that could not find the same control India's did.
It did not always look as though South Africa would toil that hard. They asked questions of both Rohit Sharma (caught at midwicket) and Shikhar Dhawan's (caught behind off an attempted pull) shot selection and seemed to be extracting some early lift but that quickly disappeared. Aaron Phangiso and Tahir struggled to maintain the tone Kagiso Rabada set, especially against an enterprising Kohli.
Together with Rahane, Kohli showed energy at the crease and urgency running between the wicket, found gaps and the boundary, and had raced to a 51-ball fifty. In searching for a wicket, de Villiers brought his seamers back but Kohli was in control and it was only when Steyn returned for a third spell, in the 27th over, that South Africa broke through. Rahane flashed at a wide one without moving his feet. The ball kept low and took the bottom edge on its way through to de Kock, who took it low down with both hands.
MS Dhoni did not promote himself above the under-fire Raina, who had the situation and the space to play himself back into form. He took his time sussing out conditions and the scoring rate slowed. There was only one boundary in the next seven overs but for South Africa's attack the respite was only temporary.
With the last ten overs approaching, Kohli's slow-burn was ready to burst into flames. He brought up his century with a six off Phangiso, smacking the ball over Steyn's head at long-on and putting a total in excess of 300 in India's sights. Raina saw that as his cue to accelerate as well. After taking 12 runs off 16 balls, he scored his next 38 runs off 34 balls and reached his half-century off 48. He was particularly severe on the full ball, while Kohli punished the spin.
India were headed for a score in excess of 300 but South Africa dragged them back in the final five overs. Kohli was struggling with cramp, and battled to get Rabada away at the end and was caught behind. Both Rabada and Steyn took two in two but the damage was already done.
Quinton de Kock threatened to undo that damage, providing a speedy start. He survived the early loss of Hashim Amla (who has scored the same number of runs in this series as Dhawan) and owned the area outside off stump, but then spin struck. Harbhajan ended de Kock's dictatorship when he tossed one up - de Kock drove and the edge carried to second slip.
De Kock's wicket came three overs into the spin squeeze as India began to run rings around the South Africans. Faf du Plessis was caught behind off a sharply turning delivery from Axar Patel and showed his displeasure at the dismissal, and David Miller was trapped lbw by a Harbhajan delivery that pitched on off and hit him in front of middle. At 88 or 4, with only one recognised batting pair left, South Africa were finished, but de Villiers showed remarkable fight.
He seemed to be batting on a different surface and did not struggle against the spinners. He was harsh on Amit Mishra, who he charged to turn a delivery into a low full toss, swept and reverse-swept, and attacked Harbhajan. Momentarily, it looked like he may win the match single-handedly. But the bubble burst when Bhuvneshwar had him caught behind off a short ball. The series now hangs in the balance ahead of Sunday's decider.

Firdose Moonda is ESPNcricinfo's South Africa correspondent