Courtesy Kohli's century, India piled up a commendable 299/8 in 50 overs and then restricted South Africa to 264/9 despite a classy hundred by their captain AB de Villiers.
In the end, Kohli's 23rd ODI hundred proved to be a shade better effort than De Villiers' 22nd ton in the final context of the 4th ODI match. If Kohli's innings was about asserting his supremacy in the limited overs format, De Villiers was innovation personified hitting all round the wicket.
Credit should be given to India's spin troika of Harbhajan Singh (2/50), Axar Patel (1/40) and Amit Mishra (1/55) for using the conditions well along with pacer Bhuvneshwar Kumar (3/68), who got the prize scalp of opposition captain. (Kohli does a Sehwag)
The series will now be decided at Mumbai's Wankhede Stadium in the final ODI scheduled to be played on October 25 (Sunday). (Kohli breaks Ganguly's record)
De Villiers battled cramps to race to century but his superb 107-ball-112 could not get the Proteas home. The South African skipper hit 10 fours and two sixes fighting valiantly before a slow bouncer from Bhuvneshwar saw him try a flat batted shot which ended up as a thickish edge into Mahendra Singh Dhoni's hands.
It was De Villiers' dismissal in the 45th over that decisively tilted scales in India's favour. When the chase started, Hashim Amla's (7) woeful run in the series continued as he pulled one straight to Shikhar Dhawan at mid-wicket.
Gauging that the pitch was dry and turn was on offer, Harbhajan was brought in the attack as early as the 9th over. The 'Turbantor' looked dangerous in each of his six overs in the first spell while he got a bit of stick towards the end to finish with 2/50 in 10 overs.
He got the wicket of last match centurion Quinton de Kock (35) just when he was taking on the attack. It was a classical off-spinner's delivery where he enticed De Kock for a drive with a flighted delivery that spun away from the left-hander taking the outside edge which was held by Ajinkya Rahane at second slip.
Faf du Plessis (17) was a bit ruffled as a powerful hit from De Villiers hit his elbow. He was soon dismissed when he was adjudged caught behind off Axar bowling. While Du Plessis looked unhappy, the snickometer showed some noise when the ball passed the bat.
Miller falls cheaply
From 79 for 3, it soon became 88 for four when Harbhajan bowled one that straightened sufficiently after pitching to hit David Miller (6) plumb in-front.
However De Villiers countered the turn with footwork as he got a partner in Farhaan Behardien (22) as they steadily built a partnership of 56 runs for the fifth wicket.
It was leg-spinner Mishra, who accounted for Behardien in the 32nd over which turned out to be a wicket-maiden.
Behardien should have been out off the 2nd ball when he nicked one to Dhoni but a vociferous appeal was turned down by umpire S Ravi. However off the fifth ball of that over, Mishra bowled a flipper which Behardien missed trying to sweep off middle-stump. This time Ravi raised his finger as South Africa were reduced to 144 for five.
Century with a six
De Villiers continued in attacking fashion as he reached his 50 with a shot over extra cover. He got a dogged partner in Chris Morris (9), who didn't score many but hung around to add 41 runs before a miscommunication led to a run-out with Ajinkya Rahane effecting a direct throw at non-striker's end.
The South African captain continued despite cramps as he reached 97 with a huge six off Harbhajan over deep mid-wicket and then another straight six off Mishra to complete his second hundred of the series.
Earlier, Kohli smashed a scintillating ton to help India post a competitive 299 for 8 in 50 overs after opting to bat. Kohli blasted six fours and five sixes in his 140-ball 138, which is his first century in more than eight months. His last century was against Pakistan in a World Cup match at Adelaide in February early this year.
Kohli shared a 104-run partnership for the third wicket with Ajinkya Rahane (45) in 18.2 overs and then added 127 runs in 18.4 with Suresh Raina (53) for the fourth wicket to catapult India to a fighting total in their stipulated 50 overs.
For South Africa, Dale Steyn (3/61) and Kagiso Rabada (3/54) took three wickets each, while Chris Morris (1/55) scalped one at the MA Chidambaram Stadium here.
Electing to bat, India slumped to 35 for two after both the openers - Rohit Sharma (21) and Shikhar Dhawan (7) were sent back to the pavilion by Morris and Rabada respectively.
Raina back in form
Rohit was the first to be dismissed when his uppish shot off Morris found the safe hands of du Plessis at midwicket, while Dhawan's downfall was brought by a stunning catch by wicketkeeper Quinton de Kock.
Kohli and Rahane then joined hands as India scored just 43 runs losing two wickets in the first 10 overs. The duo slowly started accelerating and helped India to cross the 100-mark in 19 overs.
Kohli was the more dominant between the two as he scored his fifty in just 51 balls with the help of two boundaries and two sixes.
The India Test skipper notched up his century in the 38th over when he charged down the ground and blasted a six off Phangiso over long-on. He scored his century in 112 balls, with the help of four fours and three sixes.
Raina too marked his return to form with a 52-ball 53 which was studded with three boundaries and one six before becoming a victim of Steyn. Looking for a big shot, Raina ended up giving a simple catch to de Villiers at midwicket.
In pursuit to score more in the final overs, India lost Kohli and Harbhajan Singh (0) in the same over with Rabada doing the damage in consecutive deliveries of his last over.
Skipper Dhoni (15) too perished in the last over when he tried to play a shot by making room for a short ball from Steyn, only to find de villiers at mid off as India got just 29 runs from the final 30 deliveries, losing 4 wickets in the process.