Wrist spinner Kuldeep Yadav (3/13) led the Indian bowlers' fine show to restrict West Indies to 109 for eight after stand-in skipper Rohit Sharma opted to to field on a dew-laden Eden Gardens.
India responded well with the pacers giving them a fine start after Umesh Yadav dismissed Denesh Ramdin in the third over.
Playing their first match at home without the inspirational Mahendra Singh Dhoni, India were 45 for four in eight overs, leaving their fragile middle order exposed.
But the 'local boy' Karthik, who leads Kolkata Knight Riders in IPL, stayed calm in his 31 not out from 34 balls (3x4, 1x6) to steer India home with 13 balls to spare.
Hardik's brother, Krunal, hit the winning boundary off Keemo Paul in the 18th over. The new Pandya smashed 21 off nine balls.
This was India's first win against the World T20 champions since 2014, spanning five matches.
The 21-year-old debutant pacer Oshane Thomas (2/21) gave Windies a flying start, removing both the openers -- Rohit Sharma (six) and Shikhar Dhawan (three) -- for 16 inside the third over.
He bowled a peach of a delivery that clocked 147kph, the extra bounce taking an inside edge off Rohit's blade to dismiss the stand-in skipper on his happy-hunting ground.
In his next over, he struck once again, rattling Dhawan's middle-stump.
It was a perfect scenario for dashing Delhi wicketkeeper-batsman Rishabh Pant as he had ample time in the middle to play a match-winning knock and justify his inclusion in the side.
But Pant (1) got out playing a rash shot in his four-ball stay to become skipper Brathwaite's first victim.
Back at the ground where he hit four sixes in an over to help his side win the World T20 two years ago, Brathwaite next dismissed KL Rahul (16) in a wicket maiden over to put India on the backfoot.
Fortunately for India, the target was not a steep one and all they needed was a sensible partnership, which turned out to be the 38-run stand from 45 balls between Manish Pandey (19) and Karthik.
Earlier, debutant Khaleel Ahmed (1/16) and Jasprit Bumrah (1/27) ensured that the Windies run-rate dried up before the spin duo of Krunal Pandya (1/15) and Kuldeep made merry. Kuldeep (3/13) also completed 100 wickets in T20 cricket.
Tottering at 63 for seven inside 15 overs, the Windies looked to fold up inside 100 but Fabian Allen (27 from 20 balls) and Khary Pierre (15 not out from 13 balls) lifted the total past 100.
Krunal finished with excellent figures of 1/14 bowling his four overs at a stretch.
After being hit for a six by Kieron Pollard in his first over, the left-arm spinner not only dismissed the explosive batsman but conceded just four runs in his final three overs to finish on a high.
Down with a "gastric complaint", Bhuvneshwar Kumar pulled out in the last minute despite being named in the XII, but his absence was hardly felt with Yadav and debutant and Khaleel doing a fine job.
Left-arm pacer, Khaleel, was sensational giving away just 10 runs from his three overs, including a maiden over to Pollard.
It was in the same over the Windies batsmen made a mockery of running between the wickets and were sprinting against each other after confusion.
Opener Shai Hope, who had impressed with an unbeaten 123 and 95 in the ODI series, was the poor victim.
Introduced in the fifth over, Bumrah picked up another in-form batsman, Shimron Hetmyer (10), in his fourth over.
Runs dried up early as the visitors struggled at 31 for three, and the World T20 champions never looked at ease in their favourite format, taking 62 balls to complete 50 runs.