Pep Guardiola’s side came from behind to claim a share of the spoils, with Phil Foden’s smart turn and shot levelling the scores after Michail Antonio had put the hosts ahead with a superb overhead kick.
The Hammers had edged the first half, but City completely dominated after Foden’s equaliser and might have won it late on only for Lukasz Fabianski to deny Raheem Sterling and Riyad Mahrez.
Textbook centre-forward play allowed Antonio to open the scoring in sensational fashion as he held off Ruben Dias to emphatically volley Vladimir Coufal’s cross past Ederson.
There had been a question of handball in the build-up, but neither referee Anthony Taylor nor video assistant referee Peter Bankes deemed Tomas Soucek to have committed an offence and West Ham had their own penalty appeals turned away when Eric Garcia made a saving tackle on Antonio.
The home side defended stoically throughout and it reduced City's attacking threat in the early stages.
llkay Gundogan blazed wide after good interplay between Sergio Aguero and Mahrez, but Foden's introduction at the break gave the visitors more joy in the final third.
The youngster made an immediate impact, firing past Fabianski six minutes after coming on following good work down the left from Joao Cancelo.
It was all City from there, but time and time again we were met by a wall of claret and blue shirts.
Guardiola sent on Kevin De Bruyne in a bid to unlock their stubborn defence and when he dispossessed Arthur Masuaku it created a glorious opportunity for Sterling.
The winger received the ball in space on the left of the penalty area, but his first touch was heavy and it gave Fabianski time to rush off his line and block the strike.
Mahrez nearly won the game in the dying seconds with a mazy run and shot but the West Ham 'keeper turned his effort onto the post and behind for a corner.
cancelo carries threat
Cancelo proved a lively presence down City's left-flank in East London.
It was his turn of pace which left Coufal in his wake as he crossed for Foden's equaliser and he caused the West Ham defence problems on numerous occasions.
He flashed a teasing ball across the six-yard box in the first half that evaded everyone until Mahrez tried in vain to steer it towards goal from a tight angle and but for a poor first touch the Portuguese might have had a chance to net the winner after being picked out by Gundogan's wonderful cross-field ball.
The 26-year-old's forward runs gave defenders something to think about throughout the game and it allowed Foden to thrive in the inside left channel in the second half.
Man of the match - Phil Foden
The youngster was the catalyst for City's improved performance in the final third.
He finished with aplomb to prevent this being a more frustrating afternoon and was a constant thorn in the opposition's side as he popped up in the space between defence and midfield.
After struggling to penetrate in the first half, Guardiola's side played with more urgency following Foden's introduction as we seized control of the game.
"We started really well after we conceded a goal from the first action they had.
"After we struggled in the first half. We couldn’t find the pass. We had chances at the end, three or four that we couldn't convert."
What it means
City sit 12th in the Premier League table, one place behind today's opponents on goal difference, but that could change depending on results elsewhere this weekend.
It's a quick turn around for City, who are back in action against Marseille on Tuesday evening. Kick-off in France is at 20:00 (UK).
Our league campaign resumes with an away trip to Sheffield United on Saturday 31 October. Kick-off is at 12:30 (UK).
CITY: Ederson, Walker (Zinchenko 78'), Garcia, Dias, Cancelo, Rodrigo, Gundogan, Bernardo (De Bruyne (68'), Mahrez, Sterling (C), Aguero (Foden 45').
SUBS: Steffen, Stones, Torres, Palmer.
WEST HAM: Fabianski, Coufal, Balbuena, Ogbonna, Cresswell, Masuaku, Bowen (Haller 68'), Soucek, Rice, Fornals, Antonio (Yarmolenko 52').
SUBS: Lanzini, Noble, , Diop, Fredericks, Randolph.