Opening batsman Dean Elgar completed a gritty century to keep South Africa fighting in response to India's first-innings 502 on day three of the first Test on Friday.
Left-hander Elgar, who started the day on 27, reached his hundred with a six off Ravichandran Ashwin in the second session as he let out a big roar in Visakhapatnam.
South Africa were 200 for five in 64 overs, still trailing the hosts by 302 runs. Elgar, on 106, and Quinton de Kock, on eight, were at the crease after the fall of skipper Faf du Plessis.
Elgar and du Plessis put on 115 runs for the fifth wicket before Ashwin broke the stand, getting the captain caught at leg gully for 55 against the run of play.
The partnership though steadied the innings after South Africa lost crucial wickets after India declared on 502-7 late on Thursday.
Elgar, who completed his 12th Test ton and only second in Asia, mixed caution and aggression to thwart the Indian attack on a hot and sunny day.
Fast bowler Ishant Sharma struck early in the morning, taking overnight batsman Temba Bavuma lbw for 18. South Africa started the day on 39 for three.
Left-arm spinner Ravindra Jadeja also posed a few problems and nearly got Elgar on 74 but wicketkeeper Wriddhiman Saha spilt the caught behind chance.
Indian opener Mayank Agarwal set the tone for the hosts' dominance of the game with his 215 and a 317-run opening stand with Rohit Sharma, who hit 176 of India's giant score.