New Zealand reached a position of strength after a disastrous morning session to finish the day on 329 for four at the Eden Park here. Skipper McCullum (143 batting) and Corey Anderson (42 batting) were in the middle at the close of play.
McCullum, who slammed his third ton against India and his eighth Test century overall, reached the three-figure mark with a towering six off Ravindra Jadeja, while Williamson (113) hit his fifth Test ton with the help of 10 boundaries and a couple of sixes.
After being sent into bat under overcast conditions conducive to seam bowling, New Zealand could manage only 54 runs in the pre-lunch session losing both their openers, Peter Fulton (13) and Hamish Rutherford (6), and in-form batsman Ross Taylor (3).
But Williamson and McCullum swung the first day in New Zealand's favour by adding 125 runs in 27 overs in the post-lunch session.
The Indian bowlers attacked in a bid to take wickets, but gave away runs easily considering the short boundaries. Ishant Sharma (2-62) was the pick of the bowlers, reaching his 150-wicket mark in 54 Tests.
Zaheer Khan (2-98) pitched in with two wickets, while Mohammad Shami (0-66) was unlucky to finish empty-handed despite bowling good spells throughout. Jadeja (0-81) proved ineffective on the hard and bouncy pitch, while Rohit Sharma (0-12) and Virat Kohli (0-4) turned their arms over as well.