diff --git a/datarobot.cabal b/datarobot.cabal
--- a/datarobot.cabal
+++ b/datarobot.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: d659e0f40eb6ebe5c04a98ee4a259744bfffb63a3269437ce8661118f03926d4
+-- hash: 952473bd73e967bd6225f0b1214d3649bf6b30e1abe118841ce2607df23a4b35
 
 name:                datarobot
-version:             1.0.0
+version:             1.0.1
 synopsis:            Client for DataRobot API
 description:         Client for DataRobot API
 homepage:            https://github.com/orbital/datarobot-haskell#readme
diff --git a/src/DataRobot/Features.hs b/src/DataRobot/Features.hs
--- a/src/DataRobot/Features.hs
+++ b/src/DataRobot/Features.hs
@@ -32,7 +32,7 @@
 
 featuresEndpoint :: URI -> ProjectID -> ModelID -> String
 featuresEndpoint base (ProjectID pid) (ModelID mid) =
-    endpoint base ["projects", cs pid, "models", cs mid, "features"]
+    endpoint base ["projects", cs pid, "models", cs mid, "features/"]
 
 
 
diff --git a/src/DataRobot/PredictResponse.hs b/src/DataRobot/PredictResponse.hs
--- a/src/DataRobot/PredictResponse.hs
+++ b/src/DataRobot/PredictResponse.hs
@@ -8,6 +8,7 @@
   , parseResponse
   , predictionValue
   ) where
+import Control.Applicative ((<|>))
 import Control.Monad.Catch (Exception)
 import Data.Aeson (FromJSON(..), ToJSON, Value(..), decode, defaultOptions, genericParseJSON, withObject, (.:), eitherDecode)
 import Data.Aeson.Types (Options(..), typeMismatch)
@@ -33,9 +34,10 @@
 data PredictError
     = APIError Code Text
     | MissingPrediction
-    deriving (Typeable, Show)
+    deriving (Typeable, Show, Generic)
 
 instance Exception PredictError
+instance ToJSON PredictError
 
 
 -- Datarobot successful response
@@ -55,7 +57,15 @@
 instance FromJSON ResponseFailure where
   parseJSON = genericParseJSON underscorePrefixOptions
 
+-- Datarobot response
+data ResponseData
+  = ResponseData (Either ResponseFailure ResponseSuccess)
+  deriving (Eq, Show)
 
+instance FromJSON ResponseData where
+  parseJSON v = ResponseData <$>
+    ((Right <$> parseJSON v) <|> (Left <$> parseJSON v))
+
 -- A single prediction value
 data PredictionValue = PredictionValue
   { label :: Text
@@ -82,6 +92,7 @@
   , _predictionValues :: Maybe [PredictionValue]
   } deriving (Eq, Show, Generic)
 
+instance ToJSON Prediction
 instance FromJSON Prediction where
   parseJSON = genericParseJSON underscorePrefixOptions
 
@@ -94,10 +105,12 @@
   , predictionValues :: Maybe [PredictionValue]
   } deriving (Show, Eq, Generic)
 
+instance ToJSON PredictResult
 
--- Create a result for a successful response
-responseSuccess :: Float -> ResponseSuccess -> Either PredictError PredictResult
-responseSuccess et rs =
+
+-- Create a result for a data robot response
+handleResponse :: Float -> ResponseData -> Either PredictError PredictResult
+handleResponse et (ResponseData (Right rs)) =
     maybe (Left MissingPrediction) Right $ do
         p <- headMay (_data rs)
         pure PredictResult
@@ -105,6 +118,8 @@
             , predictionValues = _predictionValues p
             , predictionTimeMs = et
             }
+handleResponse _ (ResponseData (Left err)) =
+    responseFailure $ _message err
 
 -- Create a result for a failed response
 responseFailure :: Text -> Either PredictError PredictResult
@@ -114,7 +129,7 @@
 -- This is needed because some of the data is delivered in the body and some is delivered via headers
 parseResponse :: Response ByteString -> Either PredictError PredictResult
 parseResponse r = do
-    either (responseFailure . cs) (responseSuccess tm) $ eitherDecode b
+    either (responseFailure . cs) (handleResponse tm) $ eitherDecode b
     where
       b  = r ^. responseBody
       et = r ^. responseHeader "X-DataRobot-Execution-Time"
