South Africa captain Faf du Plessis won the toss in bright sunshine and elected to bat first. However, the clouds closed in and seamer Jasprit Bumrah (2-35) found prodigious movement in both directions to remove openers Hashim Amla (6) and Quinton de Kock (10) inside the first six overs.
Du Plessis (38) and Rassie van der Dussen (22) put on a patient 54 in 80 balls in a bid to rebuild the innings, but when the latter was bowled trying a reverse-sweep off Chahal (4-51), two more wickets fell in quick succession.
Chahal then bowled Du Plessis and left-arm spinner Kuldeep Yadav trapped JP Duminy (2) leg before wicket as India's slow bowlers squeezed the run-rate and bamboozled the batsmen.
David Miller (31) and Andile Phehlukwayo (34) got starts but could not pass 50, while Chris Morris (42) and Kagiso Rabada (31 not out) put on 66 for the eighth wicket to ensure the side posted a score that gives them a chance.
The innings mirrored South Africa's World Cup campaign to date as their batsmen struggled to find form or fluency on wickets that were good for striking. They have lost their opening two matches to England and Bangladesh, while India are playing their first game.