Shami took 3-21 while Jadeja had returned 4-51 as South Africa lost seven wickets in 33 overs Sunday to limp to lunch at 117-8, still trialing hosts by 278 runs.
Ravichandran Ashwin (1-29) started the slide by bowling Theunis de Bruyn (10) in the second over of the day. It was his 350th wicket in 66 tests and he equaled Sri Lankan great Muttiah Muralitharan as joint quickest to reach the milestone.
Shami then got into the act and bowled Temba Bavuma second ball for no score.
Aiden Markram (39) and Faf du Plessis (13) provided some resistance and pushed the score past 50, after which the Proteas completely collapsed.
First, du Plessis was bowled off Shami in the 22nd over, shouldering arms to an incoming delivery. Two overs later, Shami bowled first inning's centurion Quinton de Kock (0).
Jadeja then broke the back of South African batting with three wickets in the 27th over.
He sent back Markram with an excellent one-handed return catch and then trapped Vernon Philander (0) lbw three balls later. In the final ball of the over he had Keshav Maharaj (0) also out lbw.
Play was extended by 15 minutes considering the possibility for an early result. But Senuran Muthusamy (19 not out) and Dane Piedt (32 not out) managed to defy the Indian bowling with a 47-run partnership.
Piedt hit five fours and a six, with the latter breaking the record for the most sixes in a test match, passing the previous best of 35 set during a test between Pakistan and New Zealand in Sharjah in 2014 .