Reaching 141 for four at tea, India looked good for a 250 plus first innings score before losing six wickets for 82 runs in the final session.
Scorecard | As it happened
Kohli (79 off 201 balls), back to lead the side after missing the second Test due to a back spasm, worked extremely hard for his first half-century of the series but eventually ran out of partners.
Cheteshwar Pujara (43) was the other batter who came up with a substantial contribution.
Lead South Africa pacer Kagiso Rabada, playing his 50th Test, was the standout bowler of the day and ended with four wickets for 73 runs in 22 overs. Tall left-arm pacer Marco Jansen picked up three wickets.
India got the important wicket of South African skipper Dean Elgar (3) towards close of play with Jasprit Bumrah getting him caught at first slip.
At stumps, the hosts were 17 for one in eight overs with Aiden Markram (8) and night watchman Keshav Maharaj (6) in the middle.
Earlier, Rabada and Kohli were engaged in a fascinating battle throughout the day before the South African removed the opposition captain who was looking for boundaries towards the end of the innings.
The hallmark of Kohli’s special knock was how he dealt with balls in the off-stump channel, something he had struggled with heading into the series-decider.
What was remarkable was that he did not shy away from playing those glorious drives he is known for, he just picked the right balls to go for his strokes and did not play recklessly around the off-stump.
That will be STUMPS on Day 1 of the 3rd Test.South Africa 17/1, trail #TeamIndia (223) by 206 runs.Scorecard -… https://t.co/7Ge6NT7B0l
— BCCI (@BCCI) 1641917456000
Kohli, who took 15 balls to get off the mark, got going with an expansive cover drive off Jansen and got his second slowest fifty with a sublime straight drive.
However, for the major part of his innings, Kohli was all grit and gumption as South African bowlers, especially Rabada, kept attacking the off-stump corridor in favourable conditions.
The Indian lower-order failed to contribute this time, leaving Kohli stranded.
Rishabh Pant (27) was the first to be dismissed in the final session as he tried to cut a ball too close to his body and ended up giving a simple catch to gully.
Jansen had Ashwin (2) caught behind by getting one to angle away and Shardul Thakur (12) was caught at short cover for spinner Keshav Maharaj’s first wicket of the series.
In the afternoon session that yielded 66 runs, Pujara and Ajinkya Rahane (9 off 12 balls) were dismissed.
Kohli, who got off the mark with a delightful cover drive in the morning, hit another majestic one off Jansen in the afternoon besides a six he collected from a mis-timed pull off Rabada.
Rabada breathed fire in his seven-over spell but Kohli was able to see it off with required patience and discipline.
Pujara once again showed positive intent but was undone by a beauty from Jansen that angled in from round the wicket and straightened just enough to take the outside edge.
Rahane, who has shown sublime touch all through the series but has not been able to convert the starts, was caught behind after Rabada got one to straighten from good length.
India fought their way to 75 for two at lunch after losing their openers early.
Kohli opted to bat on a pitch with a decent amount of grass and clouds hovering over the spectacular Newlands ground.
The South African pace combo of Rabada and Duanne Olivier made good use of the conditions in the first hour by removing Mayank Agarwal (15 off 35) and KL Rahul (12 off 35) respectively.
The in-form Rahul, who has been brilliant at leaving the ball of late, poked at a rising delivery on the off stump and nicked it to the wicketkeeper.
Agarwal’s tendency to play the ball with hard hands led to his downfall as Rabada induced a thick edge off his bat with Aiden Markram doing the rest at second slip.
Agarwal was dropped in the slips on 0 off Rabada in the third over of the innings.
With India in a spot of bother at 33 for two, Kohli and Pujara got together and steadied the ship.
Pujara was quick to put away the loose balls and his innings comprised four boundaries, including a pull shot off Olivier.