Wayne Rooney enjoyed his first away win as Birmingham City manager at the sixth attempt as they edged past Cardiff City.
Blues led in first-half stoppage time as Juninho Bacuna skilfully juggled the ball over goalkeeper Alex Runarsson and into the net - but Cardiff felt their striker Kion Etete had been fouled at the start of the move which led to the goal.
Birmingham had the better chances in the second half and were good value for their victory, just a second in 10 games under Rooney, lifting them to 16th in the Championship.
Cardiff were underwhelming, a third defeat from four seeing them drop to 10th in the table as they missed out on the opportunity to move level on points with the top six.
This was a disappointing night for Erol Bulut's side, whose record of six wins from their last nine matches in the Welsh capital did not seem to make them ideal opponents for a Birmingham team who had lost all five of their away games under Rooney.
The former Manchester United and England striker had picked up just five points from his first nine matches in charge, but his Blues side were much improved at Cardiff City Stadium.
The visitors did not start like a team searching for a first point on the road since August, setting a brisk tempo in the opening exchanges and cutting Cardiff's defence open more than once.
Wales midfielder Jordan James was a bright spark in the Birmingham midfield, finding Siriki Dembele, who turned cleverly in the box and saw a shot saved by Runarsson.
Jay Stansfield then fired wide after a fine through ball from Krystian Bielik, before the hosts gradually started to get a grip on the game with some scoring opportunities of their own.
Yakou Meite posed a threat on the right wing and the Bluebirds were particularly dangerous from set-pieces, with Dimitrios Goutas forcing John Ruddy into an excellent save with one header before flicking another into the path of Mark McGuinness, whose stretched effort went over the crossbar.
Although they had started strongly, Birmingham's goal came slightly against the run of play - and with some controversy.
Etete had the ball near the corner flag when he dribbled towards the Blues' box and fell under a challenge by Dion Sanderson. But referee Stephen Martin waved play on and the away side countered through Dembele, whose incisive pass found Bacuna, who then lifted the ball over the onrushing Runarsson, dummied past Goutas and rolled the ball in from a yard out.
Cardiff were enraged and, from their perspective, that sense of injustice at least injected some life into what had been a desperately flat atmosphere.
The home crowd became subdued again, however, as Birmingham kept Runarsson busy in their search for a second goal.
Stansfield had one effort held by the Arsenal loanee, who was fortunate five minutes later when Emanuel Aiwu fired straight at him from close range after James' crisp volley had been blocked by Jamilu Collins.
Cardiff's attempts to find an equaliser lacked guile and imagination and, despite bringing on several attacking substitutes, they were comfortably repelled by Birmingham.
While the home fans booed referee Martin, the travelling supporters roared in delight at the final whistle and celebrated with chants of "Rooney" as their manager savoured just a second win of his reign.
Cardiff City: Runarsson, Ng (Romeo 13’), McGuinness, Goutas, Collins, Siopis, Wintle © (Bowler 58’), Colwill, Meite (Ugbo 74’), Grant (Tanner 74’), Etete (Robinson 58’). Subs not used: Alnwick, Adams, Panzo, Rinomhota.
Birmingham City: Ruddy, Buchanan, Aiwu, Roberts, Sanderson ©, James, Sunjic, Dembele (Miyoshi 89’), Bielik, Bacuna (Donovan 90+4’), Stansfield (Jutkiewicz 85’). Subs not used: Emmanuel, Etheridge, Gardner, Hogan, Khela, Oakley.