由于組織不當,一切軍政事務皆由王振專斷。戶部尚書王佐請朱祁鎮回京,王振就命其跪在草叢里,直到天黑才能起來。隨征的文武大臣不能參與軍政事務,軍內自相驚亂。明軍剛到達大同,接獲鎮守太監郭敬的密報,也先為誘明軍深入,主動北撤。王振看到瓦剌軍北撤,仍堅持北進,后聞前方慘敗,驚慌撤退。王振本欲使朱祁鎮于退兵之時,經過其家鄉蔚州“駕幸其第”,以顯威風。又怕大軍損壞他的田園莊稼,故行軍路線屢變,導致士兵疲憊不堪。瓦剌大隊追兵追襲而來,明軍三萬騎兵被“殺掠殆盡”。余下部隊移師于土木堡被瓦剌襲擊,明軍戰敗投降,傷亡過半,皇帝朱祁鎮被俘,兵部尚書鄺埜、戶部尚書王佐等大臣戰死。
一夜之間爆發了土木堡之變,皇帝朱祁鎮被俘,瓦剌咄咄逼人。一時間,朝野震驚,全國嘩然,特別是京師,到了人人自危的地步。
面對危機局面,大明朝堂之上圍繞是“戰”還是“遷”展開了紛爭。正統十四年(公元1449年)八月十八日,由孫太后壓陣,監國的郕王朱祁鈺主持召開御前會議,商討對策。翰林院侍講徐珵根據天象的變化,首先提出遷都南京,以避刀兵。南遷之議,頗得一些大臣支持。于謙當即否定了這項提議,他認為皇陵、宗廟、社稷都在京師,不可輕易遷移,且要以宋朝為教訓,指責南遷是亡國之論。
正統年間,皇帝朱祁鎮寵信宦官王振,大臣凡是有不利于王振者,非死即貶。如今朱祁鎮被俘,王振被殺,眾大臣紛紛吐氣揚眉,甚至跪在午門外,要求監國的郕王朱祁鈺懲處王振余黨。這時,王振的黨羽錦衣衛指揮使馬順出來阻擋,當即被憤怒的群臣打死,王振的外甥王山作為王振的同黨,也被當庭打死。郕王朱祁鈺看到眼前的慘狀,有些害怕,欲回宮去,但于謙卻拉住他的衣袖,說王振罪當誅九族,馬順等人罪孽當死,打死他們的群臣應不予追究。朱祁鈺下令馬順等人罪有應得,而眾臣則無罪。
俘虜了朱祁鎮,瓦剌太師也先又憂又喜,喜的是連大明的皇帝都抓住了,憂的是不知道該殺還是該留。倒是他的弟弟伯顏帖木兒提議,大明的皇帝奇貨可居,不如留下他,好向明朝廷索要財物。也先覺得這個提議甚好,便留下朱祁鎮一命。
也先想借被俘的皇帝朱祁鎮敲詐勒索明朝廷,明朝廷中以于謙為首的大臣們建議孫太后,國不可一日無君,更何況在此危難之時。正統十四年(公元1449年)八月二十八日,王文上書朱祁鈺,希望他以江山社稷為重,承繼大統。當時的皇太子朱見深年僅兩歲,為免主少國疑,于謙等大臣稟明孫太后,最終在同年九月擁立朱祁鈺為帝,改元景泰,遙尊朱祁鎮為太上皇。景泰皇帝朱祁鈺下令邊關將領,不得私自與瓦剌接觸,即便是瓦剌用太上皇朱祁鎮的名義,也不用搭理。同時展開大規模的清算行動,諸多的王振黨羽紛紛落馬。
也先惱羞成怒,揮師攻打京師。朱祁鈺任用于謙等人組織京師保衛戰,整肅內部,調集重兵,安定人心。最終在同年十一月擊退瓦剌,取得京師保衛戰的勝利。瓦剌無奈之下,退走大漠。
景泰元年(公元1450)八月,距離太上皇朱祁鎮被俘,將近一年。瓦剌無法從他身上得到好處,又多次被明軍打敗,只好派人南下求和,表示愿意放朱祁鎮回去。瓦剌倒是愿意放人,可是戀棧皇位的景泰皇帝朱祁鈺卻不樂意了。
朱祁鈺派了楊善等人前往查探,誰知楊善乘機迎駕,將太上皇朱祁鎮接了回來。羈留塞北一年之后,朱祁鎮踏上了回鄉之路。八月初二,朱祁鎮從也先的駐地出發,十四日抵達居庸關。十五日,一轎兩騎,悄然進入安定門。北狩一年的太上皇朱祁鎮,終于回來了。
然而,一回到京師的太上皇朱祁鎮,便被他的弟弟朱祁鈺軟禁在了南宮。