diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,12 @@
+# Changelog
+
+## 0.2.0.0
+
+  * For failures, provide full `ServantError` instead converting it to `String`.
+  * Add version bounds.
+  * Clean up documentation and meta information.
+  * Add change log.
+
+## 0.1.0.0
+
+  * Initial release.
diff --git a/src/Ziptastic/Client.hs b/src/Ziptastic/Client.hs
--- a/src/Ziptastic/Client.hs
+++ b/src/Ziptastic/Client.hs
@@ -36,42 +36,49 @@
 import           Network.HTTP.Client (Manager)
 import           Servant.API ((:<|>)(..))
 import           Servant.Client
-  ( BaseUrl(..), ClientEnv(..), ClientM, Scheme(..)
+  ( BaseUrl(..), ClientEnv(..), ClientM, Scheme(..), ServantError
   , client, runClientM
   )
 
 import           Ziptastic.Core (ApiKey, ForApi(..), LocaleInfo)
 import qualified Ziptastic.Core as Core
 
+-- | Performs a forward geocode lookup at the given country and postal code.
+--
+-- The success result is a list because in rare cases you may receive multiple records.
+-- If the request fails the result will be 'Left' with an error.
 forwardGeocode :: ApiKey
                -> Manager      -- ^ HTTP connection manager
                -> CountryCode  -- ^ country
                -> Text         -- ^ postal code
-               -> IO (Either String [LocaleInfo])
-forwardGeocode apiKey manager countryCode postalCode = strLeft <$> runClientM func (ClientEnv manager baseUrl)
+               -> IO (Either ServantError [LocaleInfo])
+forwardGeocode apiKey manager countryCode postalCode = runClientM func (ClientEnv manager baseUrl)
   where func = forwardGeocode' (apiClient apiKey) (ForApi countryCode) postalCode
 
 -- | Performs a reverse geocode lookup at the given coordinates using a default radius of 5000 meters.
+--
+-- The success result is a list because in rare cases you may receive multiple records.
+-- If the request fails the result will be 'Left' with an error.
 reverseGeocode :: ApiKey
                -> Manager -- ^ HTTP connection manager
                -> Double  -- ^ latitude
                -> Double  -- ^ longitude
-               -> IO (Either String [LocaleInfo])
+               -> IO (Either ServantError [LocaleInfo])
 reverseGeocode apiKey manager lat long = reverseGeocodeWithRadius apiKey manager lat long 5000
 
 -- | Performs a reverse geocode lookup at the given coordinates using a specified radius in meters.
+--
+-- The success result is a list because in rare cases you may receive multiple records.
+-- If the request fails the result will be 'Left' with an error.
 reverseGeocodeWithRadius :: ApiKey
                          -> Manager -- ^ HTTP connection manager
                          -> Double  -- ^ latitude
                          -> Double  -- ^ longitude
                          -> Int     -- ^ radius (in meters)
-                         -> IO (Either String [LocaleInfo])
-reverseGeocodeWithRadius apiKey manager lat long radius = strLeft <$> runClientM func (ClientEnv manager baseUrl)
+                         -> IO (Either ServantError [LocaleInfo])
+reverseGeocodeWithRadius apiKey manager lat long radius = runClientM func (ClientEnv manager baseUrl)
   where func = reverseGeocodeWithRadius' (mkReverseGeocode (apiClient apiKey) lat long) radius
 
-strLeft :: Show e => Either e a -> Either String a
-strLeft (Left e)  = Left (show e)
-strLeft (Right a) = Right a
 
 data ApiClient = ApiClient
   { forwardGeocode'  :: ForApi CountryCode -> Text -> ClientM [LocaleInfo]
diff --git a/ziptastic-client.cabal b/ziptastic-client.cabal
--- a/ziptastic-client.cabal
+++ b/ziptastic-client.cabal
@@ -1,13 +1,13 @@
 name:                ziptastic-client
-version:             0.1.0.0
+version:             0.2.0.0
 synopsis:
-  Core Servant specification for the Ziptastic API (https://www.getziptastic.com) for doing forward and reverse geocoding.
+  A type-safe client for the Ziptastic API for doing forward and reverse geocoding.
 description:
-  This package provides a type-safe Servant specification for the Ziptastic
-  (https://www.getziptastic.com) API for doing forward and reverse geocoding
-  via zip/postal code, latitude, and longitude.
+  A convenient and type-safe client library for the
+  Ziptastic (<https://www.getziptastic.com/>) API providing forward and reverse
+  geocoding via country, zip code (postal code), latitude, and longitude.
   .
-  This package is maintained by Grafted-In (https://www.graftedin.io/).
+  This package is maintained by Grafted-In (<https://www.graftedin.io/>).
 homepage:            https://github.com/Ziptastic/ziptastic-haskell#readme
 license:             BSD3
 license-file:        LICENSE
@@ -19,23 +19,21 @@
 extra-source-files:  README.md
 cabal-version:       >=1.10
 tested-with:         GHC==8.0.2
+extra-source-files:
+  CHANGELOG.md
+  README.md
 
 library
   hs-source-dirs:  src
   exposed-modules: Ziptastic.Client
   build-depends:
-      base >= 4.7 && < 5
-    , bytestring
-    , aeson
-    , http-api-data
+      base                  >= 4.7 && < 5
     , http-client
-    , http-client-tls
     , iso3166-country-codes
-    , servant
-    , servant-client
+    , servant               >= 0.9 && <= 0.11
+    , servant-client        >= 0.9 && <= 0.11
     , text
-    , tz
-    , ziptastic-core
+    , ziptastic-core        == 0.1.0.1
   default-language: Haskell2010
   other-extensions:
     DataKinds
