Sergio Aguero gave the Premier League champions the lead in the 33rd minute with a brilliant solo effort but Stoke quickly replied through Peter Crouch’s stooping header.
City played with more purpose after the break and James Milner headed them back in front before a penalty from Aguero and a fine strike from Samir Nasri sealed victory.
The win was City’s first in the league since New Year’s Day but they remain seven points behind Chelsea, who won 1-0 against Everton.
While a successful title defence still looks a tough ask, Manuel Pellegrini will be buoyed by his side’s second-half display – and the imminent return of Yaya Toure and arrival of Wilfried Bony.
The champions had not won in the league while the pair were away at the Africa Cup of Nations and it looked like being another tricky night at Stoke as they were put under plenty of pressure early on.
After Aguero squandered a good opening for the visitors, Stoke had strong appeals for a penalty waved away when Crouch’s header from a corner appeared to hit Milner’s arm.
Crouch then had the ball in the net after a fumble from Joe Hart, only for it to be ruled out for offside, before the Man City keeper beat away a shot from Steven N’Zonzi and Victor Moses smashed the rebound narrowly wide.
Stoke were made to rue the missed chances in the 33rd minute as Aguero scored a superb solo effort, seizing on a long clearance, running at the defence and then finishing with a fine shot across goal.
But City had not yet weathered the storm and Stoke replied almost immediately as Marko Arnautovic curled in an excellent cross from the right and Crouch stooped to head home.
The goal was Crouch’s 45th headed goal in the Premier League and puts him just one behind Alan Shearer’s record.
The visitors thought they had reclaimed the lead just before the interval, only for Aguero to instead be booked for a bizarre handball.
It looked as though the Argentine would finish easily from David Silva’s cross but after heading the ball goalwards he then knocked it in with his hand when it seemed to be going into the net anyway.
Nevertheless, it didn’t take City long in the second half to regain the lead as they came out with more purpose and started to take control of the contest.
Milner, the saviour against Hull at the weekend, made it 2-1 as he rose to meet a Nasri cross 10 minutes after the break.
Pellegrini’s men went further ahead after 70 minutes as Silva proved too tricky for Geoff Cameron and was clearly pulled down in the box.
Aguero clinically dispatched the spot kick and Nasri made sure of victory six minutes later as he drove at the Stoke defence, checked inside on the edge of the area and fired a shot across goal and in at the far post.
City could have had a fifth as Edin Dzeko wasted a good opening while Mame Biram Diouf threatened on the break for Stoke but didn’t test Hart.
Stoke City: Begovic (5), Bardsley (5), Cameron (5), Muniesa (5), Wollscheid (6), Arnautovic (6), Moses (6), N’Zonzi (5), Whelan (5), Crouch (7), Diouf (6).
Subs: Adam (5), Shenton (5), Sidwell (5).
Man City: Hart (6), Kolarov (6), Kompany (6), Mangala (6), Zabaleta (5), Fernando (6), Fernandinho (6), Nasri (7), Silva (7), Aguero (8), Milner (7).
Subs: Lampard (5), Navas (5), Dzeko (5).
Man of the match: Sergio Aguero
See all the Premier League goals on Sky Sports News HQ from midnight – or from 6am on Good Morning Sports Fans.