India captain Virat Kohli stood firm against a relentless South Africa bowling attack on an attritional second day of the second Test at SuperSport Park on Sunday.
Kohli made 85 not out as India reached 5-183 at the close in reply to South Africa's first-innings total of 335.
It was tough going for both batsmen and bowlers on a slow pitch on a hot day. Kohli made his runs off 130 balls with eight fours.
The Indian skipper was saved from a leg before dismissal by a faint inside edge on a ball from debutant Lungi Ngidi late in the day which was crashing into his stumps.
The powerfully built Ngidi was one of four bowlers to take a wicket each, having Parthiv Patel caught behind. He built up impressive pace, with one delivery timed at 150.5 km/h.
"I thought I had him," said Ngidi of the failed review.
"I thought he had hit the ground. I was very confident and when I saw that edge I kind of dropped a bit.
"When I bowled my first spell I hit his pads a few times so I thought that was a vulnerable area for him.
"He kept shifting across and getting into my bowling line so I thought, maybe shoot one in at the stumps and see what happens. I nearly got him."
Even so, Ngidi, 21, said his Test debut was a "dream come true".
South Africa's four fast bowlers operated in short spells while left-arm spinner Keshav Maharaj bowled a lengthy spell and broke the biggest partnership of the innings when he had Murali Vijay caught behind for 46.
Maharaj opened the bowling for South Africa's first innings, the first time a slow-bowler had sent down the first over in more than a century.
Spinners opening the bowling for SA in Tests since 1992:— Andrew Samson (@AWSStats) January 14, 2018
C Eksteen v NZ Auckland 1995
P Adams v Pak Faisalabad 1997 & v Eng Cape Town 2000
K Maharaj v Ind Centurion 2018
Eksteen & Adams x 2 were all 2nd inns. The last spinner to open in 1st inns for SA was A Faulkner in 1912.
Vijay and Kohli put on 79 for the third wicket after two wickets fell in two balls with the total on 28, with Lokesh Rahul falling to a sharp return catch to Morne Morkel and Cheteshwar Pujara being run out attempting a single off the first ball he faced.
Pujara played Morkel to mid-on and set off for a run. Ngidi made good ground, slid to pick up the ball and hit the stumps at the bowler's end from a prone position.
"I didn't think he was going to run," added Ngidi.
"When he hit it I wasn't even looking at him, I was still trying to figure out which angle the ball was coming. When I got there I slipped a bit but I saw he was halfway down the wicket and I took my chance."
Earlier, South African captain Faf du Plessis made 63 before the hosts were bowled out for 335.
Du Plessis battled for 217 minutes and faced 142 balls before he was ninth man out, bowled when he went for a big hit against Ishant Sharma.
South Africa added 66 runs to their overnight 6-269.
Sharma took two of the four wickets that fell, finishing with 3-46, while off-spinner Ravichandran Ashwin took 4-113.
India dropped three catches, all off Ashwin. Kagiso Rabada, who made 11, was dropped by a diving Kohli at slip when he had one, with the batsman taking two runs.
He was then put down at point off the next ball when Hardik Pandya was obstructed by fellow fieldsman Mohammed Shami.
Du Plessis was dropped by wicketkeeper Patel off Ashwin when he had 54.