Chahal and Yadav (3/20) continued their wrist-spin magic and shared eight wickets for 42 runs between them to rattle the hosts in 32.2 overs after Virat Kohli won the toss and elected to bowl.
The packed Supersport Park was forced into silence for majority of the morning as Chahal-Yadav ripped apart the Proteas' batting line-up.
It was the lowest total for South Africa in ODI cricket on home soil, after 119 versus England at Port Elizabeth in 2009.
Chahal and Yadav's performances had historic significance as well, becoming only the second spin pairing to pick up three-plus wickets each in the same innings.
Also Read
West Indies' Carl Hooper and Keith Arthurton had previously shared six wickets at Bloemfontein in 1999.
Chahal also returned the best figures for any Indian spinner against South Africa in South Africa. The previous best hauls for an Indian spinner was Yuvraj Singh's 4 for 6 versus Namibia at Pietermaritzburg in 2003.
Chahal also became only the second Indian bowler to pick up a five-wicket haul in ODIs on South African soil, after Ashish Nehra's 6/23 against England at Durban, also in 2003.
Earlier, Aiden Markram became the second-youngest ODI skipper for South Africa.
South Africa made two changes, handing Khaya Zondo his ODI debut for the injured Faf du Plessis. They also included chinaman Tabraiz Shamsi in place of all-rounder Andile Phehlukwayo while India went unchanged.
Sent into bat, Hashim Amla (23) and Quinton de Kock (20) made a watchful start against Bhuvneshwar Kumar (1/19) and Jasprit Bumrah (1/12). While the Indian pacers were on the money with their line and length, the Proteas' openers were more watchful and wary of losing wickets early on.
India got the breakthrough they wanted when Kumar, bowling from changed ends, induced a faint inside edge off Amla. The batsman asked for DRS review but the decision stayed with India. South Africa were placed at 39/1 after 10 overs and their 50 came up in the 13th over.
Chahal immediately came into the attack and struck in his second over as de Kock was caught in the deep. It became two wickets in two balls when Markram (8) played a poor stroke off Yadav in the very next over and was caught in the deep as well, with Kumar taking a well-judged catch.
South Africa, by then, had lost three wickets for 0 runs in a space of 6 balls, but the worst was yet to come.
Zondo (25) and JP Duminy (25) added 48 runs for the fifth wicket to somewhat stabilise the innings.
But the procession began once again when the wrist spinners were brought back in action. Zondo miscued one off Chahal in the 27th over and was caught at midwicket, with Pandya latching on second attempt.
South Africa barely crossed 100 in that over, and then Chahal came with another breakthrough, trapping Duminy plumb LBW.
Chahal trapped Morne Morkel (1) LBW as well, while Yadav got rid of Kagiso Rabada (1) with a wrong one, out LBW. Bumrah got on the wickets' tally too, bowling Imran Tahir (0) to complete the hosts' misery.
Disclaimer: No Business Standard Journalist was involved in creation of this content