diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,3 @@
 import Distribution.Simple
+
 main = defaultMain
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+# 1.2.0
+
+* Support for user-configured content-type in generated client
+
 # 1.1.0
 
 * Relax upper version bounds for `aeson` to `(>= 1.3 && < 1.6)`
diff --git a/servant-jsonrpc-client.cabal b/servant-jsonrpc-client.cabal
--- a/servant-jsonrpc-client.cabal
+++ b/servant-jsonrpc-client.cabal
@@ -1,7 +1,7 @@
 cabal-version:       2.4
 
 name:                servant-jsonrpc-client
-version:             1.1.0
+version:             1.2.0
 author:              Ian Shipman <ics@gambolingpangolin.com>
 maintainer:          Ian Shipman <ics@gambolingpangolin.com>
 
@@ -30,8 +30,8 @@
     Servant.Client.JsonRpc
 
   build-depends:
-      aeson                         >= 1.3          && < 1.6
+      aeson                         >= 1.3          && < 2.3
     , base                          >= 4.11         && < 5.0
-    , servant                       >= 0.14         && < 0.19
-    , servant-client-core           >= 0.14         && < 0.19
-    , servant-jsonrpc               >= 1.0.1        && < 1.2
+    , servant                       >= 0.14         && < 0.21
+    , servant-client-core           >= 0.14         && < 0.21
+    , servant-jsonrpc               >= 1.2          && < 1.3
diff --git a/src/Servant/Client/JsonRpc.hs b/src/Servant/Client/JsonRpc.hs
--- a/src/Servant/Client/JsonRpc.hs
+++ b/src/Servant/Client/JsonRpc.hs
@@ -1,72 +1,84 @@
-{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeApplications      #-}
-{-# LANGUAGE TypeFamilies          #-}
-
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE UndecidableInstances #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
--- |
--- Module: Servant.Client.JsonRpc
---
--- This module provides support for generating JSON-RPC clients in the Servant framework.
---
--- > type Mul = JsonRpc "mul" (Int, Int) String Int
--- > mul :: (Int, Int) -> ClientM (JsonRpcResponse String Int)
--- > mul = client $ Proxy @Mul
---
--- Note: This client implementation runs over HTTP and the semantics of HTTP
--- remove the need for the message id.
-module Servant.Client.JsonRpc
-    ( module Servant.JsonRpc
-    ) where
-
-import           Data.Aeson          (FromJSON, ToJSON)
-import           Data.Proxy          (Proxy (..))
-import           GHC.TypeLits        (KnownSymbol, symbolVal)
-import           Servant.API         (NoContent)
-import           Servant.Client.Core (HasClient (..), RunClient)
-
-import           Servant.JsonRpc
-
+{- |
+Module: Servant.Client.JsonRpc
 
--- | The 'RawJsonRpc' construct is completely transparent to clients
-instance (RunClient m, HasClient m api) => HasClient m (RawJsonRpc api) where
-    type Client m (RawJsonRpc api) = Client m api
-    clientWithRoute pxm _  = clientWithRoute pxm (Proxy @api)
-    hoistClientMonad pxm _ = hoistClientMonad pxm (Proxy @api)
+This module provides support for generating JSON-RPC clients in the Servant framework.
 
+> type Mul = JsonRpc "mul" (Int, Int) String Int
+> mul :: (Int, Int) -> ClientM (JsonRpcResponse String Int)
+> mul = client $ Proxy @Mul
 
-instance (RunClient m, KnownSymbol method, ToJSON p, FromJSON e, FromJSON r)
-    => HasClient m (JsonRpc method p e r) where
+Note: This client implementation runs over HTTP and the semantics of HTTP
+remove the need for the message id.
+-}
+module Servant.Client.JsonRpc (
+  module Servant.JsonRpc,
+) where
 
-    type Client m (JsonRpc method p e r)
-        = p -> m (JsonRpcResponse e r)
+import Data.Proxy (Proxy (..))
+import GHC.TypeLits (KnownSymbol, symbolVal)
+import Servant.API (MimeRender, MimeUnrender, NoContent, (:<|>))
+import Servant.Client.Core (HasClient (..), RunClient)
 
-    clientWithRoute _ _ req p =
-        client req jsonRpcRequest
+import Servant.JsonRpc
 
-        where
-        client = clientWithRoute (Proxy @m) endpoint
-        jsonRpcRequest = Request (symbolVal $ Proxy @method) p (Just 0)
+-- | The 'RawJsonRpc' construct is completely transparent to clients
+instance
+  (RunClient m, HasClient m (RawJsonRpc ctype apiL), HasClient m (RawJsonRpc ctype apiR)) =>
+  HasClient m (RawJsonRpc ctype (apiL :<|> apiR))
+  where
+  type Client m (RawJsonRpc ctype (apiL :<|> apiR)) = Client m (RawJsonRpc ctype apiL :<|> RawJsonRpc ctype apiR)
+  clientWithRoute pxm _ = clientWithRoute pxm (Proxy @(RawJsonRpc ctype apiL :<|> RawJsonRpc ctype apiR))
+  hoistClientMonad pxm _ = hoistClientMonad pxm (Proxy @(RawJsonRpc ctype apiL :<|> RawJsonRpc ctype apiR))
 
-        endpoint = Proxy @(JsonRpcEndpoint (JsonRpc method p e r))
+instance
+  ( RunClient m
+  , KnownSymbol method
+  , MimeRender ctype (Request p)
+  , MimeUnrender ctype (JsonRpcResponse e r)
+  ) =>
+  HasClient m (RawJsonRpc ctype (JsonRpc method p e r))
+  where
+  type
+    Client m (RawJsonRpc ctype (JsonRpc method p e r)) =
+      p -> m (JsonRpcResponse e r)
 
-    hoistClientMonad _ _ f x p = f $ x p
+  clientWithRoute _ _ req p =
+    client req jsonRpcRequest
+   where
+    client = clientWithRoute (Proxy @m) endpoint
+    jsonRpcRequest = Request (symbolVal $ Proxy @method) p (Just 0)
 
+    endpoint = Proxy @(JsonRpcEndpoint ctype (JsonRpc method p e r))
 
-instance (RunClient m, KnownSymbol method, ToJSON p)
-    => HasClient m (JsonRpcNotification method p) where
+  hoistClientMonad _ _ f x p = f $ x p
 
-    type Client m (JsonRpcNotification method p)
-        = p -> m NoContent
+instance
+  ( RunClient m
+  , KnownSymbol method
+  , MimeRender ctype (Request p)
+  ) =>
+  HasClient m (RawJsonRpc ctype (JsonRpcNotification method p))
+  where
+  type
+    Client m (RawJsonRpc ctype (JsonRpcNotification method p)) =
+      p -> m NoContent
 
-    clientWithRoute _ _ req p =
-        client req jsonRpcRequest
-        where
-        client = clientWithRoute (Proxy @m) endpoint
-        jsonRpcRequest = Request (symbolVal $ Proxy @method) p Nothing
+  clientWithRoute _ _ req p =
+    client req jsonRpcRequest
+   where
+    client = clientWithRoute (Proxy @m) endpoint
+    jsonRpcRequest = Request (symbolVal $ Proxy @method) p Nothing
 
-        endpoint = Proxy @(JsonRpcEndpoint (JsonRpcNotification method p))
+    endpoint = Proxy @(JsonRpcEndpoint ctype (JsonRpcNotification method p))
 
-    hoistClientMonad _ _ f x p = f $ x p
+  hoistClientMonad _ _ f x p = f $ x p
