support for content negotiation.
meaningful error messages for 400 & 500 errors.