1. Разделение исключений и ошибок.
То, что бек сформировал, что обращаешься к сущности, которой нет (/users/100500), это ошибка, но запрос выполнен успешно = 200.
То, что обратились к /abacaba/blabla, а такого роута вообще нет - это уже ошибка не найденого ресурса 404.
2. Для многих вещей типа ошибки валидации вообще нет статуса. Некоторые использут 422, другие ничего не значащий 400
ну скажем, раньше, когда на JS делали снежинки, не было в принципе понятия - нормально отловить ошибку, потому что чаще всего ИЕ5-6 до них просто не доходил) поэтому было принято отдавать 200 и там писать ок реквест или не ок, но мы в 2020 живем, и теперь это можно делать, если вы мне будуте доказывать, что это не обязательно - то вы не правы по стандарту.