Adam Rooney sealed Birmingham a Championship play-off date with Blackpool with a 2-0 defeat of Reading.
Rooney scored after being teed-up by Nathan Redmond, before Wade Elliott ensured the win from the spot.
Elliott also missed a late penalty, while Blues keeper Colin Doyle frustrated the champions by keeping out Ian Harte's spot-kick.
Semi-finals first leg
3 May: Cardiff v West Ham (1945 BST)
4 May: Blackpool v Birmingham (1945)
Semi-finals second leg
7 May: West Ham v Cardiff (1630)
9 May: Birmingham v Blackpool (1945)
Pablo Ibanez also headed against a post for Birmingham, who travel to Blackpool for the semi-final first leg on Friday.
While champions Reading brought the curtain down on a highly successful campaign with a rare defeat, Birmingham head into the play-offs in good form.
Chris Hughton's side, who finished fourth in the table, are unbeaten in nine league games.
Substitute Rooney, a 19th-minute replacement for the injured Nikola Zigic, had only been on the pitch a short time when he netted his seventh goal of the season after coolly slotting home following clever play by Redmond.
In an entertaining match, Ibanez twice frustrated Reading's Adam Le Fondre with clearances off the line before half-time.
Ibanez was left cursing himself when he headed against a post following a free-kick by Elliott.
The second-half was just as thrilling as the first 45 minutes.
After Harte's penalty, awarded when Ibanez fouled Alex Pearce, had been saved by Doyle, Elliott doubled Birmingham's advantage from the spot following a handball by Jay Tabb.
There was still time for Elliott to miss the game's third penalty in the dying moments, Adam Federici doing well to keep out Elliott's effort after substitute Brynjar Gunarsson was adjudged to have fouled Rooney.
Birmingham manager Chris Hughton:
"It has been a long hard season. This was our 60th game of the season but we finished very strong and that shows what we have in the team and the locker.
"This is why we are desperate for the lads to finish off the job and I sincerely hope they can."
Reading manager Brian McDermott:
"It was a funny decision in the first half when the referee didn't give us a penalty which would have made 1-1.
"There could have been a sending off and he missed it and then he gave three silly penalties in the second half.
"It is all irrelevant now but I would not have liked to have come here wanting a point and not getting it because of that decision."
- 13 Doyle
- 03 Murphy Booked
- 05 Pablo
- 06 Ramage
- 24 Davies
- 08 N'daw (Burke - 70' )
- 11 Townsend
- 14 Gomis
- 15 Elliott
- 22 Redmond
- 19 Zigic (Rooney - 19' )
- 26 Butland
- 07 Burke
- 10 Huseklepp
- 09 King
- 17 Rooney
- 01 Federici
- 03 Connolly Booked (Cummings - 62' )
- 05 Pearce
- 17 Gorkss
- 23 Harte
- 07 Tabb
- 08 Leigertwood (Gunnarsson - 71' )
- 11 McAnuff
- 19 Robson-Kanu
- 09 Le Fondre
- 18 Church
- 12 McCarthy
- 16 Jo Mills
- 24 Cummings
- 06 Gunnarsson
- 10 Hunt
Live Text Commentary
Full Time The final whistle is blown by the referee.90:00 +3:31 Penalty
Penalty taken by Wade Elliott saved by Adam Federici. Birmingham 2-0 Reading.90:00 +2:06
Hal Robson-Kanu challenges Chris Burke unfairly and gives away a Penalty.90:00 +0:30
Nathan Redmond takes a shot. Save by Adam Federici. Corner taken by Wade Elliott, clearance by Kaspars Gorkss.90:00 +0:07
The ball is swung over by Andros Townsend.87:46
Brynjar Gunnarsson takes a shot from inside the box clearing the bar.87:07
Chris Burke concedes a free kick for a foul on Hal Robson-Kanu. Adam Federici takes the indirect free kick.84:41
Morgaro Gomis concedes a free kick for a foul on Simon Church. Indirect free kick taken by Kaspars Gorkss.84:32
Chris Burke crosses the ball, clearance by Alex Pearce.83:05
Outswinging corner taken from the left by-line by Andros Townsend.82:50
Andros Townsend takes a shot. Jay Tabb gets a block in.82:20
Free kick awarded for a foul by Brynjar Gunnarsson on Andros Townsend. Morgaro Gomis takes the direct free kick.80:10
Brynjar Gunnarsson challenges Nathan Redmond unfairly and gives away a free kick. Colin Doyle takes the indirect free kick.79:47
Jobi McAnuff produces a cross, Pablo Ibanez makes a clearance.79:32
Ian Harte crosses the ball.79:24
Brynjar Gunnarsson crosses the ball, Peter Ramage manages to make a clearance.79:13
Adam Le Fondre produces a cross, clearance made by Wade Elliott.76:58
The ball is crossed by Andros Townsend.75:50
Unfair challenge on Adam Le Fondre by Morgaro Gomis results in a free kick. Shaun Cummings takes the direct free kick.74:15 Goal scored
Goal! - Wade Elliott - Birmingham 2 - 0 Reading Penalty taken right-footed by Wade Elliott and scored. Birmingham 2-0 Reading.
Jay Tabb is penalised for a handball.70:45 Substitution
Substitution (Reading) makes a substitution, with Brynjar Gunnarsson coming on for Mikele Leigertwood.70:45
Free kick awarded for an unfair challenge on David Murphy by Mikele Leigertwood. Indirect free kick taken by Pablo Ibanez.69:36 Substitution
Substitution Chris Burke is brought on as a substitute for Guirane N'Daw.69:00
A cross is delivered by Hal Robson-Kanu.67:43
Free kick awarded for an unfair challenge on Mikele Leigertwood by Morgaro Gomis. Mikele Leigertwood takes the free kick.67:21
Hal Robson-Kanu produces a cross.65:04
Unfair challenge on Guirane N'Daw by Jay Tabb results in a free kick. Colin Doyle takes the indirect free kick.65:04 Penalty
Placed penalty taken by Ian Harte saved by Colin Doyle. Birmingham 1-0 Reading.63:18
Jobi McAnuff crosses the ball, Curtis Davies manages to make a clearance. Outswinging corner taken by Ian Harte from the left by-line, Penalty awarded for an unfair challenge on Alex Pearce by Guirane N'Daw.61:53
Free kick awarded for a foul by Guirane N'Daw on Simon Church. Alex Pearce restarts play with the free kick.61:45
The ball is swung over by Andros Townsend, clearance by Kaspars Gorkss.61:06 Substitution
Substitution Shaun Cummings is brought on as a substitute for Matthew Connolly.60:03
Free kick awarded for an unfair challenge on Guirane N'Daw by Adam Le Fondre. Colin Doyle takes the free kick.59:30
Foul by Peter Ramage on Jay Tabb, free kick awarded. Ian Harte takes the indirect free kick.59:21
The ball is crossed by Wade Elliott, clearance made by Alex Pearce.56:18
The ball is crossed by Ian Harte, clearance by Pablo Ibanez.54:24 Booking
Booking Booking for Matthew Connolly for unsporting behaviour.54:10
Matthew Connolly concedes a free kick for a foul on Andros Townsend. Free kick taken by Wade Elliott.52:53
David Murphy fouled by Simon Church, the ref awards a free kick. Free kick taken by Colin Doyle.49:15
The ball is swung over by Andros Townsend, Wade Elliott takes a shot from close range clearing the crossbar.48:35
Centre by Adam Le Fondre, Jobi McAnuff has a headed effort from close range and clears the bar.45:46
The ball is delivered by Wade Elliott, Alex Pearce manages to make a clearance.45:01
The game restarts for the second half.45:00 +2:22 Half time
Half Time The whistle is blown to end the first half.45:00 +2:09
Hal Robson-Kanu concedes a free kick for a foul on Andros Townsend. Wade Elliott delivers the ball, Headed effort from close in by Pablo Ibanez bounces off the post.45:00 +1:28
Corner from right by-line taken by Andros Townsend.44:37
Outswinging corner taken by Jobi McAnuff from the right by-line, save by Colin Doyle.42:19
Foul by Andros Townsend on Mikele Leigertwood, free kick awarded. The free kick is delivered left-footed by Ian Harte from right wing.42:06
A cross is delivered by Ian Harte, Wade Elliott manages to make a clearance.41:38
Corner taken by Ian Harte, clearance made by Guirane N'Daw.41:11
Adam Le Fondre takes a shot. Pablo Ibanez manages to make a clearance.40:07
The ball is swung over by Ian Harte.36:41 Booking
Booking David Murphy is cautioned.36:28
David Murphy concedes a free kick for a foul on Jobi McAnuff. Free kick taken by Mikele Leigertwood.33:05
Morgaro Gomis gives away a free kick for an unfair challenge on Jay Tabb. Ian Harte takes the free kick. Corner taken by Ian Harte from the left by-line, save by Colin Doyle. Alex Pearce concedes a free kick for a foul on Pablo Ibanez. Colin Doyle restarts play with the free kick.32:45
The ball is crossed by Peter Ramage, Matthew Connolly makes a clearance.31:07
Wade Elliott takes a shot. Blocked by Adam Federici.29:59
Inswinging corner taken left-footed by Andros Townsend from the right by-line, save made by Adam Federici.29:54
The ball is crossed by Adam Rooney, Ian Harte manages to make a clearance.29:07
Nathan Redmond takes a long range shot harmlessly clearing the crossbar.27:20
Foul by Guirane N'Daw on Jay Tabb, free kick awarded. Ian Harte restarts play with the free kick.23:42
Assist by Nathan Redmond.23:42 Goal scored
Goal! - Adam Rooney - Birmingham 1 - 0 Reading Goal scored by Adam Rooney from the edge of the penalty area to the bottom left corner of the goal. Birmingham 1-0 Reading.21:52
A cross is delivered by Morgaro Gomis, clearance made by Mikele Leigertwood.20:52
The ball is swung over by Wade Elliott, Kaspars Gorkss manages to make a clearance.18:35
Close range shot by Simon Church goes over the bar.18:00 Substitution
Substitution (Birmingham) makes a substitution, with Adam Rooney coming on for Nikola Zigic.17:37
Hal Robson-Kanu produces a cross, clearance by Curtis Davies.16:56
Shot from outside the box by Nathan Redmond goes wide right of the target.14:38
Hal Robson-Kanu challenges Wade Elliott unfairly and gives away a free kick. Centre by Andros Townsend, Curtis Davies takes a shot. Save by Adam Federici.12:01
The ball is delivered by Hal Robson-Kanu, save by Colin Doyle.11:21
Guirane N'Daw concedes a free kick for a foul on Jay Tabb. Direct free kick taken by Ian Harte.8:40
The ball is swung over by Hal Robson-Kanu.6:46
Andros Townsend takes a shot. Save made by Adam Federici.3:34
Corner taken left-footed by Ian Harte to the near post, save by Colin Doyle.0:00
The match begins.
Live data and text provided by our data suppliers