Manchester City suffered their first defeat of the season as injury-hit Norwich took full advantage of defensive frailties to beat the defending champions at Carrow Road.
Without the injured Aymeric Laporte, who is out until the new year after knee surgery, the City back-line were not up to scratch as the Canaries ran out shock 3-2 winners.
A late strike from Rodri was little consolation for the visitors.
Norwich were without a host of injured players as manager Daniel Farke was forced to name two goalkeepers on the bench, but they were good value for their second victory since returning to the top-flight.
After stemming plenty of early pressure from the visitors, Farke saw his side strike with their first opportunity.
Kenny McLean celebrates giving Norwich the lead (PA)
Alex Tettey, captaining Norwich on his 200th league appearance for the club, broke wide and saw a low cross blocked behind.
McLean was free to run between Rodri and Raheem Sterling to head home Emiliano Buendia's resulting corner.
Aguero, so often on form when these sides meet, headed his first chance over after being picked out by Sterling's cross.
Norwich made them pay for that miss as they doubled their advantage straight after.
Marco Stiepermann's pass set Pukki clear and the Finn showed his selfless side by squaring for Cantwell to turn in his second of the season.
Still the champions pushed on as Sterling hit the post with a header following a fortuitous deflection.
The action continued at both ends as John Stones, fit after a thigh injury and in for Laporte, was fortunate to survive a handball claim with City again struggling to clear their lines from a set-piece.
The hosts could not see out the opening 45 minutes with the arrears halved by Aguero, who was unmarked to convert a glancing header from Bernardo Silva's cross and become only the third player to score in the opening five games of a Premier League season.
An onslaught from Pep Guardiola's men was expected, yet it was Norwich who would extend their lead soon after the restart.
Otamendi and Stones survived one mix-up as Pukki raced onto a ball, only to skew his shot wide – but seconds later the striker made amends.
Stones rolled the ball to Otamendi on the edge of the box and as the Argentinian dallied, Buendia nipped in to steal possession and lay on Pukki's sixth goal of the campaign.
Guardiola turned to both De Bruyne and Gabriel Jesus from his bench in an attempt to get his side back into the contest.
They laid siege to the Norwich goal without managing to rest Tim Krul until Otamendi headed straight at the Dutchman with 25 minutes remaining.
Aguero headed high and wide from six yards as Norwich began to tire but it was Guardiola and his players who grew increasingly frustrated as a first league defeat in nine months loomed.
Rodrigo arrowed in a second for the visitors with two minutes remaining but, despite constant pressure, they could not beat Krul for a third time.