Birmingham midfielder Sebastian Larsson netted on his 100th Premier League appearance to help ease his side's relegation fears and drag Sunderland into the survival dogfight.
Larsson broke the deadlock shortly before half-time and then leading scorer Craig Gardner's ninth goal of the campaign wrapped up victory.
Birmingham started brightly and Cameron Jerome outstripped Michael Turner in running onto a throughball from Stuart Parnaby. But, after cutting into the area, his low shot was blocked by the feet of Simon Mignolet. Gardner was first to react to the rebound but his shot was charged down.
A mistake by Barry Ferguson almost proved costly when he was dispossessed by Lee Cattermole, but his shot was blocked by Ben Foster after he had raced off his line. The ball broke into the path of Stephane Sessegnon 12 yards out and his low shot was cleared off the line by Roger Johnson.
Larsson took advantage of a defensive mix-up to give City the lead after 41 minutes. A long clearance from Foster was flicked on by Cameron Jerome and Larsson got in between Phil Bardsley and Mignolet to score.
Foster then did well to turn a curling drive from Asamoah Gyan around the post and Sunderland came within a few inches of equalising when Gyan teed up Jordan Henderson, whose shot flashed past the post. But substitute Alexander Hleb then picked out the unmarked Gardner, whose swerving shot contained too much power for Mignolet to stop.