Ở Thăng Long mà không có lương thực, Thoát Hoan lúng túng. Không những thế, quân Đại Việt đã phản công mạnh mẽ và kiểm soát vùng Hải Dương và Hải Phòng đẩy Thoát Hoan vào nguy cơ bị cắt đường về Vạn Kiếp. Tình huống này buộc Thoát Hoan rút quân khỏi Thăng Long quay về Vạn Kiếp. Hai vua Trần một mặt sai Hưng Ninh vương Quốc Tung đến giả vờ hẹn ngày đầu hàng để làm quân Nguyên mất cảnh giác, mặt khác cứ đến đêm lại tung quân đột kích vào Vạn Kiếp. Cuối tháng 3 năm 1288, Thoát Hoan quyết định lui quân khỏi Đại Việt; Ô Mã Nhi được lệnh dẫn một cánh quân thủy rút về trước. Ngày 9 tháng 4, cánh quân này tiến đến sông Bạch Đằng và lọt vào trận địa mai phục của đại quân Việt. Dưới sự chỉ huy trực tiếp của hai vua và Trần Quốc Tuấn, quân Đại Việt đã tiêu diệt toàn bộ cánh thủy quân Nguyên, bắt sống nhiều tướng lĩnh (trong đó có Ô Mã Nhi, Phàn Tiếp, Tích Lệ Cơ) và tịch thu 400 thuyền chiến.