The visitors, playing almost exclusively on the counter-attack, struck early on and though Ilkay Gundogan equalised before half-time, went ahead again after the break through Harry Kane.
But in a frantic finish, a penalty by Riyad Mahrez in the 92nd minute of the game looked to have rescued a point for City, only for Kane to dramatically add another three minutes later - the goal that settled the contest 3-2 in Tottenham's favour.
City were behind within five minutes following a swift Tottenham counter-attack that saw Son Heung-min, a regular thorn in the Blues’ side over the years, race clear down the left, drew Ederson out before squaring the ball to Dejan Kulusevski who slotted home from the edge of the box.
Not the start anyone had expected, but at least there was 86 minutes to turn the situation around.
It would be 20 minutes before City really threatened an equaliser when Ilkay Gundogan’s curling shot kissed the outside of the post and a minute later, Joao Cancelo fired a fierce low shot wide.
The champions began to build up a head of steam, despite Tottenham’s attempts to disrupt play by timewasting at every opportunity, and on 34 minutes, finally, City drew level.
Raheem Sterling, scorer of so many goals of late, turned provider as he whipped in a cross from the left flank towards Kevin De Bruyne – Hugo Lloris went to gather the ball but instead soiled it into the path of Gundogan who made no mistake from eight yards out.
With no further goals by the break, it set the second-half up perfectly.
City knocked on the door continually after the restart, but Tottenham, dangerous throughout on the break, countered again on the hour and Son's cross from the left was half-volleyed home by Harry Kane from close range to give the visitors a 2-1 lead.
Four minutes later, Kane was again one-on-one with Ederson, but this time the Brazilian made a superb save with his feet to keep the contest alive.
City responded by almost immediately levelling again with only a fine Lloris save denying Gundogan a second goal on 65 minutes.
It proved an important moment for the visitors with Kane seemingly putting the game to bed on 74 minutes - only for VAR to rule it out for offside.
The City fans immediately sensed an opportunity when all seemed lost, though time was running out.
And that opportunity came in the 90th-minute when Bernardo's cross struck Christian Romero's raised arm - VAR instructed referee Anthony Taylor to review the incident on the pitch-side monitor and a penalty was duly awarded.
Mahrez expertly tucked the ball high to Lloris' right to make it 2-2 and set up a grandstand finish.
But was Kane who had the final say, heading home in the fifth of seven minutes of added time to give the Blues a first loss in 2022.
Spurs: Lloris, Romero, Dier, Davies, Emerson (Docherty 83), Sessegnon, Højbjerg, Bentancur, Kulusevski, Son (Moura 80), Kane
What it means...
City are six points clear of Liverpool at the top of the Premier League, but the Merseysiders have played one game less.
City travel to Goodison Park to face Everton next Saturday.
Kick-off is 17:30 against Frank Lampard's men.
Pep Guardiola reaction
“I said a few weeks ago we need to win many games,” said Pep.
“Every game will be a big, big battle.
“We knew it, and it will be good to understand how difficult it is. Since October we didn’t lose one game in the Premier League.
“I had the feeling they have fantastic players and a fantastic manager.
“We knew after three defeats they would be back. There was practically no space in the area.
“After that, they could keep the ball and with Kane, it gave time to Son who could run. In general we were there all the time. We were there but we couldn't win.”
News about Man City v Spurs"
Gundogan rues City's approach in Spurs finale
Ilkay Gundogan felt Manchester City played well enough to take all three points against Tottenham Hotspur, but admitted his side should have controlled the game better after drawing level in added time. Watch more
Lescott: City’s destiny still in our own hands
Joleon Lescott insists defeat to Spurs isn’t cause for concern, with the title race still in Manchester City’s hands. Read more
Guardiola: 'We need to win many games'
Pep Guardiola reiterated that his team has plenty of hard work ahead if the Premier League title is to be retained. Read more
Full-match replay: City v Spurs
Enjoy the full 90 minutes of City's Premier League clash with Spurs at the Etihad on CITY+ Watch more
‘We performed well’: Guardiola reflects on Spurs defeat
Pep Guardiola felt Manchester City were at fault for Harry Kane’s match winning goal in our last gasp defeat to Tottenham Hotspur but was satisfied with his side’s overall performance. Read more
City 2-3 Spurs: Brief highlights
Short highlights of City's home clash with Spurs... Watch more
City 2-3 Spurs: Extended highlights
The best of the action from our home clash with Spurs.... Watch more