Ну, стоит вынести это
if count != 20:
await message.answer(text)
text = ""
из условия, потому что строкой выше count стал равен нулю, нет таких моментов, когда это условие не выполнится.
А вообще, как вариант:
for i in response:
text += f"{i['id']} | {i['name']} | {i['type']} \n"
count += 1
if count == 20:
await message.answer(text)
count = 0
time.sleep(5)
if count != 20:
await message.answer(text)
text = ""
if count != 0:
await message.answer(text)
Потому что если получилось что кол-во элементов делится на 20 ровно, то count в конце цикла будет равен нулю, в противном случае, если элементов допустим 15, то count останется равным 15 (то бишь не равным нулю)