diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,11 @@
+# Version [0.12.2.0](https://github.com/blockfrost/blockfrost-haskell/compare/api-0.12.1.0...api-0.12.2.0) (2025-04-07)
+
+* Additions
+  * `/blocks/:hash_or_number/txs/cbor`
+    and `/blocks/latest/txs/cbor` endpoints with `[TxHashCBOR]` data type [#73](https://github.com/blockfrost/blockfrost-haskell/pull/73) [#75](https://github.com/blockfrost/blockfrost-haskell/pull/75)
+* Removal of problematic overlapping `From/ToJSON`
+  instances on `Mabye PoolMetadata` [#72](https://github.com/blockfrost/blockfrost-haskell/pull/72)
+
 # Version [0.12.1.0](https://github.com/blockfrost/blockfrost-haskell/compare/api-0.12.0.0...api-0.12.1.0) (2024-09-25)
 
 * Fix return type of `/txs/:hash/cbor` endpoint from `[TransactionCBOR]` to `TransactionCBOR`.
diff --git a/blockfrost-api.cabal b/blockfrost-api.cabal
--- a/blockfrost-api.cabal
+++ b/blockfrost-api.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                blockfrost-api
-version:             0.12.1.0
+version:             0.12.2.0
 synopsis:            API definitions for blockfrost.io
 description:         Core types and Servant API description
 homepage:            https://github.com/blockfrost/blockfrost-haskell
diff --git a/src/Blockfrost/API/Cardano/Blocks.hs b/src/Blockfrost/API/Cardano/Blocks.hs
--- a/src/Blockfrost/API/Cardano/Blocks.hs
+++ b/src/Blockfrost/API/Cardano/Blocks.hs
@@ -32,6 +32,16 @@
         :> Pagination
         :> Sorting
         :> Get '[JSON] [TxHash]
+      , _latestTxsCBOR
+        :: route
+        :- Summary "Latest transactions with CBOR data"
+        :> Description "Return the transactions within the latest block, including CBOR representations."
+        :> "latest"
+        :> "txs"
+        :> "cbor"
+        :> Pagination
+        :> Sorting
+        :> Get '[JSON] [TxHashCBOR]
      , _block
         :: route
         :- Summary "Latest block transactions"
@@ -79,6 +89,16 @@
         :> Pagination
         :> Sorting
         :> Get '[JSON] [TxHash]
+      , _blockTxsCBOR
+        :: route
+        :- Summary "Block transactions with CBOR data"
+        :> Description "Return the transactions within the block, including CBOR representations."
+        :> Capture "hash_or_number" (Either Integer BlockHash)
+        :> "txs"
+        :> "cbor"
+        :> Pagination
+        :> Sorting
+        :> Get '[JSON] [TxHashCBOR]
       , _blockAffectedAddresses
         :: route
         :- Summary "Addresses affected in a specific block"
diff --git a/src/Blockfrost/API/Cardano/Pools.hs b/src/Blockfrost/API/Cardano/Pools.hs
--- a/src/Blockfrost/API/Cardano/Pools.hs
+++ b/src/Blockfrost/API/Cardano/Pools.hs
@@ -68,7 +68,7 @@
         :> Description "Stake pool registration metadata."
         :> Capture "pool_id" PoolId
         :> "metadata"
-        :> Get '[JSON] (Maybe PoolMetadata)
+        :> Get '[JSON] PoolMetadataResponse
     , _getPoolRelays
         :: route
         :- Summary "Stake pool relays"
diff --git a/src/Blockfrost/Types/Cardano/Blocks.hs b/src/Blockfrost/Types/Cardano/Blocks.hs
--- a/src/Blockfrost/Types/Cardano/Blocks.hs
+++ b/src/Blockfrost/Types/Cardano/Blocks.hs
@@ -2,6 +2,7 @@
 
 module Blockfrost.Types.Cardano.Blocks
   ( Block (..)
+  , TxHashCBOR (..)
   ) where
 
 import Data.Text (Text)
@@ -12,6 +13,7 @@
 import Servant.Docs (ToSample (..), singleSample)
 
 import Blockfrost.Types.Shared
+import Blockfrost.Types.Cardano.Transactions (TransactionCBOR(..))
 
 -- | Information about a block
 data Block = Block
@@ -73,3 +75,30 @@
       o
       "transactions"
     pure (addr, txs)
+
+-- | Transaction @TxHash@ to its respective @TransactionCBOR@ wrapper.
+-- Intentionally not a Map to preserve ordering
+newtype TxHashCBOR = TxHashCBOR { getTxHashCBOR :: (TxHash, TransactionCBOR) }
+  deriving stock (Show, Eq, Generic)
+
+instance ToSample TxHashCBOR where
+  toSamples _ =
+      singleSample
+    $ TxHashCBOR
+        ( TxHash "6f044565223657acdde3c569d6555b2edbd71bc2bfb4df0b1cce0ef805f606d4"
+        , TransactionCBOR "84a300d9010281825820787b3a89b1d32806968b867a4a31f1e33054b573821293a1c915559e34810a3602018282583900bd71b1547ab3ec95725100d0c0fb06da5ffae9cf54fb97e0f52fb9cab51adb784c4997143ba56990c0584111137d02898950245f5db5e2631a05f5e10082583900bd71b1547ab3ec95725100d0c0fb06da5ffae9cf54fb97e0f52fb9cab51adb784c4997143ba56990c0584111137d02898950245f5db5e2631b0000001588345487021a0002922da100818258206a7884092084c018eed71f9df5ff61935ab021f578b2d57d8ffb0b0e8ac0ea285840a2045496acf31996336ef187f9f3c2bd24c24995b540541586cbbc73a1550a50c2fdc3d4b99766c2823eb520866b03a38a60a4eb94f24994f441fb2852447c0ef5f6"
+        )
+
+instance ToJSON TxHashCBOR where
+  toJSON (TxHashCBOR (k, v)) =
+    object
+      [ "tx_hash" .= toJSON k
+      , "cbor" .= toJSON v
+      ]
+
+instance FromJSON TxHashCBOR where
+  parseJSON =
+    withObject "txHashCBOR" $ \to -> do
+      th <- to .: "tx_hash"
+      cb <- TransactionCBOR <$> to .: "cbor"
+      pure $ TxHashCBOR (th, cb)
diff --git a/src/Blockfrost/Types/Cardano/Pools.hs b/src/Blockfrost/Types/Cardano/Pools.hs
--- a/src/Blockfrost/Types/Cardano/Pools.hs
+++ b/src/Blockfrost/Types/Cardano/Pools.hs
@@ -6,6 +6,7 @@
   , PoolInfo (..)
   , PoolHistory (..)
   , PoolMetadata (..)
+  , PoolMetadataResponse (..)
   , PoolRelay (..)
   , PoolDelegator (..)
   , PoolUpdate (..)
@@ -164,18 +165,6 @@
   deriving (FromJSON, ToJSON)
   via CustomJSON '[FieldLabelModifier '[StripPrefix "_poolMetadata", CamelToSnake]] PoolMetadata
 
--- We need this more specific
--- instance since API returns
--- empty object if there's no metadata
-instance {-# OVERLAPS #-} ToJSON (Maybe PoolMetadata) where
-  toJSON Nothing   = object mempty
-  toJSON (Just pm) = toJSON pm
-  toEncoding Nothing   = pairs mempty
-  toEncoding (Just pm) = toEncoding pm
-instance {-# OVERLAPS #-} FromJSON (Maybe PoolMetadata) where
-  parseJSON x | x == object [] = pure Nothing
-  parseJSON x = Just <$> parseJSON x
-
 instance ToSample PoolMetadata where
   toSamples = pure $ singleSample samplePoolMetadata
 
@@ -191,6 +180,23 @@
     , _poolMetadataDescription = Just "The best pool ever"
     , _poolMetadataHomepage = Just "https://stakentus.com/"
     }
+
+-- | Actual response about stake pool metadata.
+newtype PoolMetadataResponse = PoolMetadataResponse { getMetadata :: Maybe PoolMetadata }
+  deriving stock (Show, Eq, Generic)
+
+-- NOTE: Manual instance to produce empty object if there is no metadata
+instance ToJSON PoolMetadataResponse where
+  toJSON (PoolMetadataResponse Nothing) = object mempty
+  toJSON (PoolMetadataResponse (Just pm)) = toJSON pm
+
+  toEncoding (PoolMetadataResponse Nothing) = pairs mempty
+  toEncoding (PoolMetadataResponse (Just pm)) = toEncoding pm
+
+-- NOTE: Manual instance to accept empty objects as no metadata.
+instance FromJSON PoolMetadataResponse where
+  parseJSON x | x == object [] = pure $ PoolMetadataResponse Nothing
+  parseJSON x = PoolMetadataResponse . Just <$> parseJSON x
 
 -- | Relays of a stake pool
 data PoolRelay = PoolRelay
diff --git a/test/Cardano/Blocks.hs b/test/Cardano/Blocks.hs
--- a/test/Cardano/Blocks.hs
+++ b/test/Cardano/Blocks.hs
@@ -22,11 +22,17 @@
     `shouldBe`
     Right blockExpected
 
-  it "parses afftected addresses sample" $ do
+  it "parses affected addresses sample" $ do
     eitherDecode affectedAddrsSample
     `shouldBe`
     Right affectedAddrsExpected
 
+  it "parses transactions with cbor sample" $ do
+    eitherDecode txHashesCBORSample
+    `shouldBe`
+    Right txHashesCBORExpected
+
+
 blockSample = [r|
 {
     "time": 1641338934,
@@ -96,4 +102,45 @@
      [TxHash "1a0570af966fb355a7160e4f82d5a80b8681b7955f5d44bec0dce628516157f0"])
   , (Address "addr1qxqs59lphg8g6qndelq8xwqn60ag3aeyfcp33c2kdp46a09re5df3pzwwmyq946axfcejy5n4x0y99wqpgtp2gd0k09qsgy6pz",
      [TxHash "1a0570af966fb355a7160e4f82d5a80b8681b7955f5d44bec0dce628516157d0"])
+  ]
+
+txHashesCBORSample = [r|
+[
+  {
+    "tx_hash": "6f044565223657acdde3c569d6555b2edbd71bc2bfb4df0b1cce0ef805f606d4",
+    "cbor": "84a300d9010281825820787b3a89b1d32806968b867a4a31f1e33054b573821293a1c915559e34810a3602018282583900bd71b1547ab3ec95725100d0c0fb06da5ffae9cf54fb97e0f52fb9cab51adb784c4997143ba56990c0584111137d02898950245f5db5e2631a05f5e10082583900bd71b1547ab3ec95725100d0c0fb06da5ffae9cf54fb97e0f52fb9cab51adb784c4997143ba56990c0584111137d02898950245f5db5e2631b0000001588345487021a0002922da100818258206a7884092084c018eed71f9df5ff61935ab021f578b2d57d8ffb0b0e8ac0ea285840a2045496acf31996336ef187f9f3c2bd24c24995b540541586cbbc73a1550a50c2fdc3d4b99766c2823eb520866b03a38a60a4eb94f24994f441fb2852447c0ef5f6"
+  },
+  {
+    "tx_hash": "9b9ddb7ee8101e5a2638b5b79fe4dbafafcda56df12eebe2fd456e9862b848ea",
+    "cbor": "84a300d90102818258207df720d99d8323830709439492876005ff752b94dafeb7bec529ab1679ec236901018282583900f2b425e12b7d90128fff6368c9c3cee21e29ae0273dda6f4c21c66f8364d4566878a66fab0bbc596dac020e3188cb58e40f7069e3c6652fa1a00e4e1c082583900c8cbbfc1db08891d2c2ec9f8df43c2904a61c0626c7e1a57627eb0753e9649b2a3596889c539a17e4d4cbefd9ed73a73d4d8f6089e02d1df1b00000004a6558a56021a0002922da10081825820844e231d37f9b76a2b02978d634ec7fa9fa7bc74a4ce3bc403e3091321a672405840c3cebb97014af06991be1a15fbc86adf71c2441dcbf3078edb11d9407306a13694f7ca5d8fc366bf28ea30fda713c2368e648ce7c87bd2981b43e4fecdd05403f5f6"
+  },
+  {
+    "tx_hash": "52aec9ace9b710bc2e662d4fe20e71c1bc3a0c0f3b8076f069af9713963d4559",
+    "cbor": "84a300d9010281825820c8e9b710248220c28f5fbf6fb040b3a392707d19d0bfdaa5474c882d02b0c3ab0101828258390036e0cf1e52e05ef92e52c7bc2a04493d6bae481b8acbab12ec4300d7f9c9e87246d2f0373885896ad2804b7229673204cac9208345c1ea5b1a001e848082583900263bdbb58275ab6396c39a3188b6594bd5d46f54e08b6868c9fb3e498141d8651e0139b3bfc9c31f76d885431f83957329d75e0e53a65c2a1b000000730e797dda021a0002a2ada100d90102818258200909d10ce4850cd340b155d1dceae0bdcd77eba09524296ffe40f061dfc537c7584073a9efedf31dafc428605836d1ce2e2f62c1c6a9e733a5e538de034449b8ade504521e5fff96df5712487d214c83ac69babaa604bec9bc7a278f9f38b58ef70cf5f6"
+  },
+  {
+    "tx_hash": "b49ccb4ee194da2d97bfa5374509b2ed11a3b8265d346287928e6d25b82f48cb",
+    "cbor": "84a300d9010281825820c5952d922ea00bbb4b6be104c647e6e7b8366c290db5173655f871243494d1001818018182581d60da0eb5ed7611482ec5089b69d870e0c56c1c45180256112398e0835b1b00000002540be400021a00030d40a100d90102818258206855ffb8cbde9163c55c2405f93a8cfa063a631d811281d954e16782123956a75840a4208e0e2236b7f04f77f47ba07f3ec40cbf567ddfd7c7562a451cd51b38f58936e233be2a1a4f202c704fc9963215cdfdde19970c7d05d928403ee688e4ac08f5f6"
+  }
+]
+|]
+
+txHashesCBORExpected :: [TxHashCBOR]
+txHashesCBORExpected =
+  [ TxHashCBOR
+      ( TxHash "6f044565223657acdde3c569d6555b2edbd71bc2bfb4df0b1cce0ef805f606d4"
+      , TransactionCBOR "84a300d9010281825820787b3a89b1d32806968b867a4a31f1e33054b573821293a1c915559e34810a3602018282583900bd71b1547ab3ec95725100d0c0fb06da5ffae9cf54fb97e0f52fb9cab51adb784c4997143ba56990c0584111137d02898950245f5db5e2631a05f5e10082583900bd71b1547ab3ec95725100d0c0fb06da5ffae9cf54fb97e0f52fb9cab51adb784c4997143ba56990c0584111137d02898950245f5db5e2631b0000001588345487021a0002922da100818258206a7884092084c018eed71f9df5ff61935ab021f578b2d57d8ffb0b0e8ac0ea285840a2045496acf31996336ef187f9f3c2bd24c24995b540541586cbbc73a1550a50c2fdc3d4b99766c2823eb520866b03a38a60a4eb94f24994f441fb2852447c0ef5f6"
+      )
+  , TxHashCBOR
+      ( TxHash "9b9ddb7ee8101e5a2638b5b79fe4dbafafcda56df12eebe2fd456e9862b848ea"
+      , TransactionCBOR "84a300d90102818258207df720d99d8323830709439492876005ff752b94dafeb7bec529ab1679ec236901018282583900f2b425e12b7d90128fff6368c9c3cee21e29ae0273dda6f4c21c66f8364d4566878a66fab0bbc596dac020e3188cb58e40f7069e3c6652fa1a00e4e1c082583900c8cbbfc1db08891d2c2ec9f8df43c2904a61c0626c7e1a57627eb0753e9649b2a3596889c539a17e4d4cbefd9ed73a73d4d8f6089e02d1df1b00000004a6558a56021a0002922da10081825820844e231d37f9b76a2b02978d634ec7fa9fa7bc74a4ce3bc403e3091321a672405840c3cebb97014af06991be1a15fbc86adf71c2441dcbf3078edb11d9407306a13694f7ca5d8fc366bf28ea30fda713c2368e648ce7c87bd2981b43e4fecdd05403f5f6"
+      )
+  , TxHashCBOR
+      ( TxHash "52aec9ace9b710bc2e662d4fe20e71c1bc3a0c0f3b8076f069af9713963d4559"
+      , TransactionCBOR "84a300d9010281825820c8e9b710248220c28f5fbf6fb040b3a392707d19d0bfdaa5474c882d02b0c3ab0101828258390036e0cf1e52e05ef92e52c7bc2a04493d6bae481b8acbab12ec4300d7f9c9e87246d2f0373885896ad2804b7229673204cac9208345c1ea5b1a001e848082583900263bdbb58275ab6396c39a3188b6594bd5d46f54e08b6868c9fb3e498141d8651e0139b3bfc9c31f76d885431f83957329d75e0e53a65c2a1b000000730e797dda021a0002a2ada100d90102818258200909d10ce4850cd340b155d1dceae0bdcd77eba09524296ffe40f061dfc537c7584073a9efedf31dafc428605836d1ce2e2f62c1c6a9e733a5e538de034449b8ade504521e5fff96df5712487d214c83ac69babaa604bec9bc7a278f9f38b58ef70cf5f6"
+      )
+  , TxHashCBOR
+      ( TxHash "b49ccb4ee194da2d97bfa5374509b2ed11a3b8265d346287928e6d25b82f48cb"
+      , TransactionCBOR "84a300d9010281825820c5952d922ea00bbb4b6be104c647e6e7b8366c290db5173655f871243494d1001818018182581d60da0eb5ed7611482ec5089b69d870e0c56c1c45180256112398e0835b1b00000002540be400021a00030d40a100d90102818258206855ffb8cbde9163c55c2405f93a8cfa063a631d811281d954e16782123956a75840a4208e0e2236b7f04f77f47ba07f3ec40cbf567ddfd7c7562a451cd51b38f58936e233be2a1a4f202c704fc9963215cdfdde19970c7d05d928403ee688e4ac08f5f6"
+      )
   ]
diff --git a/test/Cardano/Pools.hs b/test/Cardano/Pools.hs
--- a/test/Cardano/Pools.hs
+++ b/test/Cardano/Pools.hs
@@ -45,7 +45,7 @@
   it "parses empty object pool metadata sample" $ do
     eitherDecode "{}"
     `shouldBe`
-    Right (Nothing :: Maybe PoolMetadata)
+    Right (PoolMetadataResponse Nothing)
 
   it "parses pool relay sample" $ do
     eitherDecode poolRelaySample
