India had made just 187 on a treacherous wicket but South Africa had started off well with Amla negotiating anything and everything thrown at him.
For South Africa, JP Duminy picked up two wickets giving away 60 runs from his 10 overs.
After Kohli reaffirmed his status as an ODI great with an unbeaten knock of 160 off 159 balls to propel India to 303 for six, Kuldeep and Chahal bagged four wickets each to help India take an unprecedented 3-0 lead in the ongoing series.
Even in the highly unlikely event that Aiden Markram's callow, under-strength outfit remarkably bounce back to share the honours at 3-3, India have already ensured they are the best ODI side from that country to visit here results-wise - they had lost every earlier bilateral series.
Virat Kohli, who has named 35 different playing elevens in 35 Tests, could very well field the same team for this third successive ODI.
Recently, South Africa's injury woes have only grown with Quinton de Kock ruling out of the remainder of the six-match ODI series and subsequent three-match T20I series against India due to a wrist injury. Kohli and other batsmen have followed the lead of bowlers and this third ODI could prove to be the most decisive match.
Earlier, Kohli scored the highest individual score by an Indian batsman against South Africa in South Africa, going past Sourav Ganguly's 127 at Johannesburg in 2001.
Kohli, who scored a brilliant match-winning 160*, singled out the courage shown by Yadav and Chahal, "I don't have words to explain this".
He also became the first Indian batsman to score a hundred against South Africa at Newlands.
The skipper said that it was just outstanding to see the two wrist spinners run through the South African batting line-up and totally spinning a web around the opposition.
Kohli's series tally of runs has gone to 318 in only three innings, which is a record too. Those boundaries took India past 300 and improved Kohli's strike rate to better than a run a ball.
2 - Kohli became only the second Indian captain after Kapil Dev to score a 150 in an ODI outside India. After coming to bat in the 2nd over of the innings, Kohli put on a 140-run stand for the 2nd wicket with Shikhar Dhawan but was short of support after that. Andile Phehlukwayo was included ahead of Tabraiz Shamsi as the hosts played only full-time spinner. Rohit Sharma (0) continued his poor run in this ODI series and was caught behind off the sixth ball he faced. If India bowl first again and restrict the Proteas to a low score, Kohli might want to promote a couple of those three to the top. Morris tried to sweep but missed the ball completely and hit him on inside of the leg. Chahal brought Zondo's patient innings to an end on 17 after surviving 37 balls. Ganguly scored 11 centuries while leading the team in 146 ODI's. It appeared it was a good decision on stand-in captain Markram's part.