The Bluebirds’ unbeaten run at home continued on Wednesday night as they fought for a point against the Hammers.
The match was a tale of two halves, the first dominated by City - with Jack Moylan's hat-trick - and the second with the visitors battling to level.
The Bluebirds made one change following the away defeat to Wolverhampton Wanderers, with Rubin Colwill making his first start since returning from injury.
The first big chance fell to the visitors. Taty Castellanos stabbed one towards goal, but he couldn’t beat the scrambling Nathan Trott.
Almost immediately after that effort, City went up the other end and the Hammers’ defence gave Jack Moylan too much room on the edge of the box. Super Jack rifled one into the top-left corner to give the Bluebirds the lead after 11 minutes.
There were few chances for either side as the first half wore on, but Will Fish did have a header that went over. A minute later, a perfect ball found Jack Moylan in behind, and he was brought down to win City a penalty.
The man in form stepped up himself and, with no doubt in his mind, sent Hermansen the wrong way to score his eighth league goal of the season and his second on the night.
It wasn’t long before it was three. A corner was whipped in and came off the head of man of the moment, Moylan. He made it three goals to nil and a hat-trick for Super Jack.
The visitors had one effort on goal at the end of the first half, but it was more than comfortable for Trott. City went into the break deservedly three goals up.
Scott Parker used the break to turn to his bench, making three changes for the second half.
Yousef Salech had a chance early in the second period. Moylan laid it off to him and the space opened up for a shot, but it was saved by the Hammers’ goalkeeper.
West Ham got one back after 58 minutes. Jarrod Bowen played a neat ball in behind and Divine Mukasa chipped it in off the post.
It was Parker’s side who once again found the front foot, in almost identical fashion. A Bowen ball over the top this time fell to Arne Engels, who had the space to slot it past Trott.
It was the danger man, Bowen, who found himself on the end of a chance for the Hammers, but this time it was well saved by Trott to keep City ahead.
Unfortunately for the hosts, the lead established in the first half was undone in the second with ten minutes to go. Bowen was at the heart of it again, and his cross found Max Kilman, who levelled the match.
Trott was called into action again to push another effort away as the clock ticked towards 90 minutes and the fourth official indicated that six additional minutes would be played.
West Ham thought they had found the winner when Tomáš Souček’s header looked destined for the bottom-left corner, but Nathan Trott saved his best until last to ensure City held onto the point with a terrific finger-tip save.
Despite losing the lead, City didn't lose heart as every man battled until the final whistle blew, ensuring that the unbeaten home form continues in the Welsh capital.
CARDIFF CITY 3-3 WEST HAM UNITED
Cardiff City: Trott, Scanlon (72' Turnbull), Fish, Bagan, Ng (72' Kpakio), Robertson, R. Colwill (55' J. Colwill), Moylan, Willock (55' Ashford), Tanner, Salech. Subs: Tyrer, Tankiewicz, Moreno, Holt, Perrett
West Ham United: Hermansen, Veltman (88' Souček), Mavropanos, Kilman, Morato (46' Mayers), Engles, Magassa (46' Kante), Bowen, Solomon (68' Autsbo), Mukasa, Castellanos (46' Piroe). Subs: Areola, Scarles, Golambeckis, Orford.