Frenkie de Jong ready to leave £6m on the table to seal dream Man City move
But Pep Guardiola should be relieved to still be in the driving seat after watching his team fall behind to two first-half goals from Jarrod Bowen.
And though they showed plenty of character of their own to stage a dramatic fightback, they will still have cause to bitterly regret Riyad Mahrez’s failure to convert that late penalty opportunity.
Guardiola must have thought his team were over the line when ref Anthony Taylor pointed to the spot after being advised by VAR to take another look at Craig Dawson’s challenge on Gabriel Jesus.
But Mahrez’s effort was at just the right height for Fabianksi to throw himself to his left and beat the ball away.
FREE BETS AND SIGN UP DEALS – BEST NEW CUSTOMER OFFERS
So now it all depends on how quickly Liverpool can recover from Saturday’s FA Cup final exertions as they look to keep their Quadruple dream alive at Southampton on Tuesday.
But it’s not only City and Liverpool who still have it all to play for on the final day.
For if West Ham can win their final match of the season at Brighton and Manchester United lose at Crystal Palace, they can still snatch sixth place and a return to the Europa League.
And even if they have to settle for a place in the Europa Conference League, no-one can take anything away from David Moyes’ men after their sterling efforts this season.
This was certainly a fitting London Stadium send-off for retiring club captain Mark Noble, playing his final home game for the club after 18 years of unstinting service.
And whatever he does in the future is unlikely to match the thrill of Premier League football at its most captivating.
For this was a game which could have quite easily gone either way after Dawson missed a decent opportunity to head West Ham into a fourth-minute lead .
But after that it seemed to be only a matter of time before City turned their possession into goals.
Kevin De Bruyne’s deflected shot was headed just wide by Aymeric Laporte and Kurt Zouma was fortunate to get away with kicking the back of Gabriel Jesus’ standing leg as he tried to turn on a bouncing ball in the six-yard box.
Strangely enough, nobody from City appealed for a foul but it probably would have been a penalty if it had gone to VAR.
Jack Grealish was inches away from capitalising on Fabianski’s failure to hold a De Bruyne cross.
And Dawson was even more relieved when he stuck a boot out to block Rodri’s low shot from the edge of the box and saw his deflection flying just over his own bar.
Fernandinho’s piledriver brushed the bar as it whistled past Fabianski and another Laporte long-range effort was just as close as the visitors queued up to pepper the Hammers goal.
But try as they might, City were unable to force the breakthrough they desperately needed as West Ham somehow stood firm.
And Guardiola’s worst fears became a reality when his team were caught by a 24th-minute sucker punch which left them wondering what had hit them.
Fabianski’s punt upfield was nodded away by Laporte but hooked straight back over the City defence by Pablo Fornals to send Bowen haring in on goal.
It looked as though the England wannabe had been forced too wide as he took the ball around the advancing Ederson, but he squeezed his shot home from the tightest of angles despite the best efforts of Laporte to recover.
It was the first time since their February defeat by Spurs that City had been behind in a Premier League match.
But the expected response to that surprise setback didn’t materialise and in the final minute of the first half they fell further behind to leave themselves with a mountain to climb.
Once again it all started with a Fabianski kick, this time flicked on by Tomas Soucek and then by Michail Antonio.
And once again it was Bowen’s perfectly timed run which allowed him to race clear of City’s makeshift defence before coolly slotting home from the edge of the area.
That was Bowen’s 18th goal of this remarkable season, the first West Ham player to reach that figure since Teddy Sheringham all the way back in 2005.
And Hammers fans will be wondering what more he needs to do get the call-up from Gareth Southgate.
City, though, are not Champions for nothing and within four minutes of the restart they had reduced the arrears when Grealish finally beat Fabianski with another deflection off Dawson.
That was the signal for a ferocious onslaught from a team desperate to keep the destiny of this title race in their own hands.
But that left them wide open to being caught on the counter again and they were lucky to escape when Fernandnho’s dreadful 65th-minute back-pass presented Antonio with a free run on goal.
But the striker made a complete mess of his ambitious attempt to chip Ederson and his effort dropped horribly wide of the target.
It was a huge let-off for City and within four minutes they fully capitalised on their good fortune to secure the equaliser.
Yet again it needed a huge helping hand from their opponents as Vladimir Coufal hurled himself at Riyad Mahrez’s free-kick into the mixer but could only succeed in heading the ball into his own net.
Bardsley pulled away from ref in tunnel as he rages at Spurs penalty decision
There was actually no need for the Czech international to get involved but he clearly didn’t get a shout from any of his team-mates until it was too late.
Cue groans all across Merseyside as scouse party plans were put on hold and the Blue Moon was back on the ascendancy.