It took a freak goal to clinch it, but victory was no more than Birmingham deserved after going to enormous efforts to avoid a fourth consecutive home defeat yesterday.
They had conceded an early goal to which Kevin Keegan's side were still clinging with nine minutes left, but after pummelling City as relentlessly as the torrential rain sweeping St Andrew's, they reaped a deserved reward.
The visitors, without a win in 10 matches now, will rue their misfortune. The game was inside the last three minutes when Richard Dunne's attempt to volley a Robbie Savage free-kick into the recesses of the stands hit Mikael Forssell on the backside and rebounded into the net with the goalkeeper, David Seaman, helplessly stranded near the opposite post.
It was a stroke of generous good luck for Forssell, who wore a sheepish grin as he celebrated his eighth goal since he joined Birmingham on loan from Chelsea.
But having conceded an equaliser, the less outrageous but still fortunate result of another free-kick struck by Savage, Manchester City were always liable to let another goal in as Birmingham maintained the pressure on their defence. Indeed, they are making a habit of letting leads slip; this was the seventh time this season they have been in front but failed to win.
The two managers had different takes on the outcome. Steve Bruce described it as "A fantastic effort, the kind of performance that Birmingham are all about and a game I think we deserved to win".
Keegan was less sure about that. "We defended well, which you have to do when you come here, and I don't think Birmingham deserved to beat us," he said. "The first free-kick hit the post and literally hit Jeff Kenna, and the second was very similar."
Kenna would probably take issue with him. He had only a split-second to react after Savage's 81st-minute free-kick had curled around City's wall and flown back off the woodwork, but it was a deliberate header.
The goal that had looked like winning the points for Keegan's team came after 14 minutes, exposing deficiencies in the Birmingham defence.
Joey Barton and Steve McManaman combined to release Shaun Wright-Phillips on the right and Birmingham, still regrouping after a twice-taken free-kick in midfield, simply were not alive to the movement of City's strikers. To their misfortune, Wright-Phillips supplied just about the perfect cross and the unmarked Robbie Fowler had no more to do than simply stoop to head the ball home.
Fowler's relief was evident in his reaction. At one time, such moments were commonplace for the former Liverpool striker but these are much leaner times. This was only his second Premiership goal this season; the other one, as it happens, came the last time Manchester City won in the top flight, at Southampton on 1 November.
City did not look likely to score again yesterday until 15 minutes from time, when the Birmingham goalkeeper, Maik Taylor, was required to make a double save, diving at full stretch to push away a shot from Nicolas Anelka and scrambling to his feet to deflect the substitute Trevor Sinclair's follow-up wide.
By then, Birmingham had subjected them to a pounding under which they seemed sure to crack. The home side should have had a penalty, too, when Sylvain Distin tripped Forssell in the box. The equaliser was the least they deserved and if they were lucky to take all three points, Bruce was making no apology. "Sometimes you need a bit of luck and we got it today," he said. "Other times it will go against us."
Goals: Fowler (14) 0-1; Kenna (81) 1-1; Forssell (87) 2-1.
Birmingham City (4-4-2): Taylor 6; Kenna 6, Cunningham 5, Upson 5, Lazaridis 6; Johnson 7, Savage 8, Clemence 7, Dunn 7 (Kirovski 6, 60); Morrison 5 (John 6, 60), Forssell 6. Substitutes not used: Bennett (gk), Cissé, Purse.
Manchester City (4-4-2): Seaman 6; Sun Jihai 5, Dunne 6, Sommeil 6, Distin 6; Wright-Phillips 7, Reyna 7, Barton 8, McManaman 6 (Sinclair 6, 69); Anelka 5, Fowler 6 (Sibierski 5, 69). Substitutes not used: Stuhr-Ellegaard (gk), Macken, Tarnat.
Referee: U Rennie (Sheffield) 5.
Bookings: Birmingham: Savage, Upson. Manchester City: Sun Jihai.
Man of the match: Savage.