Санта-Анна тайно предложил Скотту, армия которого понесла серьезные потери, немедленное перемирие в обмен на 10 миллионов песо, из которых президент-предатель просил немедленно выплатить ему миллион. Скотт сразу же согласился. Оставалось убедить самих мексиканцев, которые не хотели без боя сдавать столицу. Либералы сформировали в Мехико новую армию в 20 тысяч солдат и 100 орудий. По всей стране возникали батальоны местной милиции, готовые к переброске к столице. В августе армия Скотта начала штурм Мехико, который сперва был отбит. Американцы запросили перемирия. Получив подкрепление, в начале сентября захватчики снова пошли на штурм и опять потерпели неудачу. При толковом командовании мексиканцы вполне могли бы полностью разгромить армию Скотта. Но многие генералы-консерваторы отнюдь не хотели победы, которая привела бы к власти их смертельных врагов-либералов. К тому же мексиканцам, не имевшим собственной военной промышленности, катастрофически не хватало боеприпасов: на одну винтовку приходилось в среднем 15 патронов.[16]
Несмотря на героическое сопротивление кадетов военной школы Чапультепека (крепость в одном из районов Мехико), американцы 14 сентября 1847 года заняли Мехико. Муниципалитет оказывал им всяческую помощь. На площадях мексиканской столицы появились виселицы, некоторые католические храмы были превращены в конюшни.
Однако и Тейлор, и Скотт требовали от президента Полка скорейшего формального завершения войны, так как в Мексике развертывалось мощное партизанское движение, не подконтрольное предателю Санта-Анне. В октябре 1847 года партизаны атаковали Пуэблу и убили тамошнего американского коменданта. Из-за партизан снабжение армии Скотта через Веракрус оказалось под угрозой. А иного пути просто не существовало.
2 февраля 1848 года стало самым черным днем мексиканской истории. В селении Гуадалупе-Идальго был подписан продиктованный американцами мирный договор, по которому Мексика за 15 миллионов долларов уступала США более половины своей территории – 2,3 миллиона квадратных километров. Границей между обоими государствами стала река Рио-Гранде, являющаяся ей и до сих пор. Левое крыло либералов в Конгрессе («пурос», т. е. «истинные», «чистые») активно выступало против ратификации договора. Но блок консерваторов и умеренных либералов («модерадос») опасаясь гражданской войны, большинством голосов ратифицировал позорную сделку.