diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,10 @@
 The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
 and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html)
 
+## 0.47.1
+### Fixed
+- Fix serialization bugs for web data types.
+
 ## 0.47.0
 ### Added
 - Support for legacy block endpoints.
diff --git a/haskoin-store-data.cabal b/haskoin-store-data.cabal
--- a/haskoin-store-data.cabal
+++ b/haskoin-store-data.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 6f2e5dde9b64bcd3bb34b392fed519697f053ce2ad24890820c4c016339837f1
+-- hash: eee57844ddf308325bf17f93eb3f4c839c3b3f45c37030619e4d592e98ed5349
 
 name:           haskoin-store-data
-version:        0.47.0
+version:        0.47.1
 synopsis:       Data for Haskoin Store
 description:    Please see the README on GitHub at <https://github.com/haskoin/haskoin-store#readme>
 category:       Bitcoin, Finance, Network
diff --git a/src/Haskoin/Store/Data.hs b/src/Haskoin/Store/Data.hs
--- a/src/Haskoin/Store/Data.hs
+++ b/src/Haskoin/Store/Data.hs
@@ -70,6 +70,7 @@
       -- * Other Data
     , TxId(..)
     , GenericResult(..)
+    , SerialList(..)
     , RawResult(..)
     , RawResultList(..)
     , PeerInformation(..)
@@ -1989,6 +1990,26 @@
             let m = eitherToMaybe . Bytes.Get.runGetS deserialize =<<
                     decodeHex res
             maybe mzero (return . RawResult) m
+
+newtype SerialList a = SerialList{ getSerialList :: [a] }
+    deriving (Show, Eq, Generic, NFData)
+
+instance Semigroup (SerialList a) where
+    SerialList a <> SerialList b = SerialList (a <> b)
+
+instance Monoid (SerialList a) where
+    mempty = SerialList mempty
+
+instance Serial a => Serial (SerialList a) where
+    serialize (SerialList ls) = putList serialize ls
+    deserialize = SerialList <$> getList deserialize
+
+instance ToJSON a => ToJSON (SerialList a) where
+    toJSON (SerialList ls) = toJSON ls
+    toEncoding (SerialList ls) = toEncoding ls
+
+instance FromJSON a => FromJSON (SerialList a) where
+    parseJSON = fmap SerialList . parseJSON
 
 newtype RawResultList a =
     RawResultList
diff --git a/src/Haskoin/Store/WebClient.hs b/src/Haskoin/Store/WebClient.hs
--- a/src/Haskoin/Store/WebClient.hs
+++ b/src/Haskoin/Store/WebClient.hs
@@ -150,30 +150,36 @@
 class (ApiResource a b, Monoid b) => Batchable a b where
     resourceBatch :: Natural -> a -> [a]
 
-instance Batchable GetBlocks [Store.BlockData] where
-    resourceBatch i (GetBlocks hs t) = (`GetBlocks` t) <$> chunksOf i hs
+instance Batchable GetBlocks (Store.SerialList Store.BlockData) where
+    resourceBatch i (GetBlocks hs t) =
+        (`GetBlocks` t) <$> chunksOf i hs
 
-instance Batchable GetBlockHeights [Store.BlockData] where
+instance Batchable GetBlockHeights (Store.SerialList Store.BlockData) where
     resourceBatch i (GetBlockHeights (HeightsParam hs) n) =
-        (`GetBlockHeights` n) <$> (HeightsParam <$> chunksOf i hs)
+        (`GetBlockHeights` n) <$>
+        (HeightsParam <$> chunksOf i hs)
 
-instance Batchable GetTxs [Store.Transaction] where
-    resourceBatch i (GetTxs ts) = GetTxs <$> chunksOf i ts
+instance Batchable GetTxs (Store.SerialList Store.Transaction) where
+    resourceBatch i (GetTxs ts) =
+        GetTxs <$> chunksOf i ts
 
 instance Batchable GetTxsRaw (Store.RawResultList Tx) where
-    resourceBatch i (GetTxsRaw ts) = GetTxsRaw <$> chunksOf i ts
+    resourceBatch i (GetTxsRaw ts) =
+        GetTxsRaw <$> chunksOf i ts
 
-instance Batchable GetAddrsTxs [Store.TxRef] where
-    resourceBatch i (GetAddrsTxs as l) = (`GetAddrsTxs` l) <$> chunksOf i as
+instance Batchable GetAddrsTxs (Store.SerialList Store.TxRef) where
+    resourceBatch i (GetAddrsTxs as l) =
+        (`GetAddrsTxs` l) <$> chunksOf i as
 
-instance Batchable GetAddrsTxsFull [Store.Transaction] where
+instance Batchable GetAddrsTxsFull (Store.SerialList Store.Transaction) where
     resourceBatch i (GetAddrsTxsFull as l) =
         (`GetAddrsTxsFull` l) <$> chunksOf i as
 
-instance Batchable GetAddrsBalance [Store.Balance] where
-    resourceBatch i (GetAddrsBalance as) = GetAddrsBalance <$> chunksOf i as
+instance Batchable GetAddrsBalance (Store.SerialList Store.Balance) where
+    resourceBatch i (GetAddrsBalance as) =
+        GetAddrsBalance <$> chunksOf i as
 
-instance Batchable GetAddrsUnspent [Store.Unspent] where
+instance Batchable GetAddrsUnspent (Store.SerialList Store.Unspent) where
     resourceBatch i (GetAddrsUnspent as l) =
         (`GetAddrsUnspent` l) <$> chunksOf i as
 
diff --git a/src/Haskoin/Store/WebCommon.hs b/src/Haskoin/Store/WebCommon.hs
--- a/src/Haskoin/Store/WebCommon.hs
+++ b/src/Haskoin/Store/WebCommon.hs
@@ -112,7 +112,7 @@
     queryParams (GetBlock h t) = ([ParamBox h], noDefBox t)
     captureParams _ = [ProxyBox (Proxy :: Proxy BlockHash)]
 
-instance ApiResource GetBlocks [Store.BlockData] where
+instance ApiResource GetBlocks (Store.SerialList Store.BlockData) where
     resourcePath _ _ = "/blocks"
     queryParams (GetBlocks hs t) = ([], [ParamBox hs] <> noDefBox t)
 
@@ -128,16 +128,16 @@
 instance ApiResource GetBlockBestRaw (Store.RawResult Block) where
     resourcePath _ _ = "/block/best/raw"
 
-instance ApiResource GetBlockLatest [Store.BlockData] where
+instance ApiResource GetBlockLatest (Store.SerialList Store.BlockData) where
     resourcePath _ _ = "/block/latest"
     queryParams (GetBlockLatest t) = ([], noDefBox t)
 
-instance ApiResource GetBlockHeight [Store.BlockData] where
+instance ApiResource GetBlockHeight (Store.SerialList Store.BlockData) where
     resourcePath _ = ("/block/height/" <:>)
     queryParams (GetBlockHeight h t) = ([ParamBox h], noDefBox t)
     captureParams _ = [ProxyBox (Proxy :: Proxy HeightParam)]
 
-instance ApiResource GetBlockHeights [Store.BlockData] where
+instance ApiResource GetBlockHeights (Store.SerialList Store.BlockData) where
     resourcePath _ _ = "/block/heights"
     queryParams (GetBlockHeights hs t) = ([], [ParamBox hs] <> noDefBox t)
 
@@ -175,7 +175,7 @@
     queryParams (GetTx h) = ([ParamBox h], [])
     captureParams _ = [ProxyBox (Proxy :: Proxy TxHash)]
 
-instance ApiResource GetTxs [Store.Transaction] where
+instance ApiResource GetTxs (Store.SerialList Store.Transaction) where
     resourcePath _ _ = "/transactions"
     queryParams (GetTxs hs) = ([], [ParamBox hs])
 
@@ -188,7 +188,7 @@
     resourcePath _ _ = "/transactions/raw"
     queryParams (GetTxsRaw hs) = ([], [ParamBox hs])
 
-instance ApiResource GetTxsBlock [Store.Transaction] where
+instance ApiResource GetTxsBlock (Store.SerialList Store.Transaction) where
     resourcePath _ = ("/transactions/block/" <:>)
     queryParams (GetTxsBlock h) = ([ParamBox h], [])
     captureParams _ = [ProxyBox (Proxy :: Proxy BlockHash)]
@@ -211,35 +211,35 @@
     resourcePath _ _ = "/transactions"
     resourceBody (PostTx tx) = Just $ PostBox tx
 
-instance ApiResource GetMempool [TxHash] where
+instance ApiResource GetMempool (Store.SerialList TxHash) where
     resourcePath _ _ = "/mempool"
     queryParams (GetMempool l o) = ([], noMaybeBox l <> noDefBox o)
 
-instance ApiResource GetEvents [Store.Event] where
+instance ApiResource GetEvents (Store.SerialList Store.Event) where
     resourcePath _ _ = "/events"
 
 -------------
 -- Address --
 -------------
 
-instance ApiResource GetAddrTxs [Store.TxRef] where
+instance ApiResource GetAddrTxs (Store.SerialList Store.TxRef) where
     resourcePath _ = "/address/" <+> "/transactions"
     queryParams (GetAddrTxs a (LimitsParam l o sM)) =
         ([ParamBox a], noMaybeBox l <> noDefBox o <> noMaybeBox sM)
     captureParams _ = [ProxyBox (Proxy :: Proxy Address)]
 
-instance ApiResource GetAddrsTxs [Store.TxRef] where
+instance ApiResource GetAddrsTxs (Store.SerialList Store.TxRef) where
     resourcePath _ _ = "/address/transactions"
     queryParams (GetAddrsTxs as (LimitsParam l o sM)) =
         ([] , [ParamBox as] <> noMaybeBox l <> noDefBox o <> noMaybeBox sM)
 
-instance ApiResource GetAddrTxsFull [Store.Transaction] where
+instance ApiResource GetAddrTxsFull (Store.SerialList Store.Transaction) where
     resourcePath _ = "/address/" <+> "/transactions/full"
     queryParams (GetAddrTxsFull a (LimitsParam l o sM)) =
         ([ParamBox a], noMaybeBox l <> noDefBox o <> noMaybeBox sM)
     captureParams _ = [ProxyBox (Proxy :: Proxy Address)]
 
-instance ApiResource GetAddrsTxsFull [Store.Transaction] where
+instance ApiResource GetAddrsTxsFull (Store.SerialList Store.Transaction) where
     resourcePath _ _ = "/address/transactions/full"
     queryParams (GetAddrsTxsFull as (LimitsParam l o sM)) =
         ([] , [ParamBox as] <> noMaybeBox l <> noDefBox o <> noMaybeBox sM)
@@ -249,17 +249,17 @@
     queryParams (GetAddrBalance a) = ([ParamBox a], [])
     captureParams _ = [ProxyBox (Proxy :: Proxy Address)]
 
-instance ApiResource GetAddrsBalance [Store.Balance] where
+instance ApiResource GetAddrsBalance (Store.SerialList Store.Balance) where
     resourcePath _ _ = "/address/balances"
     queryParams (GetAddrsBalance as) = ([] , [ParamBox as])
 
-instance ApiResource GetAddrUnspent [Store.Unspent] where
+instance ApiResource GetAddrUnspent (Store.SerialList Store.Unspent) where
     resourcePath _ = "/address/" <+> "/unspent"
     queryParams (GetAddrUnspent a (LimitsParam l o sM)) =
         ([ParamBox a], noMaybeBox l <> noDefBox o <> noMaybeBox sM)
     captureParams _ = [ProxyBox (Proxy :: Proxy Address)]
 
-instance ApiResource GetAddrsUnspent [Store.Unspent] where
+instance ApiResource GetAddrsUnspent (Store.SerialList Store.Unspent) where
     resourcePath _ _ = "/address/unspent"
     queryParams (GetAddrsUnspent as (LimitsParam l o sM)) =
         ([] , [ParamBox as] <> noMaybeBox l <> noDefBox o <> noMaybeBox sM)
@@ -273,7 +273,7 @@
     queryParams (GetXPub p d n) = ([ParamBox p], noDefBox d <> noDefBox n)
     captureParams _ = [ProxyBox (Proxy :: Proxy XPubKey)]
 
-instance ApiResource GetXPubTxs [Store.TxRef] where
+instance ApiResource GetXPubTxs (Store.SerialList Store.TxRef) where
     resourcePath _ = "/xpub/" <+> "/transactions"
     queryParams (GetXPubTxs p d (LimitsParam l o sM) n) =
         ( [ParamBox p]
@@ -281,7 +281,7 @@
         )
     captureParams _ = [ProxyBox (Proxy :: Proxy XPubKey)]
 
-instance ApiResource GetXPubTxsFull [Store.Transaction] where
+instance ApiResource GetXPubTxsFull (Store.SerialList Store.Transaction) where
     resourcePath _ = "/xpub/" <+> "/transactions/full"
     queryParams (GetXPubTxsFull p d (LimitsParam l o sM) n) =
         ( [ParamBox p]
@@ -289,12 +289,12 @@
         )
     captureParams _ = [ProxyBox (Proxy :: Proxy XPubKey)]
 
-instance ApiResource GetXPubBalances [Store.XPubBal] where
+instance ApiResource GetXPubBalances (Store.SerialList Store.XPubBal) where
     resourcePath _ = "/xpub/" <+> "/balances"
     queryParams (GetXPubBalances p d n) = ([ParamBox p], noDefBox d <> noDefBox n)
     captureParams _ = [ProxyBox (Proxy :: Proxy XPubKey)]
 
-instance ApiResource GetXPubUnspent [Store.XPubUnspent] where
+instance ApiResource GetXPubUnspent (Store.SerialList Store.XPubUnspent) where
     resourcePath _ = "/xpub/" <+> "/unspent"
     queryParams (GetXPubUnspent p d (LimitsParam l o sM) n) =
         ( [ParamBox p]
@@ -306,7 +306,7 @@
 -- Network --
 -------------
 
-instance ApiResource GetPeers [Store.PeerInformation] where
+instance ApiResource GetPeers (Store.SerialList Store.PeerInformation) where
     resourcePath _ _ = "/peers"
 
 instance ApiResource GetHealth Store.HealthCheck where
