refactor requests to return {:ok, result, response} or {:error, messages, response}