Phil Foden capped a sparkling performance with a late fourth.
In the final group stage fixture, the Premier League champions were just too good for the Croatian champions, though the hosts started brightly and could have had more than their early goal to show for their efforts with better finishing.
It was the perfect riposte to Saturday’s Manchester derby defeat and exactly the reaction Pep Guardiola, who made eight changes to the starting line-up, would have wanted.
City had barely settled into their stride when Dinamo Zagreb went ahead with a peach of a goal.
Kadzior’s fine cross into the box found the perfectly-timed run of Dani Olmo and the highly-rated Spaniard fired a volley that Claudio Bravo did well to get his hands on, but the power was too great, and the Croatians were in front with just 10 minutes played.
It was the tenth game in succession that City failed to keep a clean sheet – but there was still plenty of time to get back in this game.
Ilkay Gundogan forced Livakovic into a good save as the Blues looked for an instant response but the next best opportunity came on the break with Olmo racing through only to fire over from the edge of the box.
City needed inspiration from somewhere and it came in the shape of Phil Foden who decided to make something happen and did.
Foden skipped past three challenges on the halfway line, causing two Zagreb players to clash with each other as he sped through, then his pass to Gabriel Jesus saw another defender drop to the ground but quite rightly, City played on.
The Croatians were incensed, feeling the referee should have halted play, but as all the injured parties seemed fine shortly after, playing to the whistle was the right decision.
On the stroke of half-time, Zagreb were fortunate not to reduced to 10 men when Gojak clearly swung an elbow into Rodri’s face – if VAR reviewed it – which they should have done, it seemed a straightforward red card, but instead play restarted with a throw-in.
City were ahead within five minutes of the restart with a goal that smacked of real quality.
Benjamin Mendy played the ball to Jesus who exchanged passes with Foden as he moved into the box and the Brazilian left a defender on his backside before curling a low shot home from six yards to make it 2-1.
And less than five minutes later, Jesus was celebrating his second Champions League hat-trick.
A move down the left flank saw Mendy send a fine low cross towards the back post and Jesus volleyed home from four yards.
Mendy provided another fine cross for Jesus on 64 minutes but the Brazilian just headed over on this occasion.
Oleksandr Zinchenko made a welcome return as a sub for the hat-trick hero midway through the second period – his first appearance for two months.
The icing on the cake came six minutes from time after a delightful move between Ilkay Gundogan and Bernardo that saw the latter cross low for Foden to prod home on his 50th appearance for the Club and make it 4-1 on the night.
Terrific stuff from Pep’s men.
Star man: Gabriel Jesus
“We didn’t play for points – we played for ourselves,” said Pep.
“It is important to finish in that way - no injuries, no yellow cards.
“We played 75 good minutes, especially second half. Players who play regularly played well as well as those who don’t play as often.
“We will focus on Premier League and other competitions and wait to see which conditions we arrive in February.
“Like all the teams in this competition, we want to do the best we can. No team is going to play in last 16 not wanting to go as far as possible. Its normal.”
What it means…
City had already won Group C, so the victory only made the stats look better – but it was a much-needed shot in the arm for a side desperate to rediscover their best form.
Atalanta’s win in Shakhtar means they join the Blues in the Round of 16, in this, their first Champions League campaign.
This was somewhere close to it.
City travel to the Emirates Stadium on Sunday to take on Arsenal in the Premier League.
The game kicks off at 4.30pm GMT.