У нас в проекте есть два типа фронтов - одни по коду ответа понимают где ошибка, а другие - по телу.
Например, приходит ошибка валидатора с кодом 422: одни смотрят "422, значит валидатор - парсим его ключи", а другим по-барабану на код ответа, они ищут ключ "error" в ответе.
Основываясь на этих практиках, был разработан пакет
https://github.com/andrey-helldar/api-response#returning-exception-instances, который отдаёт не только корректный код ответа, но и имя эксепшена для понимания какая именно проблема.
Да, некоторые скажут, что эксепшенов может быть тьма и лучше отдавать числовой код а-ля 1000, 2345, 5025 и т.д. С одной стороны, соглашусь, а с другой - эти эксепшены же ещё найти надо. То есть должен быть скрипт, который сканит все загруженные неймспейсы, определяет какие из них являются эксепшенами и собирает массив при том, что результат прошлого поиска не должен перезатираться, иначе в числовых кодах смысла не будет.