Saturday's match went right to the wire with South Africa requiring 16 runs from the final over, but Hardik Pandya clinched a hat-trick with the late dismissals of David Miller and Kagiso Rabada as the Proteas lost their nerve.
Virat Kohli had earlier smashed 76 runs off 59 balls, comfortably his best score of the tournament, to help India set a daunting target of 177 – the highest ever in a men's T20 World Cup final.
Kohli's innings came to an end in the penultimate over as he swung Rabada's delivery straight to Marco Jansen at long-on, after partner Axar Patel (47) was run out by Quinton de Kock.
That knock proved to be the title clincher, though, as the India bowlers provided able support to their batsmen.
South Africa were reduced to 12-2 within the first three overs as Jasprit Bumrah sent wickets flying with a brilliant outswinger to beat Reeza Hendricks (4) and Arsheep Singh had Aiden Markram (4) caught behind by Rishabh Pant.
If India thought they would be able to defend their total in comfort, however, they were mistaken.
Heinrich Klaasen slammed 52 off 27 balls with support from De Kock (39) and Tristan Stubbs (31), to take them close.
Thirty runs from as many deliveries was the target at one point, but Klaasen nicked Pandya's ball through to Pant in the 17th over and Bumrah followed up by dismissing Jansen for two.
The tail was unable to provide the heroics for South Africa, desperate final-over swings from Miller (21) and Rabada (4) going unrewarded as Pandya finished with an efficient 3-20.
Kohli picks his moment
Kohli has not been on top form throughout this tournament, 37 versus Bangladesh his best score until this point with five of his innings bringing single-digit tallies.
He stepped up when it mattered most, though, becoming just the third player to make a half-century in multiple T20 World Cup finals, having made 77 in India's 2014 loss to Sri Lanka (also Marlon Samuels and Kumar Sangakkara).
After being presented with the Man-of-the-Match award, Kohli suggested he will not play at the next edition of the tournament in 2026. If his T20I career is over, he certainly went out on a high.
Klaasen's historic knock in vain
South Africa ran India close despite being tasked with chasing the best total ever recorded in a T20 World Cup final, and that was mostly due to Klaasen's efforts.
He made his half-century in 23 balls, the fastest 50 in a T20 World Cup final. He obliterated the previous record, Mitchell Marsh's 31-ball half-century for Australia in 2021.
Long wait over for India
Most observers would agree India are fitting champions, having marked themselves out as the best team at the tournament during the last few weeks.
It is their first T20 World Cup crown since they won the inaugural edition in 2007, and they have joined England and West Indies as the only teams to triumph more than once (two titles each).
India captain Rohit hit back at former Pakistan skipper Inzamam-ul-Haq after questioning how Rahul Dravid's side found swing in their Super 8s meeting with Australia.
Inzamam had referenced Arshdeep Singh's ability to move the white ball in the 15th over against Australia, suggesting "some serious work was done on the ball".
Speaking at Wednesday's pre-match press conference, Rohit responded: "Wickets are so dry, all teams are getting reverse [swing].
"[You] need to open your mind sometimes. This is not Australia."
After launching a staunch defence of his India team-mates, Rohit urged his side to play the team and not the situation against England.
England thrashed India by 10 wickets in the 2022 World Cup semi-finals of the same competition the last time this pair met.
"We want to treat this as a normal game," Rohit added. "We don't want to be talking about that it is a semi-final.
"We are enjoying each other's company and we need to carry on. It is a knockout game. If you think too much [about it], it doesn't help.
"Honestly not a lot has changed since 2022. We have tried to play with a free mind, T20 and ODIs as well. It all depends on the conditions which have been challenging throughout the tournament here.
"We want to be a smart cricket team. I have kept things simple personally and for the players as well. We have done well with role clarity and rely on the players making good decisions on the field.
"Everyone knows they need to get the job done. We don't need to change from 2022 to 2024."
As for India's line-up, and the potential of fielding four spin bowlers, Rohit insists the pitch will dictate selection matters.
"We will see, assess the conditions and then take a call on four spinners," he continued. "We will see."
Regardless of that decision, Rohit urged his side to keep their cool when it matters.
"It is important to stay cool and calm," the opening batter said. "Staying calm has worked for me over the years. Sometimes you can lose your cool as well.
"I am happy to let you do what you want but if it is at the cost of the team then I wo'’t let it happen. Indian cricket teams are always under pressure. Most of the guys are used to it."
India started their Super 8s campaign in style in Barbados, with Suryakumar's 28-ball 53 propelling them to 181-8 from their 20 overs.
Virat Kohli added 24, with Hardik Pandya contributing a useful 30 too, though Fazalhaq Farooqi, the tournament's leading wicket-taker, finished with impressive figures of 3-33.
Yet Farooqi was outshone by Bumrah, who was the star of India's bowling attack.
Bumrah took 3-7 as he skittled through Afghanistan's top order, reducing them to 23-3 inside five overs.
Arshdeep Singh (3-36) rounded matters off, sending Rashid Khan, Naveen-ul-Haq and Noor Ahmad packing to bowl Afghanistan all out for 134.
The victory sent India to the top of Group One, ahead of Australia's clash with Bangladesh.
Data Debrief: More history for Kohli
Kohli might have taken a backseat in this win, but his haul of 24 saw him move onto 4,066 runs in T20Is.
That makes Kohli India's record run scorer in the format, with the 35-year-old having surpassed Rohit Sharma (4,050).
Suryakumar Yadav hit an unbeaten half-century as India successfully chased down their opponents' target of 111 for a seven-wicket victory - and their third win in as many Group A matches.
The tournament co-hosts also entered the contest with a perfect record from their opening two games, but endured a poor start as Arshdeep Singh claimed Shayan Jahangir and Andries Gous in the first over.
That left them at 3-2, but they managed to settle with Steven Taylor (24 from 30 balls) and Nitish Kumar (27 off 23) top-scoring as their side finished at 110-8.
However, the States made a purposeful start in the field. With the second ball, Virat Kohli was gone for a duck as Gous caught him from Saurabh Netravalkar, who also dismissed Rohit Sharma for just three.
Suryakumar (50 off 49 not out) stepped in and held the fort alongside Shivam Dube (31 off 45 not out), though India were still in danger of a potential shock, needing 35 off the final 30 balls.
Nevertheless, an untimely five-run penalty was awarded to them as the USA took longer than a minute between overs for the third time.
That swung the pendulum firmly in India's favour. Successive boundaries from Suryakumar eased the pressure as they saw out what was eventually a comfortable win.
Data Debrief: India through, but Kohli's struggles continue
It was not as comfortable as India would have hoped for but, nevertheless, they managed to get the job done, with Suryakumar leading the charge.
However, the form of Kohli will be a cause for concern. His dismissal for a golden duck means he has now scored just five runs in his nation's opening three matches.
West Indian captain Nicholas Pooran won the toss and elected to field first.
India’s opening pair of returning captain Rohit Sharma and Suryakumar Yadav got the ball rolling, putting on a partnership of 44 before Yadav was dismissed by Jason Holder for a quick 16-ball 24.
Captain Sharma provided a steady head for the Indians throughout the majority of the innings as he lost partners Shreyas Iyer (0), Rishabh Pant (14) and Hardik Pandya (1) before eventually being dismissed in the 15th over for a top score of 64 to leave the tourists 127-5.
They eventually got up to 190-6 off their 20 overs thanks to cameos from Ravindra Jadeja (16) and Ravichandran Ashwin (13) as well as a brilliant closing effort of 41 from just 19 balls including four fours and two sixes from Dinesh Karthik.
Left-arm spinner Akeal Hosein was brilliant for the hosts with an economical 1-14 from his four overs while opening pacer Obed McCoy took 1-30 from his four.
The West Indian reply got off to a fast start thanks to openers Kyle Mayers and Shamarh Brooks as the pair sped to 22-0 in the second over before Mayers fell for 15 to pacer Arshdeep Singh.
The Windies then tried to gamble, sending Jason Holder up the order to bat at three but this move fell flat as he was next to go, bowled by Ravindra Jadeja for a duck.
The innings then ground to a virtual halt as Brooks (20), Nicholas Pooran (18), Rovman Powell (14), Shimron Hetmyer (14), Akeal Hosein (11) and Odean Smith (0) all perished to, eventually, leave the Windies needing 90 off 21 balls for victory.
Keemo Paul and Alzarri Joseph then finished not out on 19 and 5, respectively, to end the innings on 122-8, 68 runs short.
It was a balanced bowling effort by the Indians with Ravichandran Ashwin (2-22 off four overs), Arshdeep Singh (2-24 off four overs) and Ravi Bishnoi (2-26 off four overs) all contributing well.
After winning the toss and electing to field first, the hosts felt the wrath of the Indians from the outset with openers Rohit Sharma and Suryakumar Yadav speeding to 53 without loss after just 4.4 overs before Sharma was dismissed for a 16-ball 33 including two fours and three sixes.
Yadav’s dismissal for 24 in the sixth over then paired Deepak Hooda and Rishabh Pant who added a further 47 before Hooda’s wicket fell for 21 in the 12th over to leave the score on 108-3.
Pant went on to top-score with 44 before his dismissal in the 15th over. Sanju Samson (30 not out), Axar Patel (20 not out) and Dinesh Karthik (6) then combined to put the finishing touches on a fine effort with the bat for India, ending 191-5 from their 20 overs.
Alzarri Joseph was the pick of the bowlers for the Windies with 2-29 from his four overs.
The hosts then struggled throughout their reply thanks to some excellent bowling by India and some questionable decision-making by the batsmen.
Brandon King (13) and Kyle Mayers (14) both got starts but fell cheaply while captain Nicholas Pooran sprinted to 24 off just eight balls before he was run out after a mix-up with Mayers.
Rovman Powell with a quick 24, Shimron Hetmyer (19) and Jason Holder (13) were the only other batsmen to reach double-figures as the Windies struggled to a paltry 132 all-out after 19.1 overs.
Arshdeep Singh led the way for the Indians with 3-12 from 3.1 overs while he got good support from Avesh Khan (2-17) and Ravi Bishnoi (2-27).