Stones sends Man City 13 points clear
Stay tuned with 24 News HD Android App
Pep Guardiola's side are closing in on their third Premier League in four seasons thanks to priceless contributions from their in-form centre-backs.
Ruben Dias, imperious since signing from Benfica in September, put City ahead with his first goal for the club.
Michail Antonio equalised for West Ham just before half-time, but the revitalised Stones bagged the winner with a fine strike after the break.
City are enjoying the longest ever winning streak by an English top-flight team, with 14 of those 20 victories coming in the league to leave their title rivals trailing in their wake.
They are unbeaten in 27 games across all competitions, one match shy of their longest run without defeat under Guardiola in 2017.
Second placed Manchester United and third placed Leicester can close the gap back to 10 points if they beat Chelsea and Arsenal respectively on Sunday.
But it is hard to imagine anyone catching City over the last 12 games of the season.
They survived a stern test from fourth placed West Ham and home games against Wolves and Manchester United next week offer a chance to put the title within touching distance.
Ominously for the rest of the league, Sergio Aguero returned to the City starting line-up for the first time in four months, making just his 11th appearance this season due to injury and illness.
Once he gets his sharpness back, City's record goalscorer will provide a boost to their bid to win an unprecedented quadruple.
West Ham had won seven of their previous nine league games, but even they couldn't halt City's relentless march to the title.
Hammers boss David Moyes compared Guardiola to celebrity chef Heston Blumenthal this week for the way City's manager successfully cooks up winning teams from unlikely ingredients.
Guardiola was at it again as he concocted a tasty dish with seven changes to the team that beat Borussia Monchengladbach in the Champions League last 16 first leg.
After half an hour without a single shot, Dias put City in front from their first incisive attack.
Kevin De Bruyne was the catalyst with a sublime driven cross that picked out Dias's run to the far post, where the centre-back powered his header past Darren Randolph.
There was an unusual lack of cohesion in the City defence at times and Antonio nearly exploited their vulnerability when he met Jesse Lingard's cross with a shot that clipped the outside of the post.
It was a warning that City failed to heed and they were punished in the 43rd minute.
Aguero surrendered possession in midfield, leaving City's back four exposed, and the ball was quickly worked wide to Vladimir Coufal as he surged away from the out of position Oleksandr Zinchenko.
Coufal's cross was diverted goalwards by Lingard before Antonio applied the finishing touch from virtually on the line.
Having conceded a league goal at home for the first time since December, City took a while to shake off the shock.
But Guardiola's men have too much quality to be subdued for long and they sealed the points in the 68th minute.
Zinchenko found Riyad Mahrez on the left and the Algerian's dazzling footwork left Ben Johnson bewildered as he flashed over a cross that Stones met with a superb finish from 12 yards.
Issa Diop nearly provided a sting in the tale when the West Ham defender headed just wide in the final seconds of stoppage-time.