Match ends, Cardiff City 2, West Bromwich Albion 1.
West Bromwich Albion's promotion bid took another hit as they lost at Cardiff City to surrender their place at the top of the Championship to Leeds United.
Callum Paterson pounced on a rebound to put Cardiff in front early in the second half.
The Baggies equalised as Charlie Austin - on as a substitute for less than two minutes - converted a penalty after Jazz Richards had fouled Felipe Krovinovic.
But another substitute, Lee Tomlin, won the game for Cardiff with a beautiful free-kick.
With 15 minutes left on the clock and the ball placed on the edge of the penalty area, Tomlin clipped it delicately into the top corner to seal a victory which lifts Cardiff to 12th in the table, five points adrift of the play-off places.
West Brom's defeat, coupled with Leeds' comeback win over Millwall, means the Baggies drop to second place, two points behind the new leaders.
Slaven Bilic's side had travelled to Wales with the hope of injecting fresh impetus into what had already become a stuttering bid for promotion - but this loss leaves them with only one win from eight league games.
Cardiff's form had also been uninspiring of late, but there were early suggestions they might topple their opponents, Will Vaulks playing a through ball to Robert Glatzel, whose shot was saved by Sam Johnstone.
But clear scoring opportunities or any real moments of attacking quality were rare in a mediocre first half.
That changed less than a minute after the break.
The visitors failed to clear a long throw from Vaulks and, after Sean Morrison's shot was blocked, Paterson was on hand to score from close range.
Just as momentum seemed to be with Cardiff, however, Richards brought Krovinovic down with a needless sliding challenge. It was a daft penalty to concede, and Richards' aberration was punished by Austin, who calmly sent Alex Smithies the wrong way from the spot.
The game was beginning to open up at this point, with both sides sensing a win was in the offing - but a storm was brewing for West Brom.
Just as Leeds were fighting back against Millwall, the Baggies presented Cardiff with an opportunity to snatch victory in the form of a free-kick in a promising position.
Tomlin gladly accepted the invitation, curling the ball perfectly beyond Johnstone's grasp into the top corner.
West Brom had a chance to salvage a point but another of their substitutes, former Cardiff striker Kenneth Zohore, was denied by a brilliant Smithies save.
Cardiff City boss Neil Harris told BBC Sport Wales:
"I'm delighted with the character of the players, the determination to want to succeed and do well. It wasn't pretty at times against a really good footballing side and to limit them to what we did was an outstanding effort by the players.
"We showed there are different ways of winning games. We used set plays, the first one we worked the ball into a good area for Will Vaulks to use his long throw. Paterson's used his goal scoring instincts which I'm really pleased about.
"And then the second one is a moment of magic. To be able to bring a player of Lee's quality off the bench is brilliant for me and he showed his real class.
"It was a workmanlike performance that epitomises us as a club and a group and I'm really proud of the players because we played against a really good West Brom side who have shown their qualities over the season. They might not be on the greatest run but still very difficult to play against."
West Bromwich Albion boss Slaven Bilic said:
"We knew it wasn't going to be a pretty game, they are very direct and very aggressive team. We wanted to stop them creating anything, even from throw-ins. We were pretty solid on paper at least.
"We expected a game of very few chances and knew it wasn't going to be easy to score against them. You can't concede goals like that.
"It's simply not good enough at the moment. Told the guys we need to look at each other, not as soon as possible - but now, to what get back what we had. We don't have it in the moment. We can't say we were unlucky for seven games, can't blame anybody but us. We have to get it back. Simple as that. We weren't good enough.
"I can't be any harder, I spoke quite long in the dressing room. We need it back, we need the team back. We have to get back on winning track, first of all stop conceding goals."
Line-ups
Cardiff
Formation 4-2-3-1
- 12Smithies
- 21Richards
- 4Morrison
- 16NelsonBooked at 65mins
- 3Bennett
- 15Pack
- 6Vaulks
- 20WhyteSubstituted forBacunaat 82'minutes
- 13Paterson
- 33HoilettSubstituted forBambaat 90+4'minutes
- 9GlatzelSubstituted forTomlinat 64'minutes
Substitutes
- 1Etheridge
- 5Flint
- 7Bacuna
- 11Murphy
- 17Tomlin
- 22Bamba
- 42Mayembe
West Brom
Formation 4-2-3-1
- 1Johnstone
- 27O'Shea
- 5BartleySubstituted forFurlongat 77'minutes
- 26Hegazi
- 36Ferguson
- 8Livermore
- 19Sawyers
- 10Phillips
- 7Krovinovic
- 21EdwardsSubstituted forAustinat 59'minutes
- 4Robson-KanuSubstituted forZohoreat 59'minutes
Substitutes
- 2Furlong
- 9Zohore
- 11Brunt
- 14Townsend
- 15Austin
- 18Barry
- 23Bond
- Referee:
- Robert Jones
- Attendance:
- 22,516
Match Stats
- Possession
- Home31%
- Away69%
- Shots
- Home10
- Away16
- Shots on Target
- Home5
- Away3
- Corners
- Home1
- Away7
- Fouls
- Home16
- Away11
Live Text
Post update
Full Time
Second Half ends, Cardiff City 2, West Bromwich Albion 1.
Post update
Foul by Ahmed Hegazi (West Bromwich Albion).
Post update
Callum Paterson (Cardiff City) wins a free kick in the defensive half.
Substitution
Substitution, Cardiff City. Sol Bamba replaces David Junior Hoilett.
Post update
Attempt saved. Kenneth Zohore (West Bromwich Albion) left footed shot from the centre of the box is saved in the centre of the goal. Assisted by Matt Phillips.
Post update
Attempt blocked. Charlie Austin (West Bromwich Albion) right footed shot from the centre of the box is blocked. Assisted by Jake Livermore.
Post update
Corner, West Bromwich Albion. Conceded by Sean Morrison.
Post update
Jake Livermore (West Bromwich Albion) wins a free kick in the defensive half.
Post update
Foul by Callum Paterson (Cardiff City).
Post update
Romaine Sawyers (West Bromwich Albion).
Post update
Curtis Nelson (Cardiff City) wins a free kick in the defensive half.
Post update
Corner, Cardiff City. Conceded by Darnell Furlong.
Post update
Offside, Cardiff City. Alex Smithies tries a through ball, but Callum Paterson is caught offside.
Post update
Foul by Matt Phillips (West Bromwich Albion).
Post update
Joe Bennett (Cardiff City) wins a free kick in the defensive half.
Post update
Dara O'Shea (West Bromwich Albion) wins a free kick in the defensive half.
Post update
Foul by Lee Tomlin (Cardiff City).
Substitution
Substitution, Cardiff City. Leandro Bacuna replaces Gavin Whyte.
Post update
Attempt missed. Lee Tomlin (Cardiff City) left footed shot from the left side of the box is close, but misses to the left. Assisted by Callum Paterson.