Erling Haaland's 20th Premier League goal of the season took Man City to a 1-0 win at Tottenham and back into the top four.
The Norwegian turned home from close range from Jeremy Doku's cross 12 minutes in and that proved to be enough - although he also saw a stoppage-time strike in the second half scrubbed off for a handball given by ref Jarred Gillet.
That could have been a controversial moment, with it unclear whether the ball did actually hit the striker's arm during a challenge from Kevin Danso and VAR unable to conclusively overturn the call - but Pape Sarr headed over his glorious chance at the other end in the final seconds.
"The referee was quicker to disallow it than VAR," City boss Pep Guardiola said of the incident. "I'm pretty sure if VAR took a lot of time it was because there was a lot of doubt the referee didn't have."
City should have been further ahead at the break, with the electric Doku teeing up Haaland for another good chance and then a big opening for Savinho, who bumped his sitter over the bar.
As it happened | Teams | Match stats
Live Premier League table | Watch PL highlights for free
Not got Sky? Get Sky Sports or stream with no contract on NOW 📺
Spurs finally stepped up their levels after the interval - aided by the belated introduction of Heung-min Son, Dejan Kulusevski and Djed Spence, who surprisingly began on the bench - but Guardiola's side rode the storm with the help of a sharp stop from Ederson.
After Stefan Ortega's heroics in this fixture last season to help City clinch the title, it was Ederson's turn to deny Son with a super save late on, getting down low to maintain the clean sheet.
City's attacking threat was massively reduced in that second half until Haaland's late surge but their positive response to Sunday's defeat to Liverpool has them back in the Champions League qualifying spots at the expense of Chelsea.
Tottenham - who also threatened through Wilson Odobert after a 39-minute gap between their two first-half efforts - failed to make it four Premier League wins on the spin and sit 13th.
Their Europa League last-16 tie with AZ Alkmaar begins next week and looked to be the priority on Wednesday, given Ange Postecoglou's team selection. This was their second-youngest Premier League XI. His players will need to be sharper from the start and carry more threat in the final third if they are to make a success of that remaining shot at silverware.
Postecogloou: We looked more like ourselves
Tottenham boss Ange Postecoglou:
"First half we were a little bit too eager to get forward, we were too wasteful. City can pick you off at different times. We didn't handle that part of the game well. They scored and had chances to get further ahead. Second half we dominated the game and were pretty relentless. Just missing a goal and fell a bit short.
"It's disappointing to lose. But it did look more like us today. We played aggressive football. We never tapered off at all."
On not starting Son, Kulusevski and Spence: "I can't be sitting here bemoaning not having a squad then not use it. Deki [Kulusevski], Sonny and Djed have played an enormous amount of time. Having them to have a little bit of a breather I thought would be more helpful for us. We're going to have some real options we're going to need."
Guardiola: An incredible result for our Champions League qualification hopes
Man City boss Pep Guardiola:
"The game was open in the second half because we didn't close it in the first. That was the problem that happens many times this season. We've given away an incredible amount of goals. Today fortunately we finish good. For the Champions League qualification it is an incredible result for us."
More like the old Man City? "Never this season will be old City! Old City was too good. But we'll be back."
On Haaland's disallowed goal: "The referee was quicker to disallow it than VAR. Because we won, no matter. Honestly I didn't see the action on TV. It was not clear. Champions league is quicker. If [VAR is slow] it's because they have a lot of doubt. I'm pretty sure if VAR took a lot of time it was because there was a lot of doubt the referee didn't have."
Story of the match in stats...
What's coming up in the Premier League?