Ở 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 ban đầu sai Hưng Ninh vương đến giả vờ hẹn ngày đầu hàng để địch mất cảnh giác, sau đó mở các cuộc đột kích đêm 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 Đại Việt. Dưới sự chỉ huy trực tiếp của Thánh Tông, Nhân Tông và Hưng Đạo vương, quân Đại Việt đã tiêu diệt toàn bộ cánh quân thủy của địch. Nội Minh tự Đỗ Hành bắt các tướng Ô Mã Nhi và Tích Lệ Cơ nộp cho Thánh Tông. "Đại Việt Sử ký Toàn thư" mô tả Thượng hoàng đã sai người đưa hai tướng Nguyên lên thuyền ngự, rồi "cùng ngồi nói chuyện với chúng và uống rượu vui vẻ".