Hmmm... I'm not sure if this is just a terrible idea, but would it make sense to have `raise_error` trap APIError, check the code, and call wrap request error if it doesn't match?  That way you only need to care about APIError and not about a RequestError that wrap an APIError?