Gary Bowyer's Bantams ran play-off hopefuls Charlton Athletic close in the capital, but City were unfortunately on the wrong end of a 1-0 scoreline after a tight encounter at The Valley.
Lyle Taylor's goal in the first period proved enough for the Addicks, giving the hosts all three points to further strengthen their bid for an end-of-season play-off spot.
In an eventful opening period, Taylor could have netted again for Charlton.
The home side's top scorer for the season so far hit the post with a drive from outside the box, before then firing over from a brilliant close range position later in the half.
Shortly after Taylor's opener, Igor Vetokele was denied from yards out via a brave block from Richard O'Donnell.
In fairness to the Bantams, though, it certainly wasn't all one-way traffic at the home of the promotion-contenders.
David Ball and Jacob Butterfield were on the end of two great openings for the Bantams as Bowyer's men looked a real threat on the counter-attack in the first half.
After the break, Ball then struck the base of Charlton's far post with an angled drive from inside the area.
Bowyer made three changes to his starting XI for City's trip to the capital.
Defensive duo Paudie O'Connor and Connor Wood were brought into the team, with Butterfield also recalled.
As a result of the changes, former Addick Adam Chicksen and Nathaniel Knight-Percival moved down to the bench.
Mainly due to City's inability to name more than five loan players in their match-day squad because of EFL rules, Huddersfield Town loanee Jack Payne missed out altogether.
With Eoin Doyle in attack and Butterfield, Lewis O'Brien and Ball tasked with supporting him, City were set up with the aim of being difficult to penetrate while posing problems to Charlton at the other end via quick breaks forward.
Charlton skipper Patrick Bauer looped a header over the bar from an early Ben Reeves corner, but City were largely able to restrict the Addicks to little in the way of troubling attacks in the game's early stages.
When the Bantams were able to get possession deep in Charlton territory, they did look like they had the ability to test the hosts' defence.
Doyle was inches away from connecting with a header from a testing cross into the box by Paul Caddis.
Butterfield then saw a strike from inside the box deflected behind by Joe Aribo following O'Brien's centre minutes later.
With former Bantams loanee Josh Cullen pulling the strings in midfield and the talented Taylor leading their attack, Charlton always had the weapons at their disposal to ask questions of the City's backline.
Just under twenty minutes into the contest Charlton took the lead via Taylor's eighteenth goal of profitable campaign so far.
A flowing move from Charlton saw Aribo find Taylor in space in the box and the former AFC Wimbledon attacker coolly picked out the far bottom corner of O'Donnell's goal with a low angled drive.
Charlton could have netted a second in quick succession soon after when Cullen's clipped ball into the box was volleyed across goal by Taylor.
Vetokele looked set to convert from close range but he was superbly denied via a smothering save from O'Donnell.
From possibly going two goals down, City suddenly could levelled things up less than two minutes later.
Butterfield's low cross following a swift attack forward down City's left found Ball in the heart of Charlton's penalty box.
Ball opened his body up to try and side-foot the cross into the bottom corner with his right foot - but the effort bounced agonisingly wide of the far post.
The chances continued to come in the opening half.
Just after the half hour mark Taylor struck for goal from outside the area with a curling effort.
With O'Donnell perhaps unsighted by players in front of him, the rooted 'keeper could only watch on as the effort struck the outside of his far post.
Again, though, City fought back with another chance of their own; one that would arguably prove in the end to be their best of the whole contest.
As Bowyer's side broke forward on the counter-attack - once again down Charlton's right flank - O'Brien's low centre perfectly picked out the run of the on-rushing Butterfield inside the box.
Butterfield seemed likely to smash in a strike for goal, but the midfielder actually elected to cut back inside onto his left foot; something which gave the Charlton defence vital seconds to get back and block the Derby loanee's eventual shot.
With the Bantams continuing to get joy in behind Charlton right back Anfernee Dijksteel, another City counter-attack down their left minutes later resulted in O'Brien firing wide of the far post with a low drive from just outside the box.
For all City's good play on the counter, however, they could - and perhaps should - have found themselves two goals down going into the interval.
A pull-back from the byline by Jonny Williams found an unmarked Taylor in plenty of space just yards out.
With seemingly the whole goal to aim for, Taylor took on the strike first time but his left-footed effort sailed some distance over the bar.
After chances at both ends in an entertaining opening period, City still found themselves well and truly in the match going into the second half.
More than holding their own in the early stages after the break, the Bantams actually could have found themselves level ten minutes into the half.
Ball, who had forced a save out of Charlton 'keeper Dillion Phillips just minutes earlier with a drive from the edge of the box, eventually got on the end of a Caddis cross into the box via touches off O'Brien and Jermaine Anderson.
Ball went for goal with an angled drive from deep inside the box and the low drive crashed against the base of Phillips' far post.
Following Ball's near-miss, the rest of the half seemed to settle into an almost strange pattern; the contest evenly-matched with City sticking with their much-fancied opponents.
Charlton, who would probably agreed they weren't at their best thanks to City's efforts, looked content to sit on their one-lead and try and control the remainder of the match.
From City's point of view, they didn't look too troubled in defence against Charlton's attacks, but they weren't quite able to make themselves much of a force from their own ventures forward either.
A Vetokele header from a Reeves wide free-kick delivery into the box was easily held by O'Donnell. Taylor then fired comfortably over with two separate strikes; the second effort an acrobatic volley from inside the box from sub Tariqe Fosu's cross.
In between those two Taylor efforts, a long range drive from Reeves bounced through harmlessly to O'Donnell.
With fifteen minutes to go, Dijksteel burst past Wood on Chartlon's right wing, but the defender's low centre was bundled wide of the near post by Vetokele.
The Bantams did have one opening seven minutes from the end of normal time when O'Brien, who never stopped running all afternoon, burst forward on another counter-attack.
He fed the ball into the path of Doyle inside the box, but the striker's shot for goal was blocked away by a recovery tackle from Dijksteel.
Having brought on Josh Wright for Hope Akpan minutes earlier, Bowyer made a double change in the eighty-fifth minute; attackers Billy Clarke and George Miller brought on for Butterfield and Anderson.
Frustratingly for Bowyer and the Bantams, the City chief had been trying to bring the pair on earlier but he was forced to delay the change as the ball remained in play for a sustained period of time.
Clarke and Miller tried to get involved in the action following their introduction, but sadly City ran out of time in the contest as Charlton saw out the remaining minutes to claim all three points.
Match line ups, stats and updates from the Charlton fixture can be found via the Match Centre - HERE.