Match ends, West Ham United 1, Manchester City 1.
Michail Antonio scored a wonderful goal to earn his side a hard-earned point against Manchester City, who have now won once in four Premier League games.
Antonio's spectacular acrobatic overhead volley from Vladimir Coufal's cross put the Hammers ahead at London Stadium - and provided another twist in this unpredictable top-flight season.
But substitute Phil Foden equalised for City six minutes after coming on at the start of the second half, producing a really good turn to score following Joao Cancelo's pass.
City dominated possession and sent on Kevin de Bruyne, who had missed the previous two games through injury, but could not find a winner and remain anchored in the bottom half of the table after five games.
In a setback for the visitors, Sergio Aguero did not appear for the start of the second half because of an injury.
Hard-working West Ham building momentum
Having lost their opening two games, West Ham have taken eight points from their past four matches, and can add a well-earned point against City to impressive wins over Leicester and Wolves.
Last Sunday, it was Manuel Lanzini who came up with a brilliant goal as the Hammers battled back from 3-0 down to draw 3-3 at Tottenham.
Lanzini's heroics were not enough to earn him a starting place as Antonio produced a wonder goal, beating Ruben Dias to power an overhead kick beyond Ederson and give David Moyes' side a lead against the run of the play.
City complained there was a handball in the build-up by Tomas Soucek, which VAR checked. The goal would have been ruled out if Soucek, who had kept the ball in play before passing for Coufal to set up Antonio, had been judged to have deliberately handled - but VAR ruled that was not the case.
West Ham worked hard but had to dig deep to secure a first point against City since January 2016.
Keeper Lukasz Fabianski produced two excellent saves to keep out substitute De Bruyne, Raheem Sterling and Riyad Mahrez as City finished strongly.
In the end it was an impressive point for West Ham, who had lost their previous eight games against City by an aggregate score of 25-3.
Everything but the (second) goal
City did everything but score a second goal as they peppered West Ham's net with 14 attempts, and have now dropped seven points from their first five games.
Despite dominating the opening 45 minutes, they struggled to create clear-cut chances and it was only after the introductions of Foden and De Bruyne that Fabianski was seriously tested.
De Bruyne looked sharp for the 22 minutes he was on the pitch, and his return is a huge positive before a packed schedule for Pep Guardiola's side; they do not have a free midweek before the next international break in November.
Several key players are still missing for City, among them Gabriel Jesus, whose return date remains unclear.
In addition, it is unclear if Aguero is facing another spell out after the Argentine suffered what Guardiola described as a "muscular injury".
With injuries impacting, City named an unchanged line-up in consecutive games under Guardiola for the first time since October 2017.
Guardiola said on the eve of this game that he expected "normality" to return to the Premier League, with no runaway winners as has happened in recent seasons when City and Liverpool have gone on to claim the title.
However, the home game with Liverpool on 8 November already looks like a pivotal fixture in terms of City's Premier League ambitions this season.
'I'm thrilled with the points total' - what the managers said
West Ham manager David Moyes, speaking to BBC Match of the Day, on Michail Antonio's goal: "It's the sort of thing as a kid you always wanted to do, to score an overhead kick. It was a terrific goal.
"He has been great for us, he can run, we can play into him - all good teams need a good centre-forward and we have a good centre-forward at the moment.
"I'm thrilled with the points total because I don't think many people would have given us much. We showed real character to stick at it and we're going in the right direction. We want to get better and I hope we will."
Manchester City manager Pep Guardiola: "We started really well. We suffered in the last 10 or 15 minutes of the first half. In the second half, we were better and scored early. We had the chances we needed to win the game.
"I'm not a guy who can predict the future. We've already dropped seven points, which is a lot. But we've struggled a lot for many reasons. We have to take things game by game and see what happens."
Moyes' first point against City for seven years - the best of the stats
- David Moyes registered his first point against Manchester City in the Premier League since March 2013, when he won 2-0 with Everton. Prior to this game, he had lost the past seven against City in the top flight.
- City have won eight points from their five Premier League games this season - their lowest total at this stage of the season since 2014-15.
- West Ham have lost two of their past 10 Premier League games (W4 D4 L2), going unbeaten in each of the past four (W2 D2).
- City have conceded in three consecutive Premier League games in London for the first time since January 2016 under Manuel Pellegrini, when the third game in that run also came against West Ham.
- All 39 of Michail Antonio's Premier League goals have been scored from inside the penalty area.
- City have never lost a match in all competitions in which Phil Foden has scored (W15 D1).
West Ham have a week to prepare for next Saturday's trip to reigning champions Liverpool (17:30 GMT), while Manchester City are in France on Tuesday to face Champions League Group C rivals Marseille (20:00 GMT).
- 5CoufalBooked at 51mins
- 4BalbuenaBooked at 90mins
- 20BowenSubstituted forHallerat 69'minutes
- 30AntonioSubstituted forYarmolenkoat 52'minutes
- 2WalkerSubstituted forZinchenkoat 78'minutes
- 3Rúben Dias
- 20Bernardo SilvaSubstituted forDe Bruyneat 68'minutes
- 10AgüeroSubstituted forFodenat 45'minutes
- 17De Bruyne
- Anthony Taylor
- Shots on Target
Second Half ends, West Ham United 1, Manchester City 1.
Corner, Manchester City. Conceded by Lukasz Fabianski.
Attempt saved. Riyad Mahrez (Manchester City) left footed shot from the left side of the six yard box is saved in the bottom left corner. Assisted by Ilkay Gündogan.
Fabián Balbuena (West Ham United) is shown the yellow card for a bad foul.
Rúben Dias (Manchester City) wins a free kick in the defensive half.
Foul by Fabián Balbuena (West Ham United).
Foul by Phil Foden (Manchester City).
Aaron Cresswell (West Ham United) wins a free kick in the defensive half.
Attempt missed. Rodrigo (Manchester City) right footed shot from outside the box is high and wide to the right.
Attempt saved. Raheem Sterling (Manchester City) right footed shot from the centre of the box is saved in the centre of the goal. Assisted by Kevin De Bruyne.
Foul by Ilkay Gündogan (Manchester City).
Andriy Yarmolenko (West Ham United) wins a free kick in the attacking half.
Riyad Mahrez (Manchester City) wins a free kick in the attacking half.
Foul by Sébastien Haller (West Ham United).
Attempt saved. Pablo Fornals (West Ham United) right footed shot from outside the box is saved in the bottom left corner. Assisted by Andriy Yarmolenko.
Corner, Manchester City. Conceded by Arthur Masuaku.
Hand ball by Tomas Soucek (West Ham United).
Foul by Rúben Dias (Manchester City).
Pablo Fornals (West Ham United) wins a free kick on the left wing.
- Cillian Murphy: Peaky Blinders star shares a chill playlist
- The Yungblud Podcast: Fun, chaos and modern-day dilemmas