diff --git a/pusher-http-haskell.cabal b/pusher-http-haskell.cabal
--- a/pusher-http-haskell.cabal
+++ b/pusher-http-haskell.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.18
 name:          pusher-http-haskell
-version:       2.1.0.3
+version:       2.1.0.4
 license:       MIT
 license-file:  LICENSE
 copyright:     (c) Will Sewell, 2016
@@ -39,7 +39,7 @@
     default-extensions: OverloadedStrings
     ghc-options:        -Wcompat -Wmissing-signatures -Wall
     build-depends:
-        aeson >=1.0 && <1.6,
+        aeson >=1.0 && <2.1,
         base >=4.11 && <4.16,
         bytestring >=0.10 && <0.12,
         base16-bytestring >=0.1 && <1.1,
diff --git a/src/Network/Pusher/Protocol.hs b/src/Network/Pusher/Protocol.hs
--- a/src/Network/Pusher/Protocol.hs
+++ b/src/Network/Pusher/Protocol.hs
@@ -84,10 +84,7 @@
   parseJSON =
     A.withObject "ChannelsInfo" $ \v -> do
       channelsV <- v .: "channels"
-      A.withObject
-        "HashMap"
-        (fmap ChannelsInfo . mapM A.parseJSON)
-        channelsV
+      ChannelsInfo <$> A.parseJSON channelsV
 
 -- | The possible returned channel attributes when multiple when multiple
 --  channels are queried.
diff --git a/test/Webhook.hs b/test/Webhook.hs
--- a/test/Webhook.hs
+++ b/test/Webhook.hs
@@ -6,6 +6,7 @@
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Char8 as BC
 import qualified Data.HashMap.Strict as HM
+import qualified Data.Text as T
 import Data.Word (Word64)
 import Network.Pusher
   ( WebhookEv (..),
@@ -148,9 +149,9 @@
         { onChannel = "presence-foo",
           clientEvName = "client-event",
           clientEvBody =
-            Just
-              $ A.Object
-              $ HM.fromList [("name", A.String "John"), ("message", A.String "Hello")],
+            Just $
+              A.toJSON
+                (HM.fromList [("name", "John"), ("message", "Hello")] :: HM.HashMap T.Text T.Text),
           withSocketId = "219049.596715",
           withPossibleUser = Just . User $ "sturdy-window-821"
         }
