Pep Guardiola's side weren't at our purring best, but would have won far more handsomely but for the heroics of Bluebirds keeper Neil Etheridge.
And, inspired by a man-of-the-match display from Kevin De Bruyne who scored a somewhat fortuitous opener, an eighth successive league victory leaves City a point clear of Liverpool with six games remaining.
City went straight for the kill from the kick-off and went agonisingly close to taking the lead after just 34 second.
Riyad Mahrez fed De Bruyne down the right and the Belgian, looking sharp and hungry, jinked past a defender before sending a low cross into the six-yard box that Gabriel Jesus was an inch away from sliding home.
Mahrez then saw Etheridge do well to stop a low shot that the Cardiff keeper had seen late before the inevitable happened.
Though there was just six minutes on the clock, the visitors must have felt like they’d already been defending for an hour and when Aymeric Laporte’s precision pass picked up De Bruyne’s dart into the box and he collected the ball before firing a shot high into the top right-hand corner from an acute angle - a short he later admitted was a fluke.
It was the perfect start and thoroughly deserved.
Oleksandr Zinchenko limped off on 18 minutes with what looked to be a hamstring issue and was replaced by Kyle Walker
The champions were threatening to run away with the game, but thanks to a number of missed half-chances, Cardiff dug in and without troubling the City defence, remained in the contest.
In fact, with 40 minutes played they were still very much in the game, but a lightning-fast break by the hosts from a Cardiff corner should have seen City double our lead.
In what was four against two at one stage, De Bruyne drove through the centre before teeing up Jesus who saw his shot deflected wide when a return pass to De Bruyne would have almost certainly resulted in a second goal.
It was a let off for the Welsh side, but only a temporary respite as City finally struck again a minute before half-time.
Mahrez sent in a deep cross from the right and Jesus chested the ball into the path of Sane whose low shot gave Etheridge no chance.
Phil Foden, making his first Premier League start, came close to adding a third five minutes after the re-start as he raced clear into the box but Etheridge did well to block the teenager's low drive.
And the chances kept coming with the Bluebirds' goal living a charmed life at times as a De Bruyne cross was almost turned into his own net by Morrison, then Etheridge somehow kept out a Laporte header and then Foden struck the post.
The Cardiff keeper was the main reason City weren't out of sight with 70 minutes gone as he pulled off another fine save from a curling Foden shot.
And the chances kept coming with Mahrez denied what looked like a clear penalty and Jesus' attempt at an extravagant back-heel from De Bruyne's cross on 78 minutes ending with the Brazilian thumping the turf in frustration.
And the visitors almost pulled what would have been a shock goal back on 86 minutes as they broke at speed after a couple of errors saw Nasse faced with just Ederson to beat - but the Brazilian, a bored spectator for the most part, denied the Cardiff forward with a sliding tackle.
"I think everyone was at a high level. Of course Kevin we miss him, maybe results didn't say that.He's an important player for us. First 15 minutes there was incredible movement from him.
(On the injury to Zinchenko) "Doesn’t look good. Right now I do not know but it does not look good for the next games. We’ll see tomorrow. We don’t have many options."
Star man: Kevin De Bruyne
Excellent display from start to finish by KDB who looked back to his devastating best this evening.
What it means…
City go back to the top of the Premier League with six games to go.
It’s off to Wembley again this weekend with City taking on Brighton & Hove Albion in the FA Cup semi-final before another North London trip to Tottenham in the Champions League quarter-final, first leg.