Johan Elmander gave the visitors the lead in the 21st minute before poor Bolton defending allowed Cameron Jerome to level matters seven minutes before the break.
Kevin Davies put the Trotters back ahead in the 66th minute after going down under a clumsy challenge from Curtis Davies but Birmingham levelled again with 10 minutes to go thanks to Kevin Phillips' stunning looping volley.
Bolton were to have the final say in the last minute, however, when Kevin Davies headed back across goal for Chung-Yong Lee to nod in from six yards and send the Trotters to Wembley.
Birmingham were lacking seven regular first teamers through injury and also lost Barry Ferguson and Martin Jiranek during the first half.
Former Birmingham midfielder Fabrice Muamba had the first attempt on goal but his low drive did not trouble Ben Foster.
Blues started to get a foothold in the game and Jussi Jaaskelainen had to grab hold of a Davies header from Larsson's inswinging free-kick.
Martin Petrov then found himself in yards of space on the left of the Birmingham box but his shot was blocked by Stuart Parnaby.
Jerome's pace took him behind the Bolton defence when running onto Larsson's pass but his first touch was woeful.
Gretar Steinsson became the first player to be booked after 20 minutes for bringing down Phillips.
A minute later Elmander put Bolton in front. Muamba won the ball in the air and Klasnic's flick-on let in Elmander who was unchallenged by Davies and Jiranek before he drilled a low left-footed shot past Foster. It was his 11th goal of the campaign.
Birmingham suffered a double setback with Ferguson and Jirnaek both limping out of the action to be replaced by Liam Ridgewell and Nathan Redmond.
Jean Beausejour, on target in the last two games, then had a shot deflected for a corner after good play by David Murphy.
Soon after Jaaskelainen came racing out of his area to clear from Jerome. But after 38 minutes the striker brought Birmingham back on level terms.
The former Cardiff player won the ball in the air and David Wheater's clearance dropped back into his path. Jerome needed no second invitation to hammer a low shot past Jaaskelainen and into the corner of the net.
Birmingham started the second period in confident mood and appealed in vain for a penalty when Jaaskelainen came to the edge of his box and challenged Jerome after a fine pass from Redmond.
But referee Phil Dowd, who was up with play, correctly opted to award a corner after spotting the goalkeeper got to the ball first.
Bolton substitute Lee came to Bolton's rescue when he cleared off the line from Murphy following a corner by Larsson.
Kevin Davies had the ball in the net after 64 minutes but was clearly offside.
A minute later,though, the Bolton striker restored his side's lead. He was brought down in the box by Curtis Davies and got up to send Foster the wrong way from the spot.
Phillips came close to equalising when his shot from a narrow angle crashed against the post with Jaaskelainen beaten.
The game was now wide open and Foster produced a fine save to deny Elmander after he broke clear of the home defence.
Then with 10 minutes left a superb strike by Phillips brought Birmingham level.
Redmond won the ball in the air and Phillips turned on the edge of the box and volleyed over Jaaskelainen.
Then in the final minute Lee sent the 4,300 Bolton fans wild with delight as his header beat Foster to settle the tie.