PEP Guardiola and Manchester City marched on towards the Premier League title with a 20th consecutive victory and defenders John Stones and Ruben Dias their unlikely goal heroes.
It was a sub-par showing from Guardiola’s champions-elect, just three days after a Champions League win in Budapest, but still enough to open a 13-point gap at the top of the table.
Stones was the unlikely match-winner, after 68 minutes, when he swept in a superb 12-yard finish from Riyad Mahrez’s cross.
The win recorded a 27th consecutive unbeaten game for Guardiola’s team, one short of the club record he set himself in 2017.
And against an in-form West Ham team, it was a further indication that even when playing below par as City most surely were here, they are currently unstoppable, certainly at home and possibly even in Europe.
It looked like being yet another routine win for Guardiola’s side when defender Dias headed them into a 29th-minute lead.
The goal came following a cleared City corner which ended with the ball at the feet of Kevin De Bruyne who delivered a breathtaking deep cross with his left foot which was headed home by the Portuguese defender.
But West Ham have recorded their own recent dominant run that has taken them into the thick of the race for a Champions League spot.
And two minutes before the interval, they were level as Michail Antonio became the first opposition player to score at the Etihad since Mo Salah at the start of November.
City contributed to their own downfall when Sergio Aguero gave the ball away from their own throw-in and the Hammers countered through Jesse Lingard and Pablo Fornals.
Their passes played in Vladimir Coufal whose right-wing cross was turned goalwards by Lingard for Antonio to turn the ball in at the far post.
But this was no fluke from David Moyes’ side. Just five minutes earlier, Antonio had scuffed a shot against the foot of the post after Lingard’s cross was missed by Fornals.
Republic of Ireland goalkeeper Darren Randolph had a rare start ahead of the World Cup qualifiers filling in for the injured Lukasz Fabianski but seemed to suffer a knock during the game, although he continued to full-time.
Indeed, they even had a chance in the 94th minute to level when Issa Diop headed a glorious opening wide but City’s relentless run would not be ended.
Ederson 6; Walker 6, Stones 9, Dias 8, Zinchenko 6; De Bruyne 7, Fernandinho 7, Gundogan 6 (Rodri 89); Mahrez 7, Aguero 5 (Jesus 60, 7), Torres 5 (Foden 65, 6). Sterling, Steffen, Laporte, Silva, Mendy, Cancelo.
Randolph 6; Diop 6, Dawson 7, Cresswell 6; Coufal 7, Soucek 6, Rice 6, Johnson 5 (Benrahma 84); Fornals 6, Lingard 8; Antonio 7 (Bowen 84). Balbuena, Lanzini, Noble, Martin, Trott, Odubeko.
M Oliver 7