Darius Vassell cancelled out Carlton Cole's spectacular opener to extend Manchester City's unbeaten league record at Eastlands this season.
Carlton Cole's brilliant strike put West Ham ahead
West Ham had taken the lead when Richard Dunne gave the ball away and Fredrik Ljungberg crossed for Cole to score with a superb acrobatic finish.
City levelled when Vassell prodded home Martin Petrov's vicious low cross.
The Hammers went on to dominate after the break but Joe Hart saved well from Mark Noble and Cole as City held out.
This was the second meeting between these sides in five days, and the third in 15.
Both of those encounters had come in the FA Cup, with City progressing after a replay, and both were tepid affairs which had hardly whet the appetite for another meeting.
But, with West Ham clearly out for revenge, there was a better tempo to this game from the off and Alan Curbishley's side got the start they were looking for too.
When Dunne carelessly ceded possession on the edge of his own box, Noble fed Ljungberg, who fired in a cross that Cole controlled before brilliantly flicking the ball over his head and into the corner of the net.
It was a setback for City but they responded well, and were soon level thanks to Petrov's persistence.
The Bulgarian's corner was only cleared back to him and he fired in another dangerous inswinger that bounced off George McCartney into the path of Vassell, who finished with aplomb from the edge of the six-yard box.
City's home form has kept them within touching distance of the frontrunners this season but, despite some neat touches by the likes of Elano and Stephen Ireland on the edge of the visitors' area, they never really built on their equaliser.
Instead, it was the Hammers who were doing most of the running, with the energetic Noble particularly impressive in midfield.
The England Under-21 star was doing his best to earn his side all three points and went close to restoring their lead when he shot over after making space for himself on the edge of the area.
West Ham were well on top by now and the unsighted Hart did well to push away Hayden Mullins's curling shot soon afterwards.
That gave the visitors further encouragement but they could still not find a way past City's young keeper, who produced two more fine saves before the end.
First he instinctively saved Noble's shot with an outstretched leg then kept out Cole's header at full stretch.
City created nothing in the second half, apart from a Rolando Bianchi shot from distance, and again showed why boss Sven-Goran Eriksson remains desperate to add another striker to his squad during the January transfer window.
A point was enough for Eriksson's side to return to fifth in the Premier League but, after just one win in their last six games, their push for Europe is beginning to stall.
Manchester City boss Sven-Goran Eriksson on goalkeeper Joe Hart:
"He played very well yet again. He has a great future and is a fantastic goalkeeper for his age.
"He is rather big, he is good on crosses and he is very brave.
"The only thing that is missing is experience. You cannot buy that - you have to stand there between the posts and let it happen over the years."
West Ham boss Alan Curbishley:
"I'm a little bit disappointed but it's great credit to the players that they deserved to be the first team to win here this season.
"We have had to chop and change all season but the players have done fantastically well.
"And, if we can carry on being as committed as we are, we'd still like to finish in the top eight."
Man City: Hart, Corluka, Dunne, Richards, Ball, Vassell (Gelson 58), Hamann, Ireland (Geovanni 68), Petrov, Elano (Garrido 78), Bianchi.
Subs Not Used: Isaksson, Onuoha.
Booked: Dunne, Geovanni.
Goals: Vassell 16.
West Ham: Green, Neill, Ferdinand, Upson, McCartney, Ljungberg, Noble, Mullins, Bowyer (Spector 90), Boa Morte (Faubert 71), Cole.
Subs Not Used: Wright, Collins, Reid.
Booked: Neill, Boa Morte, Bowyer, Noble.
Goals: Cole 8.
Ref: Phil Dowd (Staffordshire).
BBC Sport Player Rater man of the match: West Ham's Carlton Cole 8.53 (on 90 minutes).
Please note that you can still give the players marks out of 10 on BBC Sport's Player Rater after the match has finished.