Mohammed Shami and Ravindra Jadeja combined to lead India's victory charge, leaving South Africa tottering at 117 for eight at lunch on the fifth and final day of the first Test on Sunday.
Shami took three key wickets early in the morning session, including that of skipper Faf du Plessis (13), to hit South Africa's hopes of saving the game in Visakhapatnam after they were set a victory target of 395.
Jadeja soon joined forces to run through the lower order with his left-arm spin and sent back overnight batsman Aiden Markram (29) with a one-handed return catch.
Senuran Muthusamy, on 19, and Dane Piedt, on 32, have put on an unbeaten 47-run stand for the ninth wicket to frustrate the Indian bowlers.
South Africa still need 278 for an unlikely win.
Off-spinner Ravichandran Ashwin struck first to clean up overnight batsman Theunis de Bruyn (10) as he became the joint fastest to 350 wickets in his 66th Test, joining spin legend Muttiah Muralitharan of Sri Lanka.
Shami then bowled Temba Bavuma for nought on a delivery that stayed low on the final-day pitch that offered variable bounce.
The veteran paceman came back in his second spell to rattle the stumps of du Plessis, who was leaving the incoming delivery, and Quinton de Kock, for zero.
Jadeja, who got first innings centurion Dean Elgar late Saturday, struck three times in one over to put India on the brink of taking a 1-0 lead in the series.
It was senior batsman Rohit Sharma who put India in pole position with a century in each innings on debut as a Test opener -- a first by any batsman in five-day history.
Visakhapatnam, India | AFP