De Kock (106) and Amla (100) put on a stand of 194 for the opening wicket as the Proteas posted a total of 280 for six in a match reduced to 49 overs a side because of rain.
And that proved well out of the tourists' reach as Tsotsobe and Dale Steyn ripped through their line-up with four for 25 and three for 17 respectively as India were dismissed for 146 in less than 36 overs.
The win put South Africa 2-0 up in the three-match series.
Steyn struck first for the hosts as he had Shikhar Dhawan caught at backward point by JP Duminy for a duck.
Tsotobe's first victim was Virat Kohli, also for nought, De Kock taking an outside edge behind the stumps.
Tsotobe the removed opener Rohit Sharma for 19 and Morne Morkel got rid of Ajinkya Rahane for eight to leave India on 34 for four.
Suresh Raina showed some much needed fight with 36, but by the time he went, following Mahendra Singh Dhoni (19), the game was just about up.
Tsotobe and Steyn took two more wickets apiece, the former ending Ravindra Jadeja's stay at the crease on 26, to close out victory.
Earlier, Mohammed Shami slowed the South African charge with four late wickets to limit the damage and give India hope.
The hosts, fresh from their 141-run win in the opening ODI, started strongly after being put into bat.
De Kock made 106 from 118 balls, with nine fours, before Ravichandran Ashwin finally made the breakthrough, the batsman lofting a catch to Rohit Sharma at square leg.
Captain AB de Villiers followed for just three the next over, stumped by Dhoni off Jadeja, while the wicketkeeper was also central to the key wicket of Amla.
He got an outside edge to a Shami delivery and was caught behind by Dhoni for 100, his 12th ODI century.
That left the hosts on 233 for three in the 44th over.
Duminy was run out for 26, while Shami also removed David Miller for a duck and Jacques Kallis for 10 to finish with figures of three for 48, but the Proteas had already done more than enough.