Cuối năm 1427, vua Minh Tuyên Tông điều viện binh cứu Vương Thông, sai Liễu Thăng mang 10 vạn quân tiến sang từ Quảng Tây; Mộc Thạnh mang 5 vạn quân từ Vân Nam kéo sang. Đây là hai tướng đã từng sang đánh Việt Nam thời nhà Hồ và nhà Hậu Trần. Theo các nhà nghiên cứu, con số 15 vạn của cả hai đạo quân có thể là nói thăng lên, trên thực tế nếu cộng số các đạo quân điều động từ các nơi thì tổng số chỉ có khoảng gần 12 vạn quân và cánh quân chủ lực là của Liễu Thăng.
Nghe tin có viện binh, nhiều tướng muốn đánh để hạ gấp thành Đông Quan. Tuy nhiên, theo ý kiến của Nguyễn Trãi, Lê Lợi cho rằng đánh thành lạ hạ sách vì quân trong thành đông, chưa thể lấy ngay được, nếu bị viện binh đánh kẹp vào thì nguy; do đó ông quyết định điều quân lên chặn đánh viện binh trước để nản lòng địch ở Đông Quan.
Đầu tiên, ông ra lệnh dời người ở những vùng địch đi qua như Lạng Giang, Bắc Giang, Quy Hoá, Tuyên Quang, để đồng không để cô lập địch. Biết cánh Liễu Thăng là quân chủ lực, ông sai Lê Sát, Lưu Nhân Chú, Lê Văn Linh, Đinh Liệt mang quân phục ở Chi Lăng, lại sai Lê Văn An, Lê Lý mang quân tiếp ứng. Đối với cánh quân Mộc Thạnh, ông biết Thạnh là viên tướng lão luyện, sẽ ngồi chờ thắng bại của Liễu Thăng mới hành động nên hạ lệnh cho Phạm Văn Xảo và Trịnh Khả cố thủ không đánh.
Tướng trấn giữ biên giới là Trần Lựu liên tục giả cách thua chạy từ Ải Nam Quan về Ải Lưu rồi lại lui về Chi Lăng. Ngày 18 tháng 9 âm lịch, Thăng đuổi đến Chi Lăng. Trần Lựu lại thua, Thăng đắc thắng mang 100 quân kị đi trước. Ngày 20, Thăng bị phục binh của Lê Sát, Trần Lựu đổ ra chém chết.
Các tướng thừa dịp xông lên đánh địch, giết hơn 1 vạn quân, chém được Lương Minh, Lý Khánh tự vẫn. Tướng Minh còn lại Hoàng Phúc, Thôi Tụ cố kéo về thành Xương Giang thế thủ nhưng đến nơi mới biết thành đã bị quân Lam Sơn hạ, phải đóng quân ngoài đồng không. Lê Lợi sai Trần Nguyên Hãn chặn đường vận lương, sai Phạm Vấn, Nguyễn Xí tiếp ứng cho Lê Sát cùng sáp đánh, giết 5 vạn quân Minh ở Xương Giang. Hoàng Phúc và hơn 3 vạn quân bị bắt, Thôi Tụ không hàng bị giết.
Mộc Thạnh nghe tin Liễu Thăng thua bèn rút chạy. Phạm Văn Xảo, Trịnh Khả đuổi theo chém hơn 1 vạn quân, bắt sống 1000 người ngựa.