diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,36 @@
+0.14.4 -- 2024-11-07
+---
+
+- Print failures from telegram-bot-api thrown in bot action handlers (see [#197](https://github.com/fizruk/telegram-bot-simple/pull/197)).
+- Support `telegram-bot-api-.7.4.3`.
+
+0.14.3 -- 2024-10-20
+---
+
+- Support `telegram-bot-api-7.4.1`.
+
+0.14.2 -- 2024-08-26
+---
+
+- Fix `ExceptionInLinkedThread` (see [#189](https://github.com/fizruk/telegram-bot-simple/pull/189)).
+
+0.14.1 -- 2024-05-26
+---
+
+- Support `telegram-bot-api == 7.3.1`.
+
+0.14 -- 2024-05-25
+---
+
+- Drop support GHC 8.10, 9.0, add support GHC 9.8, 9.10 (see [#182](https://github.com/fizruk/telegram-bot-simple/pull/182)).
+- Support `telegram-bot-api == 7.3`.
+- Ignore updates that produces parsing errors (see [#175](https://github.com/fizruk/telegram-bot-simple/pull/175)).
+
 0.13 -- 2024-02-06
 ---
 
 - Support GHC 9.6 (see [#163](https://github.com/fizruk/telegram-bot-simple/pull/163)).
-- Support `telegram-bot-api == 0.7`.
+- Support `telegram-bot-api == 7.0`.
 - Fix bot hanging via rethrowing exceptions (see [#170](https://github.com/fizruk/telegram-bot-simple/pull/170)).
 
 
@@ -12,7 +40,7 @@
 - Add support for testing WebApps (see [#148](https://github.com/fizruk/telegram-bot-simple/pull/148));
 - Add nix flake (see [#149](https://github.com/fizruk/telegram-bot-simple/pull/149));
 - Improve documentation for `callbackQueryDataRead` (see [#153](https://github.com/fizruk/telegram-bot-simple/pull/153));
-- Support `telegram-bot-api == 0.6.7` (breaking changes included).
+- Support `telegram-bot-api == 6.7` (breaking changes included).
 
 - **Migration guide**:
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -31,5 +31,9 @@
 | 0.11.1  | 6.5.1  |
 | 0.12  | 6.7  |
 | 0.13 | 7.0 | 
+| 0.14 | 7.3 | 
+| 0.14.2 | 7.4 |
+| 0.14.3 | 7.4.2 |
+| 0.14.4 | 7.4.3 |
 
 _Nick_
diff --git a/examples/EchoBot.hs b/examples/EchoBot.hs
--- a/examples/EchoBot.hs
+++ b/examples/EchoBot.hs
@@ -35,8 +35,8 @@
       Just $ InlineEcho queryId msg
   | isJust $ updateMessageSticker update = do
     fileId <- stickerFileId <$> updateMessageSticker update
-    chatId <- updateChatId update
-    pure $ StickerEcho (InputFileId fileId) chatId
+    chatOfUser <- updateChatId update
+    pure $ StickerEcho (InputFileId fileId) chatOfUser
   | otherwise = case updateMessageText update of
       Just text -> Just (Echo text)
       Nothing   -> Nothing
diff --git a/examples/EchoBotWebhook.hs b/examples/EchoBotWebhook.hs
--- a/examples/EchoBotWebhook.hs
+++ b/examples/EchoBotWebhook.hs
@@ -43,8 +43,8 @@
       Just $ InlineEcho queryId msg
   | isJust $ updateMessageSticker update = do
     fileId <- stickerFileId <$> updateMessageSticker update
-    chatId <- updateChatId update
-    pure $ StickerEcho (InputFileId fileId) chatId
+    chatOfUser <- updateChatId update
+    pure $ StickerEcho (InputFileId fileId) chatOfUser
   | otherwise = case updateMessageText update of
       Just text -> Just (Echo text)
       Nothing   -> Nothing
diff --git a/examples/GameBot.hs b/examples/GameBot.hs
--- a/examples/GameBot.hs
+++ b/examples/GameBot.hs
@@ -104,7 +104,11 @@
           { inlineQueryResultTitle = Just msg
           , inlineQueryResultInputMessageContent = Just gameMsg
           }
-        gameMsg = (defaultInputTextMessageContent gameMessageText) { inputMessageContentParseMode = Just "HTML" }
+        gameMsg = InputTextMessageContent
+          { inputMessageContentMessageText = gameMessageText
+          , inputMessageContentParseMode = Just "HTML"
+          , inputMessageContentDisableWebPagePrefiew = Nothing
+          }
         inlineQueryResult = InlineQueryResultGame
           { inlineQueryResultGameGeneric = genericResult
           , inlineQueryResultGameGameShortName = gameName
@@ -737,4 +741,3 @@
       H.div ! A.class_ "position-link" $ do
         H.div ! A.class_ "qel-button text-button text-again-button"
           $ toMarkup txt
-
diff --git a/src/Telegram/Bot/Simple/BotApp/Internal.hs b/src/Telegram/Bot/Simple/BotApp/Internal.hs
--- a/src/Telegram/Bot/Simple/BotApp/Internal.hs
+++ b/src/Telegram/Bot/Simple/BotApp/Internal.hs
@@ -16,6 +16,8 @@
 
 import qualified Telegram.Bot.API        as Telegram
 import           Telegram.Bot.Simple.Eff
+import Data.Either (partitionEithers)
+import Data.Aeson.Types (parseEither, parseJSON)
 
 -- | A bot application.
 data BotApp model action = BotApp
@@ -107,7 +109,9 @@
       (newModel, effects) -> do
         writeTVar botModelVar newModel
         return effects
-  mapM_ ((liftIO . issueAction botEnv update) <=< runBotM (BotContext botUser update)) effects
+  let runBotAndIssueAction
+        = (liftIO . issueAction botEnv update) <=< runBotM (BotContext botUser update)
+  mapM_ runBotAndIssueAction effects
 
 -- | A job to wait for the next action and process it.
 processActionJob :: BotApp model action -> BotEnv model action -> ClientM ()
@@ -120,7 +124,10 @@
   :: BotApp model action -> BotEnv model action -> IO ThreadId
 processActionsIndefinitely botApp botEnv = do
   a <- asyncLink $ forever $ do
-    runClientM (processActionJob botApp botEnv) (botClientEnv botEnv)
+    res <- runClientM (processActionJob botApp botEnv) (botClientEnv botEnv)
+    case res of
+      Left err -> print err
+      Right _ -> return ()
   return (asyncThreadId a)
 
 -- | Start 'Telegram.Update' polling for a bot.
@@ -141,7 +148,7 @@
       let inc (Telegram.UpdateId n) = Telegram.UpdateId (n + 1)
           offset = fmap inc lastUpdateId
       res <-
-        (Right <$> Telegram.getUpdates
+        (Right <$> Telegram.getUpdatesAsValue
           (Telegram.GetUpdatesRequest offset Nothing (Just 25) Nothing))
         `catchError` (pure . Left)
 
@@ -150,19 +157,29 @@
           liftIO (print servantErr)
           pure lastUpdateId
         Right result -> do
-          let updates = Telegram.responseResult result
+          let updateValues = Telegram.responseResult result
+              (errors, updates) = parseUpdates updateValues
               updateIds = map Telegram.updateUpdateId updates
               maxUpdateId = maximum (Nothing : map Just updateIds)
+          mapM_ reportParseError errors
           mapM_ handleUpdate updates
           pure maxUpdateId
       liftIO $ threadDelay 1000000
       go nextUpdateId
 
+    parseUpdates updates =
+      partitionEithers (map (parseEither parseJSON) updates)
+
+    reportParseError err =
+      liftIO $ putStrLn $
+        "Failed to parse an update! Please, make sure you have the latest version of `telegram-bot-api`\
+        \ library and consider opening an issue if so. Error message: " <> err
+
 -- ** Helpers
 
 -- | Instead of 'forkIO' which hides exceptions,
 -- allow users to handle those exceptions separately.
--- 
+--
 -- See <https://github.com/fizruk/telegram-bot-simple/issues/159>.
 asyncLink :: IO a -> IO (Async a)
 asyncLink action = do
diff --git a/src/Telegram/Bot/Simple/Eff.hs b/src/Telegram/Bot/Simple/Eff.hs
--- a/src/Telegram/Bot/Simple/Eff.hs
+++ b/src/Telegram/Bot/Simple/Eff.hs
@@ -24,6 +24,9 @@
   , botContextUpdate :: Maybe Telegram.Update
   }
 
+-- | To retain control over errors coming from Telegram API in `BotM`,
+-- consider using `liftIO . flip runClientM clientEnv` instead.
+-- Issues generated by servant-client will be logged, response failure errors will be ignored.
 liftClientM :: ClientM a -> BotM a
 liftClientM = BotM . lift
 
diff --git a/src/Telegram/Bot/Simple/Reply.hs b/src/Telegram/Bot/Simple/Reply.hs
--- a/src/Telegram/Bot/Simple/Reply.hs
+++ b/src/Telegram/Bot/Simple/Reply.hs
@@ -60,6 +60,8 @@
 replyMessageToSendMessageRequest :: SomeChatId -> ReplyMessage -> SendMessageRequest
 replyMessageToSendMessageRequest someChatId ReplyMessage{..} = SendMessageRequest
   { sendMessageChatId = someChatId
+  , sendMessageBusinessConnectionId = Nothing
+  , sendMessageMessageEffectId = Nothing
   , sendMessageMessageThreadId = replyMessageMessageThreadId
   , sendMessageText = replyMessageText
   , sendMessageParseMode = replyMessageParseMode
@@ -102,7 +104,7 @@
 
 data EditMessageId
   = EditChatMessageId SomeChatId MessageId
-  | EditInlineMessageId MessageId
+  | EditInlineMessageId InlineMessageId
 
 toEditMessage :: Text -> EditMessage
 toEditMessage msg = EditMessage msg Nothing Nothing Nothing
diff --git a/src/Telegram/Bot/Simple/UpdateParser.hs b/src/Telegram/Bot/Simple/UpdateParser.hs
--- a/src/Telegram/Bot/Simple/UpdateParser.hs
+++ b/src/Telegram/Bot/Simple/UpdateParser.hs
@@ -3,7 +3,6 @@
 {-# LANGUAGE CPP #-}
 module Telegram.Bot.Simple.UpdateParser where
 
-import           Control.Applicative
 import           Control.Monad
 #if defined(MIN_VERSION_GLASGOW_HASKELL)
 #if MIN_VERSION_GLASGOW_HASKELL(8,6,2,0)
@@ -15,42 +14,22 @@
 import           Data.Text            (Text)
 import qualified Data.Text            as Text
 import           Text.Read            (readMaybe)
-
+import           Control.Monad.Reader
 import           Telegram.Bot.API
 
-
-newtype UpdateParser a = UpdateParser
-  { runUpdateParser :: Update -> Maybe a
-  } deriving (Functor)
-
-instance Applicative UpdateParser where
-  pure x = UpdateParser (pure (pure x))
-  UpdateParser f <*> UpdateParser x = UpdateParser (\u -> f u <*> x u)
-
-instance Alternative UpdateParser where
-  empty = UpdateParser (const Nothing)
-  UpdateParser f <|> UpdateParser g = UpdateParser (\u -> f u <|> g u)
-
-instance Monad UpdateParser where
-  return = pure
-  UpdateParser x >>= f = UpdateParser (\u -> x u >>= flip runUpdateParser u . f)
-#if !MIN_VERSION_base(4,13,0)
-  fail _ = empty
-#endif
-
-#if MIN_VERSION_base(4,13,0)
-instance MonadFail UpdateParser where
-  fail _ = empty
-#endif
+type UpdateParser a = ReaderT Update Maybe a
 
 mkParser :: (Update -> Maybe a) -> UpdateParser a
-mkParser = UpdateParser
+mkParser f = ask >>= lift . f
 
 parseUpdate :: UpdateParser a -> Update -> Maybe a
-parseUpdate = runUpdateParser
+parseUpdate = runReaderT
 
+runUpdateParser :: UpdateParser a -> Update -> Maybe a
+runUpdateParser = runReaderT
+
 text :: UpdateParser Text
-text = UpdateParser (extractUpdateMessage >=> messageText)
+text = mkParser (extractUpdateMessage >=> messageText)
 
 plainText :: UpdateParser Text
 plainText = do
@@ -77,10 +56,7 @@
 
 -- | Obtain 'CallbackQuery' @data@ associated with the callback button in an inline keyboard if present in 'Update' message. 
 callbackQueryDataRead :: Read a => UpdateParser a
-callbackQueryDataRead = mkParser $ \update -> do
-  query <- updateCallbackQuery update
-  data_ <- callbackQueryData query
-  readMaybe (Text.unpack data_)
+callbackQueryDataRead = mkParser (updateCallbackQuery >=> callbackQueryData >=> (readMaybe . Text.unpack))
 
 updateMessageText :: Update -> Maybe Text
 updateMessageText = extractUpdateMessage >=> messageText
diff --git a/telegram-bot-simple.cabal b/telegram-bot-simple.cabal
--- a/telegram-bot-simple.cabal
+++ b/telegram-bot-simple.cabal
@@ -1,7 +1,7 @@
 cabal-version: 1.12
 
 name:           telegram-bot-simple
-version:        0.13
+version:        0.14.4
 synopsis:       Easy to use library for building Telegram bots.
 description:    Please see the README on Github at <https://github.com/fizruk/telegram-bot-simple#readme>
 category:       Web
@@ -70,7 +70,7 @@
     , split
     , stm
     , template-haskell
-    , telegram-bot-api
+    , telegram-bot-api >= 7.4.3
     , text
     , time
     , transformers
@@ -117,7 +117,7 @@
   if flag(examples)
     build-depends:
         telegram-bot-simple
-      , telegram-bot-api
+      , telegram-bot-api >= 7.3.1
   else
     buildable: False
 
@@ -159,7 +159,7 @@
   if flag(examples)
     build-depends:
         telegram-bot-simple
-      , telegram-bot-api
+      , telegram-bot-api >= 7.3.1
   else
     buildable: False
 
@@ -212,7 +212,7 @@
       , servant-server
       , signal
       , telegram-bot-simple
-      , telegram-bot-api
+      , telegram-bot-api >= 7.3.1
       , uuid
       , warp
   else
@@ -256,6 +256,6 @@
   if flag(examples)
     build-depends:
         telegram-bot-simple
-      , telegram-bot-api
+      , telegram-bot-api >= 7.3.1
   else
     buildable: False
