Hm.. I wonder if some of this (parsing the body, producing a nice body, producing the dictionary that is done in `details` should be done in APIError as nice extra helper functions, since APIError knows what to do with itself, rather than UpstreamError having to know everything about APIError?