Left-arm quick Beuran Hendricks led an inspired bowling attack as South Africa kept India to 134 for nine during Sunday's third Twenty20 international in Bangalore.
Hendricks, who was the only change in the side from South Africa's previous loss, and spinner Bjorn Fortuin took two wickets each after Indian skipper Virat Kohli's surprising decision to bat first.
The hosts lost three of their top batsmen early, including Kohli for nine, on a pitch where teams usually opt to bat last.
Rohit Sharma was the first to go for nine, caught at slip off Hendricks while fellow opener Shikhar Dhawan returned to the dug out for 36.
Fast bowler Kagiso Rabada took Kohli's scalp after the star batsman was holed out at deep square leg boundary, with Andile Phehlukwayo completing a sharp running catch.
Rabada took three wickets, including two in the final over, but gave away 39 runs from his four overs.
Fortuin struck twice with his left-arm spin in the 13th over to take wickets from Rishabh Pant for 19 and Shreyas Iyer for five.
Hardik Pandya, who hit 14, and Ravindra Jadeja, who made 19 off 17 deliveries, made useful cameos in the end to leave the hosts with some respect.
India leads the three match series 1-0 after the opening game was washed out.