Feature/validate exceptions

Throwing exceptions when validation errors are encountered is a cleaner way of dealing with api error responses.