City's 2022/23 season came to an end at Brunton Park, with a 3-2 aggregate defeat to Carlisle United in the Sky Bet League Two semi-finals.
A 3-1 loss on the day in Cumbria, after extra-time, saw the Bantams miss out on a trip to Wembley, where this afternoon's hosts will meet Stockport County in the final.
United began the game on top, but it was City who had the first real opportunity as Scott Banks cut back for Richie Smallwood, who saw two efforts blocked.
It was then Carlisle's turn to go close, as John-Kymani Gordon cut inside and saw his left-footed effort strike the post.
Only a minute later, the Blues opened the scoring.
Owen Moxon’s shot was parried by Harry Lewis, but Halliday, in his attempts to divert the ball away from Kymani-Gordon, sent into his own net.
The Bantams went in search of an instant response through Banks, who met Andy Cook's knock-down but saw his first header tipped onto the post, and his second saved by Tomas Holy.
A cagey second half ensued, as Paul Simpson's side came close to adding to their advantage, and Smallwood had an opportunity in stoppage time to win it for City.
The game finished 1-0 to the hosts after 90 minutes, however, meaning an extra half-hour would be required.
It was Simpson’s men who found the first goal in extra-time to take a 2-1 lead on aggregate, through a Callum Guy half-volley from 20 yards out.
The Bantams cleared their lines from a corner, but the ball fell to Carlisle's No.8, who rocketed his effort into the back of the net from the edge of the area.
City refused to lie down, and came back out for the second period of extra-time determined to level things back up.
Banks, who proved a threat throughout in Cumbria, beat Paul Huntington to the ball down the left, and crossed it into the path of Matt Derbyshire. Only 29 seconds into the second half of extra-time, the City substitute converted from close range to tie the aggregate score.
The Blues continued to knock on the door, though, and re-took the lead with what proved to be the winner six minutes later.
On-loan Stockport County defender Ben Barclay met Moxon's cross inside the area to head home.
The Bantams continued to fight for an equalising goal, but through all their efforts, they fell short, seeing their 2022/23 season come to an end.
CITY: Harry Lewis, Brad Halliday, Liam Ridehalgh, Richie Smallwood (C), Andy Cook, Jamie Walker (Matt Derbyshire 100’), Alex Gilliead (Ryan East 69’), Scott Banks (Matty Platt 108’), Romoney Crichlow, Sam Stubbs, Adam Clayton (Emmanuel Osadebe 69’). Subs not used: Colin Doyle, Dion Pereira, Thierry Nevers.
GOALS: Derbyshire (106’).
CARLISLE: Tomas Holy, Joel Senior (Jordan Gibson 91’), Jack Armer, Owen Moon, Paul Huntington (C), Callum Guy, Corey Whealan (Jack Robinson 121’), Ben Barclay, Alfie McCalmont (Omari Patrick 70’), John-Kymani Gordon (Taylor Charters 70’), Joe Garner (Ryan Edmonson 65’). Subs not used: Michael Kelly, Kristian Dennis.
GOALS: Halliday (21’ OG), Guy (98’), Barclay (112’).
ATTENDANCE: 15,401 (1,948 City Supporters).