Raheem Sterling and Phil Foden's second-half goals finally broke Dinamo Zagreb's stubborn resistance in a 2-0 win for Manchester City at the Etihad.
A City performance including 20 shots and more than 800 passes was 24 minutes away from being frustrated until substitute Sterling finished off Riyad Mahrez's low cross.
Foden's injury-time second on the break added the shine to a win which puts City three points clear at the top of Champions League Group C.
- Guardiola apologises to Foden over game time
- Champions League tables
- Champions League scores and fixtures
They had dominated from start to finish but their finishing was unusually wayward, with Bernardo Silva and Sergio Aguero both wasting good first-half opportunities.
Dinamo grew in confidence and City began to show their frustration before Sterling broke the deadlock with 66 minutes gone, and although the hosts were denied what appeared a clear penalty in the closing stages, they made up for that when Sterling spotted Foden's run on the edge of the box and played him in to confidently add a second.
City made to wait; Dinamo make history
The format of the match, on the surface, was much like most Manchester City home games. Pep Guardiola's side dominated from the off, kept the ball, moved with and without it, and looked like they could score at any time.
The one difference from normal was that the goals didn't follow. Aguero was thwarted by some quick thinking by Dominik Livakovic, who dived well at his feet when you expected him to score, before Bernardo Silva sliced a volley wide when well-placed.
City only managed one shot on target before the break despite making some 357 passes and producing 14 crosses - with their quality in the final third lacking.
While they visibly grew in frustration from the restart, it gave Dinamo renewed belief and even the introduction of Sterling from the bench did little to improve matters at first.
But from a well-worked, quickly taken short corner, Rodri's brilliant pass in behind found Mahrez's run and he crossed low for Sterling to smash the ball home and spark celebrations bursting with relief.
Manchester City: Ederson (6), Cancelo (7), Otamendi (6), Fernandinho (6), Mendy (5), Gundogan (6), Rodri (7), David Silva (7), Bernardo Silva (6), Aguero (5), Mahrez (7).
Subs: Sterling (8), Jesus (n/a), Foden (n/a).
Dinamo Zagreb: Livakovic (8). Stojanovic (7), Theophile-Catherine (7), Dilaver (6), Peric (7), Leovac (6), Olmo (7), Ademi (6), Moro (6), Petkovic (7), Orsic (6).
Subs: Gojak (5), Gavranovic (5), Atiemwen (n/a).
Man of the match: Raheem Sterling
Referee Serdar Gozubuyuk denied City three strong penalty appeals inside the same move, which a VAR referral then also refused to overturn, while a still angry Guardiola was booked when he let his frustrations boil over.
But deep into injury time any annoyance was gone when Foden, who had only come on five minutes earlier, showed fine composure to beat Livakovic first time from the edge of the box and seal victory, and leave Dinamo on the wrong side of an unwanted record - the first side to lose 13 consecutive away Champions League games in history.
Manchester City are back in Premier League action this weekend, when they host Wolves at 2pm on Sunday.