Tottenham midfielder Dejan Kulusevski's 90th-minute header denied Manchester City victory in a breathless six-goal thriller at Etihad Stadium.
City thought they had won it nine minutes from time when Jack Grealish turned home Erling Haaland's cross for his first goal since April.
But Tottenham snatched a point in a match that ended in controversy as referee Simon Hooper blew for a foul on Erling Haaland, who had already shrugged off the effects of Emerson Royal's tackle and chipped a pass to Grealish which seemed to set the England man clear.
Haaland was still complaining long after the final whistle and responded to something said from the Tottenham bench before furiously marching down the tunnel.
It was fitting both sides got something out of the game given how entertaining it had been.
Tottenham led early through Son Heung-min, only for the Tottenham skipper to divert Julian Alvarez's cross into his own net three minutes later.
Phil Foden finished off a slick City attack to put the hosts in front at the break.
Giovani Lo Celso pulled Tottenham level with an excellent curling effort from the edge of the area midway through the second half, but Yves Bissouma was soon punished for losing possession close to the Spurs area.
Foden fed Haaland, who delivered the low cross for Grealish to convert.
Kulusevski's late intervention ensured Tottenham avoided a fourth successive Premier League defeat, with Ange Postecoglou's side fifth on 27 points, three behind champions City, who drop to third.
Attack, attack, attack
As predicted, there could be no complaints about the excitement value of a contest that pitted together two managers completely committed to an expansive game.
By half-time, the tally stood at three goals, two shots that hit the woodwork, 14 shots and 10 corners. At the final whistle, there had been six goals, 26 shots, 18 corners and no one left complaining about a lack of entertainment.
It really was brilliant stuff, with both sides at their most vulnerable when they were attacking their opponents' goal.
When observers glibly talk about the Premier League being the 'best in the world', they often fail to explain what criteria they are using.
The technical quality, attacking invention and simple desire to score goals in this contest would bring joy to any set of supporters.
Tottenham knew they would not dominate possession, but even under the most severe pressure they tried to play quickly out from the back.
The tactic brought them the opener, as they swept forward from a City corner, with Son shrugging off Jeremy Doku and completing a 40-yard burst by ramming his shot past Ederson.
Only a Ruben Dias interception of a Brennan Johnson cross that was about to be met by Son denied the South Korean a second. Additionally, Son could not contain his fury when Bryan Gil took three touches and then gave the ball away after a rare stray pass from Bernardo Silva invited a first-time pass to the Tottenham captain.
And this was in the first-half period that City dominated.
The second period was more even, but it still came as a surprise on both occasions when Tottenham got themselves level.
The first time was after Son had created the opening for Lo Celso, and the second when Kulusevski met Brennan Johnson's cross.
More to follow.
- Re-live Sunday's Premier League action
- How did you rate Manchester City's performance? Have your say here
- What did you make of Spurs' display? Send us your views here
Player of the match
Son Heung-minSon Heung-min
with an average of 7.88
Manchester City
Squad number47Player nameFoden
Squad number20Player nameBernardo Silva
Squad number19Player nameÁlvarez
Squad number10Player nameGrealish
Squad number11Player nameDoku
Squad number16Player nameRodri
Squad number2Player nameWalker
Squad number31Player nameEderson
Squad number3Player nameRúben Dias
Squad number25Player nameAkanji
Squad number24Player nameGvardiol
Squad number82Player nameLewis
Squad number9Player nameHaaland
Squad number6Player nameAké
Squad number8Player nameKovacic
Tottenham Hotspur
Squad number7Player nameSon Heung-min
Squad number21Player nameKulusevski
Squad number18Player nameLo Celso
Squad number22Player nameJohnson
Squad number13Player nameVicario
Squad number23Player namePorro
Squad number5Player nameHøjbjerg
Squad number38Player nameUdogie
Squad number4Player nameSkipp
Squad number63Player nameDonley
Squad number33Player nameDavies
Squad number11Player nameGil
Squad number9Player nameRicharlison
Squad number12Player nameEmerson Royal
Squad number8Player nameBissouma
Line-ups
Man City
Formation 3-2-4-1
- 31Ederson
- 24GvardiolBooked at 84minsSubstituted forAkéat 87'minutes
- 3Rúben Dias
- 2Walker
- 20Bernardo Silva
- 25Akanji
- 16RodriBooked at 34mins
- 19ÁlvarezSubstituted forKovacicat 87'minutes
- 47FodenSubstituted forLewisat 73'minutes
- 9HaalandBooked at 90mins
- 11DokuSubstituted forGrealishat 52'minutesBooked at 61mins
Substitutes
- 4Phillips
- 5Stones
- 6Aké
- 8Kovacic
- 10Grealish
- 18Ortega
- 21Gómez
- 52Bobb
- 82Lewis
Tottenham
Formation 4-2-3-1
- 13Vicario
- 23PorroBooked at 74mins
- 12Emerson RoyalBooked at 90mins
- 33Davies
- 38UdogieBooked at 38mins
- 8BissoumaSubstituted forRicharlisonat 87'minutes
- 18Lo CelsoSubstituted forSkippat 79'minutes
- 22JohnsonSubstituted forDonleyat 90+6'minutes
- 21KulusevskiBooked at 90mins
- 11GilSubstituted forHøjbjergat 45'minutes
- 7Son Heung-min
Substitutes
- 4Skipp
- 5Højbjerg
- 9Richarlison
- 20Forster
- 36Véliz
- 40Austin
- 58de Santiago Alonso
- 63Donley
- 65Dorrington
Live Text
Match ends, Manchester City 3, Tottenham Hotspur 3.
Second Half ends, Manchester City 3, Tottenham Hotspur 3.
Corner, Manchester City. Conceded by Destiny Udogie.
Substitution, Tottenham Hotspur. Jamie Donley replaces Brennan Johnson.
Erling Haaland (Manchester City) is shown the yellow card.
Emerson Royal (Tottenham Hotspur) is shown the yellow card for a bad foul.
Erling Haaland (Manchester City) wins a free kick in the defensive half.
Foul by Emerson Royal (Tottenham Hotspur).
Dejan Kulusevski (Tottenham Hotspur) is shown the yellow card for a bad foul.
Jack Grealish (Manchester City) wins a free kick on the left wing.
Foul by Dejan Kulusevski (Tottenham Hotspur).
Goal! Manchester City 3, Tottenham Hotspur 3. Dejan Kulusevski (Tottenham Hotspur) header from the centre of the box to the top left corner. Assisted by Brennan Johnson with a cross.
Substitution, Tottenham Hotspur. Richarlison replaces Yves Bissouma.
Substitution, Manchester City. Mateo Kovacic replaces Julián Álvarez.
Substitution, Manchester City. Nathan Aké replaces Josko Gvardiol.
Corner, Tottenham Hotspur. Conceded by Rúben Dias.
Josko Gvardiol (Manchester City) wins a free kick in the defensive half.
Foul by Dejan Kulusevski (Tottenham Hotspur).
Josko Gvardiol (Manchester City) is shown the yellow card for a bad foul.
Foul by Josko Gvardiol (Manchester City).