India 397 for 4 (Kohli 117, Iyer 105, Gill 80*, Southee 3-100) beat New Zealand 327 (Mitchell 134, Williamson 69, Shami 7-57) by 70 runs
Mumbai: India reached the World Cup final by holding off New Zealand on a memorable night in Mumbai that included Virat Kohli's record-breaking 50th one-day international century.
Superstar Kohli moved clear of his legendary former team-mate Sachin Tendulkar's hundred tally as India piled up 397-4.
But New Zealand threatened to spoil the hosts' party.
Daryl Mitchell scored a sublime century of his own and put on 181 runs from 149 balls with skipper Kane Williamson to quieten the febrile home support and give the Black Caps a shot at an improbable victory.
India were feeling the pressure with the Black Caps on 220-2, when Mohammed Shami removed Williamson for 69 and Tom Latham for a two-ball duck in the 33rd over.
Glenn Phillips' 41 from 33 kept New Zealand in with an outside chance but he holed out and Mitchell followed for 134 to Shami.
Fast bowler Shami ended with incredible figures of 7-57 - the best for India in ODIs - and New Zealand were ultimately bowled out for 327, leaving them 70 runs short.
Earlier, Rohit Sharma had won the toss and elected to bat first in Mumbai, with both sides unchanged.
And Rohit backed his own call by putting his foot on the pedal early on in the innings. He took on Trent Boult in the very first over with a couple of streaky fours. There wasn't much wrong with Boult's lines in his opening over, but Rohit went in with the intent of taking quick runs.
This continued in the following overs, as Rohit kept going for his shots even as Shubman Gill gave him decent support. With his third six of the innings, Rohit crossed Chris Gayle as the batter with the most sixes in the history of the Cricket World Cup.
India kept going at an aggressive pace in the first 10 overs, before Rohit lofted a slower ball from Tim Southee high in the air over mid-off, where his opposite number, Kane Williamson, ran backward and took a stunning catch.
Gill found good support in Virat Kohli and the duo kept going at a brisk pace. After Rohit's fall, Gill unleashed some exquisite shots to keep the run rate going.
India had already reached 150 by the end of the 20th over. During this stand, Kohli became the third-highest run-getter in the history of ODIs. New Zealand seemed to be without answers, till Gill picked up cramps in the 23rd over and had to leave the pitch, unbeaten on 79.
However, functioning like an automaton, the India batting lineup kept churning out runs. Newcomer Shreyas Iyer was soon among the runs. He unleashed a couple of big hits against Rachin Ravindra in the 27th over. Kohli reached his half-century, a first-ever for him in a World Cup knockout game, in the same over.
The batter opened his arms with an exceptional bottom-handed lofted six against Tim Southee over the leg-side in the 30th over. During the 34th over, he reached 674 runs in this edition of the World Cup. This helped him go one better over Sachin Tendulkar's 673 at the 2003 World Cup, which was the record for the most runs in a single edition of the tournament.
The duo added 100 runs off merely 79 balls. After taking 17 runs off Boult in the 36th over, India's innings slowed down a bit. A contributing factor was that Kohli was beginning to suffer from hamstring cramp.
The slower period of scoring continued as Kohli recovered and accumulated his way towards three figures. And the historic moment came with a two of Lockie Ferguson, with Kohli celebrating his record-breaking moment in style.
Kohli opened his arms after reaching three figures, racing through the gears before departing to Southee for 117 from 113 balls to a standing ovation.
But, the excellent Iyer continued the momentum into the death overs as India turned their focus to a big-scoring finish.
Iyer's hundred came off 67 balls, the third quickest by an Indian man at a Cricket World Cup, with eight of his 12 boundaries being sixes before he departed for 105 to Boult.
And a late flurry from KL Rahul helped India to just shy of 400, leaving New Zealand requiring a formidable 398 - a target that proved out of reach.