Famara Diedhiou's fifth goal of the season for Bristol City consigned Birmingham to their first Sky Bet Championship home defeat of the campaign.
The game was a drab affair and only moved up a gear when Diedhiou put the visitors into a 63rd minute lead.
The 25-year-old had an extra special reason to shine against Birmingham as he was involved in an incident playing against the Blues last April which earned him a six match ban at the start of the season.
The tall striker often proved a handful particularly in the second half when the Robins' record signing came up with the goods to pave the way to the Bristol club's third away win in their last five games on the road.
There had been one glimmer of hope for the Robins as early as the 10th minute when Andreas Weimann put in a low drive through a packed defence only to see striker Lukas Jutkiewicz make a desperate goalline clearance.
Jacques Maghoma was a potential threat for Birmingham with his mazy runs down the left flank. On one occasion he weaved his way through several tackles only to run headlong into Bristol's defensive blockade.
This proved to be Birmingham's best opportunity in the initial stages as Bristol were not really troubled by the home attack in which their leading marksman, Jutkiewicz, failed to show any real penetration.
This was demonstrated when Jutkiewicz had one attempt but fired wide, while Harlee Dean produced a smart header which Niki Maenpas flipped over the bar.
The general frustration came to a head in the 29th minute when Lloyd Kelly pushed Maxime Colin into the pitch-side hoardings which earned the Bristol player a stern lecture and a yellow card from referee John Brooks.
The first half meandered to an inconclusive half time whistle before the game belatedly came to life in the 63rd minute when Diedhiou was on hand to head home a right wing corner from substitute Callum O'Dowda.
Birmingham, who suffered a set back in losing their injured skipper, Michael Morrison, strived to get more on the front foot and in the 84th minute Jutkiewicz smashed a header against the woodwork, but they were unable to find an equaliser.
ga('create', 'UA-72310761-1', 'auto', {'name': 'pacontentapi'});
ga('pacontentapi.set', 'referrer', location.origin);
ga('pacontentapi.set', 'dimension1', 'By Press Association Sport staff');
ga('pacontentapi.set', 'dimension2', '7f8c69de-5e12-4bec-a3e0-1264e111fd8e');
ga('pacontentapi.set', 'dimension3', 'paservice:sport,paservice:sport:club-news,paservice:sport:football,paservice:sport:match-reports');
ga('pacontentapi.set', 'dimension6', 'story');
ga('pacontentapi.set', 'dimension7', 'composite');
ga('pacontentapi.set', 'dimension8', null);
ga('pacontentapi.set', 'dimension9', 'sport:football');
ga('pacontentapi.send', 'pageview', { 'location': location.href, 'page': (location.pathname + location.search + location.hash), 'title': 'Diedhiou scores for Bristol City on a bad day for Birmingham'});