С точки зрения интегратора, я бы предпочел 1 тип ошибки, которая представляет ошибку на вашем уровне API, а внутри этой ошибки - кодификацию причины ошибки и текстовое описание для предоставления дополнительной информации.В противном случае логика обработки ошибок становится чрезмерно сложной.
В вашем примере, скажем, код ошибки равен 100 (который соответствует ошибке Duplicate Company в элегантной документации API yall), а описание в сообщении - "Couldне добавлять компанию ABC Inc, поскольку она уже существует ".