Manchester City piled on the pressure and thought they were robbed when Gabriel Jesus went down in the box, but the referee waved away all protests to the bemusement of the travelling fans.
Riyad Mahrez misses from the spot as Manchester City drop points on the road
The mood was high in the London Stadium as the home fans gave a befitting farewell to their long term captain Mark Noble before kickoff. The home side nearly flew into an early lead when Craig Dawson headed a Pablo Fornals cross narrowly wide.
Things soon turned sour for Manchester City as their hosts took the lead. Pablo Fornals played a beautiful pass into the path of Jarrod Bowen, who latched onto the pass before calmly firing past Ederson.
In-form man Gabriel Jesus almost equalized with a moment of brilliance. The Brazilian forward weaved through the defence, but his shot beat both the goalkeeper and the goalpost. Jesus came close again, running through the West Ham defence, but his effort this time cannoned off a fellow Manchester City player.
Just before the end of the first half Manchester City was hit with a sucker punch as West Ham doubled their lead. Michail Antonio played in Jarrod Bowen, who fired in a powerful shot from the edge of the box.
A tale of two halves
Manchester City started the second half on the front foot and soon grabbed one goal back within the first five minutes of the restart. English playmaker Jack Grealish controlled a pass from Rodri before firing past Lukasz Fabianski from the edge of the box.
Bowen played like a man possessed and nearly grabbed a hat-trick in the 60th minute after creating space for himself in the City box, he fired off a powerful shot which narrowly flew past Ederson's right-hand post.
Bowen's miss soon proved costly as Pep Guardiola's men soon levelled the scores. Riyad Mahrez floated in a dangerous freekick, and Czech defender Vladimir Coufal could not adjust in time, accidentally heading the ball past his goalkeeper.
Manchester City continued to pile on the pressure, and in the 83rd minute, they had a chance to win the game. Gabriel Jesus went down in the box for the second time in the match, but unlike the first instance, the referee went to the VAR monitor to review the challenge.
After minimal deliberation, Anthony Taylor pointed to the penalty spot to the joy of Manchester City fans all around the ground. Algerian winger Riyad Mahrez confidently stepped up to take the penalty but saw his brilliantly saved by Lukas Fabianski.
Manchester City still tried to grab a winner, but the West ham defence was not doing them any favours. The result remained the same, and despite the late miss, Manchester City remain four points clear at the top of the Premier League table.
All eyes will now be on Liverpool's game in hand at home to Wolves on May 22 to determine who will lift the prestigious trophy at the end of this remarkable season.