Ryan Allsop 7
Commanded his area really well, but his defence did so well in front of him he barely had anything else to do.
Mahlon Romeo 8
Bombed up that right-hand side at will and did well to keep Birmingham's players quiet. Another stellar display.
READ MORE: Lift-off for Sabri Lamouchi as late goals earn Bluebirds first win in three months
Perry Ng 8
Solid as you'd like. Looks comfortable in that right centre-half role. Had one shot cleared in the first half. Smashed in that stunning free-kick.
Cedric Kipre 8
Very good at both ends of the pitch. Sprawling and stopping crosses at one end and winning headers from set pieces at the other.
Mark McGuinness 9 (star man)
Up against the formidable Lukas Jutkiewicz and gave as good as he got. Not put a foot out of line since re-joining, really. Taken a load off the manager's mind with another giant display.
Callum O'Dowda 8
Much like Romeo, added to City's attack and stuck to his task well in defence. Another who looks comfortable in this role at wing-back. Won the free-kick for Ng's goal.
Andy Rinomhota 9
The best out of the midfielders by some margin. Rushed and harried Blues defenders and found himself wide right at times, whipping in crosses. Ran himself into he floor.
Romaine Sawyers 6
Can't say he did a great deal - or that he impacted the game too much. But it was a game plan which largely bypassed the midfield. Can't say he did a whole lot wrong, either.
Ryan Wintle 7
Much like Sawyers, really, although his inconsistent set-piece delivery did prove frustrating at times, especially with far more bigger targets to hit. That did improve later on, though.
Sory Kaba 8
Won a few duels and had a scissor kick go wide of the post in the first half. Attempted an overhead kick in the second half with similar results. Smashed a volley narrowly over the bar. Looked more dangerous as the game went on.
Kion Etete 8
Another impressive showing from the striker. Did better than his strike partner in holding up the ball and linking up play. Good to see.
Subs:
Callum Robinson (Etete 73) 8 - Flicked a clever ball in for Wickham with his first touch. Then took on a number of players before smashing home a goal of his own.
Connor Wickham (Kaba 73) 7 - Spun a defender with his first touch before smashing a low shot at John Ruddy. Showed composure, which is encouraging. Solid debut outing.
Jaden Philogene (Romeo 73) 7 - Showed his fleetness of foot a couple of times, putting in decent crosses and even having a shot at goal which was blocked.
Joe Ralls (Rinomhota 86) NA - Cannot rate him but made an excellent block late on.
READ NEXT
What just happened in the mini South Wales derby between Swansea City and Cardiff City