Fernando Llorente's goal, bundled in from a corner and confirmed by VAR 17 minutes from time, gave Mauricio Pochettino's side victory on away goals on a night of tension, attacking quality and defensive frailty that ended City and Pep Guardiola's quest for a historic quadruple of Premier League, Champions League, FA Cup and League Cup.
In a game of relentless drama, City even thought they had won it in injury time only for Raheem Sterling's goal to be ruled out for offside by VAR.
Spurs were protecting a 1-0 lead from the first leg but an opening 21 minutes of chaotic brilliance saw City lead 3-2 on the night as both teams exchanged goals at will.
Sterling lit the blue touchpaper on a thunderous atmosphere when he curled in a precision finish from the edge of the area after only four minutes, but Spurs responded with a double from Son Heung-min as he took advantage of errors by Aymeric Laporte.
Bernardo Silva put City level on the night with a shot that deflected past Hugo Lloris, then Sterling arrived on the end of the outstanding Kevin de Bruyne's cross to score at the far post.
It left City effectively needing to win the second half and they looked on course when Sergio Aguero crashed home their fourth after De Bruyne sliced Spurs open before Llorente, on as a first-half substitute for injured Moussa Sissoko, bundled in from a corner via his hip - the goal given after a VAR check for handball.
In one last extraordinary twist, City thought they had snatched victory and Sterling a hat-trick, but emotions switched instantly as VAR had the final word once again, ruling that Aguero was in an offside position as Bernardo Silva diverted the ball into his path.
Spurs go on to face Ajax at the end of unforgettable encounter that left everyone involved stunned and breathless.