Город был столицей княжества во главе с двенадцатилетним князем Василием, внуком Мстислава Святославича Черниговского, погибшего в битве на Калке в 1223 году. Козельск был хорошо укреплён: обнесён земляными валами с построенными на них крепостными стенами, но монголы располагали мощной осадной техникой. Наступившая в апреле распутица сделала невозможной помощь Михаила Всеволодовича Черниговского столице одного из подчинённых ему удельных княжеств.
Подойдя к городу, войска монголов потребовали его сдачи. Жители Козельска решили на совете: «Наш Князь младенец, но мы, как правоверные, должны за него умереть, чтобы в мире оставить по себе добрую славу, а за гробом принять венец бессмертия», «главы своя положити за христианскую веру». Началась семинедельная осада.
Арабский историк Рашид-ад-Дин, рассказывая о длительной осаде Козельска, говорил, что город был взят за три дня только тогда, когда через 2 месяца подошли войска Кадана и Бури.
С помощью стенобитных машин-пороков монголам удалось разрушить часть крепостных стен и подняться на вал, где «бысть брань велика и сеча зла». Разгорелась кровавая схватка, «Козляне же ножи резахуся с ними» (судя по всему, имеются ввиду упоминаемые в «Слове о полку Игореве» т. н. засапожные ножи). Судя по всему, осаждённым удалось отбить атаку, потому что сразу вслед за этим было принято решение о вылазке. Козельчанам удалось уничтожить осадные машины и 4000 монголов (в том числе троих сыновей темников), но и сами участники вылазки погибли (во время строительства в конце XIX века железной дороги на Тулу строители обнаружили захоронение из 267 черепов, что примерно соответствует оценке академиком Рыбаковым Б. А. населения русского княжеского замка того времени). Лишившись своих защитников, город пал. Завоеватели не пощадили никого, включая грудных младенцев. Малолетний князь Василий, по этому же летописному преданию утонул в крови.
Батый был взбешен неслыханным сопротивлением козельчан. Он запретил называть город Козельском, а повелел звать его «Злым градом». Козельск отнял у него 7 недель, уступая в длительности сопротивления лишь Киеву. Третье место занимает Торжок, остальные города, включая крупные (Рязань, Владимир, Галич), сопротивлялись не более 6 дней. Из пяти месяцев зимней кампании 1237/38 годов против Руси два месяца Батый потратил на Козельск.