Captain McCullum's 302, which set up a mammoth second innings declaration of 680-8 before lunch, all but ensured his team will win the two-match series, having won the first game by 40 runs at Eden Park. (Agencies)
India were in trouble at 90 for three at tea, with Tim Southee taking two wickets after lunch.
Virat Kohli was 48 not out and Rohit Sharma was on 15.
Trent Boult trapped Shikhar Dhawan for two in the first over after lunch before Southee had Murali Vijay well caught by Corey Anderson at third slip for seven in the next over to leave them 10 for two.
Southee had Cheteshwar Pujara caught behind by wicketkeeper BJ Watling for 17 about 40 minutes before the break when a bouncer brushed Pujara's gloves as it went past.
The day belonged to McCullum, however, who resumed on 281 and went effortlessly through to 298 before slicing a late cut off paceman Zaheer Khan to the fence to bring up the milestone with his 32nd four.
McCullum's triple-century was the 28th in test cricket and the New Zealand skipper became the 24th player to score one.
Brian Lara, Virender Sehwag, Chris Gayle and Don Bradman all struck two triple-tons.
McCullum, 32, raised his arms while the crowd rose to their feet to applause for more than a minute.
Debutant all-rounder Jimmy Neesham, who had resumed on 67 on Tuesday, quickly raced through to his first test century and was 137 not out when McCullum called an end to the innings about 25 minutes before the break.
Neil Wagner was two not out for the hosts, who declared at their highest test score, surpassing the 671-4 they accumulated against Sri Lanka at the Basin Reserve in 1991.
Captain McCullum's 302, which set up a mammoth second innings declaration of 680-8 before lunch, all but ensured his team will win the two-match series, having won the first game by 40 runs at Eden Park.