Dean Elgar and Quinton de Kock engineered a stunning fightback for South Africa as both batsmen struck superb tons to help the visitors reach 385-8 by the end of day three.
Still trailing by an expansive margin of 117 runs, South Africa's progress was dented by late scalps from off-spinner Ravichandran Ashwin, who picked up his 27th five-wicket haul.
Following the early loss of Temba Bavuma in the morning session, Elgar put on 115 runs with his captain Faf du Plessis.
The two batsmen withstood the spin barrage opted by India skipper Virat Kohli and often took the aerial route to combat their attacking lines and lengths.
Du Plessis finally departed for a well-composed 55, which brought in wicketkeeper-batsman de Kock to the crease.
Building on the gutsy display of batting, the 26-year-old also dug in and punished the bowlers with his explosive stroke play.
De Kock's 163-ball 111 was laced with 16 boundaries and two maximums as he reached the three-figure mark in style by depositing the ball deep into the stands through the cover region.
Elgar, meanwhile, was the calming influence in South Africa's innings as he tactfully manoeuvred the ball towards the leg-side where most of his runs came.
His stubborn defence frustrated the Indian bowlers all throughout the day before a misjudged sweep shot against Ravindra Jadeja resulted in his dismissal for 160.
The prized scalp of Elgar also brought Jadeja his 200th Test wicket as he made the record for the fastest left-arm bowler to the landmark overtaking Sri Lanka spin maestro Rangana Herath.
De Kock was then outfoxed by champion spinner Ashwin, whose delivery went straight with the arm and penetrated the left-handed batsman's defences.
Ashwin struck again with the wicket of Vernon Philander, who trudged back to the pavilion without troubling the scorers.
Senuran Muthusamy and Keshav Maharaj were not out at stumps vying hard to further diminish India's stronghold in the series opener.
India made 502-7 in the first innings following Mayank Agarwal's double ton and Rohit Sharma's 176 in his maiden outing as a Test opener.