Make error class dedicated for each type of error to make it easier to handle and maintain consistency.
Example of inconsistency are error messages for empty api_key in Client. They raise different message each time it's checked.
Some time it raise "Bad api_key parameter", another time, it's "api_key" or "api_key cannot be empty"