Went back to throwing real 500s
Basically this comes down to not splitting how the app returns errors.
Having errors that are 200s and labled in the body rather than having them be 500s
makes things unclear; for users, and makes it more dificult for them to handle the errors.