Во время второго сражения, в Кампании, Ганнибалу не хватило военных сил, и он использовал хитрость – погнал на противника стадо быков, к рогам которых были привязаны горящие факелы. Карфагеняне вновь одержали победу. Рим спешно собрал оставшиеся войска. Произошло сражение при Каннах, в Апулии. Ганнибал снова прибег к отвлекающему маневру, окружил и разбил римское войско, вдвое превосходившее численностью его армию. Италия, Македония и Сицилия встали на сторону Карфагена.
Но вместо того, чтобы захватить Рим, уже готовившийся покориться, Ганнибал заключил мирный договор с римским правителем, которого избрали для защиты города. Как только опасность миновала, правитель Рима уступил власть молодому генералу Сципиону Африканскому.
Сципион понимал, что римская армия не может противостоять Ганнибалу, и решил постепенно захватывать небольшие территории, избегая открытого столкновения. Карфагенянам не хватало войска, чтобы охранять все границы, и Сципион начал один за другим отбирать завоеванные Ганнибалом города. Вскоре он захватил Италию, Галлию, Испанию и со вновь сформированной армией высадился в Африке. Ганнибал пытался вступить в переговоры со Сципионом, но тот не желал заключать мир ни на каких условиях. Произошла битва при Заме. Оставшись без нумидийской конницы, в последний момент перешедшей на сторону римлян, Ганнибал потерпел поражение. Римляне обложили Карфаген огромной контрибуцией сроком на пятьдесят лет.
Сенаторы избрали Ганнибала суффетом. Он пытался управлять разгромленным городом – отменил привилегии знатных семей, потребовал, чтобы лица, занимающиеся финансами, предоставляли ему отчет о своей деятельности. Чиновники с недовольством восприняли этот демократический порыв и обратились к Риму с просьбой сместить царя, «чересчур увлекшегося реформами». Римляне начали преследовать Ганнибала, он бежал из Карфагена в Сирию и стал служить ассирийскому царю Антиоху, который собирался начать войну с римлянами. Однако Антиох не прислушивался к советам Ганнибала и потерпел поражение.
При подписании мирного договора римляне потребовали высылки карфагенянина. Ганнибал нашел убежище у Прусия, царя Вифинии, которому он служил как талантливый управляющий. В 183 г. до н. э. римляне потребовали, чтобы Прусий выдал им Ганнибала. Не имея возможности бежать, Ганнибал выпил яд из своего перстня.