diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,41 @@
 # telegram-bot-api
 
+## 7.3 -- 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)).
+- Fix missing `blockquote` MessageEntityType (see [#184](https://github.com/fizruk/telegram-bot-simple/pull/184)).
+
+### Bot API 7.1 support
+
+See [#181](https://github.com/fizruk/telegram-bot-simple/pull/181).
+
+- Add `ChatBoostAdded` type.
+- Modify existing types: `Chat`, `ChatAdministratorRights`, `Message`, `Story`.
+
+### Bot API 7.2 support
+
+See [#182](https://github.com/fizruk/telegram-bot-simple/pull/182).
+
+- Add new types:
+  - `Birthdate`, `BusinessIntro`, `BusinessLocation`, `BusinessOpeningHours`, `BusinessOpeningHoursInterval`, `SharedUser`.
+- Modify existing types: `BusinessConnection`, `BusinessMessageDeleted`, `Chat`, `ChatShared`, `KeyboardButtonRequestChat`, `KeyboardButtonRequestUser`, `Message`, `InputSticker`, `UsersShared`.
+- Add new methods: 
+  - `GetBusinessConnection`.
+- Modify existing methods (with business connection identifier mostly):
+  - `sendGameRequest`, `sendAnimation`, `sendAudio`, `sendChatAction`, `sendContact`, `sendDice`, `sendDocument`, `sendLocation`, `sendMediaGroup`, `sendMessage`, `sendPhoto`, `sendPoll`, `sendVenue`, `sendVideo`, `sendVideoNote`, `sendVoice`, `sendSticker`.
+
+### Bot API 7.3 support
+
+See [#183](https://github.com/fizruk/telegram-bot-simple/pull/183).
+
+- Add new types:
+  - `BackgroundType`, `BackgroundFill`, `ChatBackground`, `InputPollOption`.
+- `Chat` type split into `Chat`, `ChatType` and `ChatFullInfo` (most of `Chat` fields were moved there).
+- Modify existing types: 
+  - `ChatMemberUpdated`, `GiveawayWinners`, `InlineKeyboardButton`, `Message`, `Poll`, `PollOption`.
+- Modify existing methods:
+  - `editMessageLiveLocation`, `getChat`, `sendPoll`.
+
 ## 7.0 -- 2024-02-06
 
 - Support GHC 9.6 (see [#163](https://github.com/fizruk/telegram-bot-simple/pull/163)).
diff --git a/src/Telegram/Bot/API/Games.hs b/src/Telegram/Bot/API/Games.hs
--- a/src/Telegram/Bot/API/Games.hs
+++ b/src/Telegram/Bot/API/Games.hs
@@ -16,7 +16,8 @@
 import Telegram.Bot.API.Internal.Utils (deriveJSON')
 import Telegram.Bot.API.MakingRequests (Response)
 import Telegram.Bot.API.Types
-  ( ChatId, GameHighScore, InlineKeyboardMarkup, Message, MessageId, MessageThreadId
+  ( BusinessConnectionId, ChatId, GameHighScore, InlineKeyboardMarkup
+  , Message, MessageId, MessageThreadId
   , ReplyParameters, UserId
   )
 import Telegram.Bot.API.Internal.TH
@@ -26,7 +27,8 @@
 -- ** 'SendGameRequest'
 
 data SendGameRequest = SendGameRequest
-  { sendGameChatId                   :: ChatId                     -- ^ Unique identifier for the target chat.
+  { sendGameBusinessConnectionId     :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendGameChatId                   :: ChatId                     -- ^ Unique identifier for the target chat.
   , sendGameMessageThreadId          :: Maybe MessageThreadId      -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendGameGameShortName            :: Text                       -- ^ Short name of the game, serves as the unique identifier for the game. Set up your games via Botfather.
   , sendGameDisableNotification      :: Maybe Bool                 -- ^ Sends the message silently. Users will receive a notification with no sound.
diff --git a/src/Telegram/Bot/API/GettingUpdates.hs b/src/Telegram/Bot/API/GettingUpdates.hs
--- a/src/Telegram/Bot/API/GettingUpdates.hs
+++ b/src/Telegram/Bot/API/GettingUpdates.hs
@@ -6,7 +6,7 @@
 {-# LANGUAGE TypeOperators              #-}
 module Telegram.Bot.API.GettingUpdates where
 
-import           Data.Aeson                      (FromJSON (..), ToJSON (..))
+import           Data.Aeson                      (FromJSON (..), ToJSON (..), Value)
 import           Data.Foldable                   (asum)
 import           Data.Proxy
 import           GHC.Generics                    (Generic)
@@ -32,16 +32,16 @@
   , updateMessage           :: Maybe Message -- ^ New incoming message of any kind — text, photo, sticker, etc.
   , updateEditedMessage     :: Maybe Message -- ^ New version of a message that is known to the bot and was edited
   , updateChannelPost       :: Maybe Message -- ^ New incoming channel post of any kind — text, photo, sticker, etc.
-  , updateMessageReaction   :: Maybe MessageReactionUpdated -- ^ A reaction to a message was changed by a user. The bot must be an administrator in the chat and must explicitly specify "message_reaction" in the list of allowed_updates to receive these updates. The update isn't received for reactions set by bots.
-  , updateMessageReactionCount :: Maybe MessageReactionCountUpdated -- ^ Reactions to a message with anonymous reactions were changed. The bot must be an administrator in the chat and must explicitly specify "message_reaction_count" in the list of allowed_updates to receive these updates. The updates are grouped and can be sent with delay up to a few minutes.
-  , updateEditedChannelPost :: Maybe Message -- ^ New version of a channel post that is known to the bot and was edited
-
-  , updateInlineQuery       :: Maybe InlineQuery -- ^ New incoming inline query
-
+  , updateEditedChannelPost :: Maybe Message -- ^ New version of a channel post that is known to the bot and was edited.
+  , updateBusinessConnection :: Maybe BusinessConnection -- ^ The bot was connected to or disconnected from a business account, or a user edited an existing connection with the bot.
+  , updateBusinessMessage :: Maybe Message -- ^ New message from a connected business account.
+  , updateEditedBusinessMessage :: Maybe Message -- ^ New version of a message from a connected business account.
+  , updateDeletedBusinessMessages :: Maybe BusinessMessagesDeleted -- ^ Messages were deleted from a connected business account.
+  , updateMessageReaction :: Maybe MessageReactionUpdated -- ^ A reaction to a message was changed by a user. The bot must be an administrator in the chat and must explicitly specify @message_reaction@ in the list of /allowed_updates/ to receive these updates. The update isn't received for reactions set by bots.
+  , updateMessageReactionCount :: Maybe MessageReactionCountUpdated -- ^ Reactions to a message with anonymous reactions were changed. The bot must be an administrator in the chat and must explicitly specify @message_reaction_count@ in the list of /allowed_updates/ to receive these updates. The updates are grouped and can be sent with delay up to a few minutes.
+  , updateInlineQuery       :: Maybe InlineQuery -- ^ New incoming inline query.
   , updateChosenInlineResult :: Maybe ChosenInlineResult -- ^ The result of an inline query that was chosen by a user and sent to their chat partner. Please see our documentation on the feedback collecting for details on how to enable these updates for your bot.
-
-  , updateCallbackQuery     :: Maybe CallbackQuery -- ^ New incoming callback query
-
+  , updateCallbackQuery     :: Maybe CallbackQuery -- ^ New incoming callback query.
   , updateShippingQuery     :: Maybe ShippingQuery -- ^ New incoming shipping query. Only for invoices with flexible price
   , updatePreCheckoutQuery  :: Maybe PreCheckoutQuery -- ^ New incoming pre-checkout query. Contains full information about checkout
   , updatePoll              :: Maybe Poll -- ^ New poll state. Bots receive only updates about stopped polls and polls, which are sent by the bot.
@@ -70,9 +70,11 @@
 
 -- ** 'getUpdates'
 
-type GetUpdates
-  = "getUpdates" :> ReqBody '[JSON] GetUpdatesRequest :> Get '[JSON] (Response [Update])
+type GetUpdatesAs a
+  = "getUpdates" :> ReqBody '[JSON] GetUpdatesRequest :> Get '[JSON] (Response [a])
 
+type GetUpdates = GetUpdatesAs Update
+
 -- | Use this method to receive incoming updates using long polling.
 -- An list of 'Update' objects is returned.
 --
@@ -82,6 +84,14 @@
 getUpdates :: GetUpdatesRequest -> ClientM (Response [Update])
 getUpdates = client (Proxy @GetUpdates)
 
+-- | More liberal version of `getUpdates` funcion.
+--
+-- It's useful  when you aren't sure that you can
+-- parse all the types of updates, so you would recieve
+-- a list of Value with updates, that you can parse later.
+getUpdatesAsValue :: GetUpdatesRequest -> ClientM (Response [Value])
+getUpdatesAsValue = client (Proxy @(GetUpdatesAs Value))
+
 -- | Request parameters for 'getUpdates'.
 data GetUpdatesRequest = GetUpdatesRequest
   { getUpdatesOffset         :: Maybe UpdateId -- ^ Identifier of the first update to be returned. Must be greater by one than the highest among the identifiers of previously received updates. By default, updates starting with the earliest unconfirmed update are returned. An update is considered confirmed as soon as getUpdates is called with an offset higher than its update_id. The negative offset can be specified to retrieve updates starting from -offset update from the end of the updates queue. All previous updates will forgotten.
@@ -98,11 +108,24 @@
   | UpdateEditedMessage
   | UpdateChannelPost
   | UpdateEditedChannelPost
+  | UpdateBusinessConnection
+  | UpdateBusinessMessage
+  | UpdateEditedBusinessMessage
+  | UpdateDeletedBusinessMessages
+  | UpdateMessageReaction
+  | UpdateMessageReactionCount
   | UpdateInlineQuery
   | UpdateChosenInlineResult
   | UpdateCallbackQuery
   | UpdateShippingQuery
   | UpdatePreCheckoutQuery
+  | UpdatePoll
+  | UpdatePollAnswer
+  | UpdateMyChatMember
+  | UpdateChatMember
+  | UpdateChatJoinRequest
+  | UpdateChatBoost
+  | UpdateRemovedChatBoost
   deriving (Generic)
 
 instance ToJSON   UpdateType where toJSON = gtoJSON
diff --git a/src/Telegram/Bot/API/MakingRequests.hs b/src/Telegram/Bot/API/MakingRequests.hs
--- a/src/Telegram/Bot/API/MakingRequests.hs
+++ b/src/Telegram/Bot/API/MakingRequests.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP                        #-}
+{-# LANGUAGE DeriveFunctor              #-}
 {-# LANGUAGE DeriveGeneric              #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE OverloadedStrings          #-}
@@ -58,7 +59,7 @@
   , responseResult      :: a
   , responseErrorCode   :: Maybe Integer
   , responseParameters  :: Maybe ResponseParameters
-  } deriving (Show, Generic)
+  } deriving (Show, Generic, Functor)
 
 instance ToJSON   a => ToJSON   (Response a) where toJSON = gtoJSON
 instance FromJSON a => FromJSON (Response a) where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Methods.hs b/src/Telegram/Bot/API/Methods.hs
--- a/src/Telegram/Bot/API/Methods.hs
+++ b/src/Telegram/Bot/API/Methods.hs
@@ -32,6 +32,7 @@
   , module Telegram.Bot.API.Methods.ExportChatInviteLink
   , module Telegram.Bot.API.Methods.ForwardMessage
   , module Telegram.Bot.API.Methods.ForwardMessages
+  , module Telegram.Bot.API.Methods.GetBusinessConnection
   , module Telegram.Bot.API.Methods.GetChat
   , module Telegram.Bot.API.Methods.GetChatAdministrators
   , module Telegram.Bot.API.Methods.GetChatMember
@@ -116,6 +117,7 @@
 import Telegram.Bot.API.Methods.ExportChatInviteLink
 import Telegram.Bot.API.Methods.ForwardMessage
 import Telegram.Bot.API.Methods.ForwardMessages
+import Telegram.Bot.API.Methods.GetBusinessConnection
 import Telegram.Bot.API.Methods.GetChat
 import Telegram.Bot.API.Methods.GetChatAdministrators
 import Telegram.Bot.API.Methods.GetChatMember
diff --git a/src/Telegram/Bot/API/Methods/EditMessageLiveLocation.hs b/src/Telegram/Bot/API/Methods/EditMessageLiveLocation.hs
--- a/src/Telegram/Bot/API/Methods/EditMessageLiveLocation.hs
+++ b/src/Telegram/Bot/API/Methods/EditMessageLiveLocation.hs
@@ -20,12 +20,13 @@
 
 -- | Request parameters for 'editMessageLiveLocation'.
 data EditMessageLiveLocationRequest = EditMessageLiveLocationRequest
-  { editMessageLiveLocationChatId :: Maybe SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername)
-  , editMessageLiveLocationMessageId :: Maybe MessageId -- ^ Required if inline_message_id is not specified. Identifier of the message with live location to stop
-  , editMessageLiveLocationInlineMessageId :: Maybe Text -- ^  	Required if chat_id and message_id are not specified. Identifier of the inline message
-  , editMessageLiveLocationLatitude :: Float -- ^ Latitude of new location
-  , editMessageLiveLocationLongitude :: Float -- ^ Longitude of new location
-  , editMessageLiveLocationHorizontalAccuracy :: Maybe Float -- ^ The radius of uncertainty for the location, measured in meters; 0-1500
+  { editMessageLiveLocationChatId :: Maybe SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format \@channelusername).
+  , editMessageLiveLocationMessageId :: Maybe MessageId -- ^ Required if inline_message_id is not specified. Identifier of the message with live location to stop.
+  , editMessageLiveLocationInlineMessageId :: Maybe Text -- ^  	Required if chat_id and message_id are not specified. Identifier of the inline message.
+  , editMessageLiveLocationLatitude :: Float -- ^ Latitude of new location.
+  , editMessageLiveLocationLongitude :: Float -- ^ Longitude of new location.
+  , editMessageLiveLocationLivePeriod :: Maybe Int -- ^ New period in seconds during which the location can be updated, starting from the message send date. If @0x7FFFFFFF@ is specified, then the location can be updated forever. Otherwise, the new value must not exceed the current @live_period@ by more than a day, and the live location expiration date must remain within the next 90 days. If not specified, then @live_period@ remains unchanged.
+  , editMessageLiveLocationHorizontalAccuracy :: Maybe Float -- ^ The radius of uncertainty for the location, measured in meters; 0-1500.
   , editMessageLiveLocationHeading :: Maybe Int -- ^ Direction in which the user is moving, in degrees. Must be between 1 and 360 if specified.
   , editMessageLiveLocationProximityAlertRadius :: Maybe Int  -- ^ Maximum distance for proximity alerts about approaching another chat member, in meters. Must be between 1 and 100000 if specified.
   , editMessageLiveLocationReplyMarkup :: Maybe InlineKeyboardMarkup -- ^ Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user.
diff --git a/src/Telegram/Bot/API/Methods/GetBusinessConnection.hs b/src/Telegram/Bot/API/Methods/GetBusinessConnection.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Methods/GetBusinessConnection.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE TypeOperators #-}
+module Telegram.Bot.API.Methods.GetBusinessConnection where
+
+import Data.Proxy
+import Servant.API
+import Servant.Client hiding (Response)
+
+import Telegram.Bot.API.MakingRequests
+import Telegram.Bot.API.Types
+
+-- ** 'getBusinessConnection'
+
+type GetBusinessConnection = "getBusinessConnection"
+  :> RequiredQueryParam "business_connection_id" BusinessConnectionId
+  :> Post '[JSON] (Response BusinessConnection)
+
+-- | Use this method to get information about the connection of the bot with a business account. Returns a 'BusinessConnection' object on success.
+getBusinessConnection :: BusinessConnectionId -> ClientM (Response BusinessConnection)
+getBusinessConnection = client (Proxy @GetBusinessConnection)
diff --git a/src/Telegram/Bot/API/Methods/GetChat.hs b/src/Telegram/Bot/API/Methods/GetChat.hs
--- a/src/Telegram/Bot/API/Methods/GetChat.hs
+++ b/src/Telegram/Bot/API/Methods/GetChat.hs
@@ -14,7 +14,7 @@
 
 type GetChat = "getChat"
   :> RequiredQueryParam "chat_id" SomeChatId
-  :> Post '[JSON] (Response Chat)
+  :> Post '[JSON] (Response ChatFullInfo)
 
 -- | Use this method to get up to date information
 --   about the chat (current name of the user for
@@ -22,5 +22,5 @@
 --   a user, group or channel, etc.).
 --   Returns a Chat object on success.
 getChat :: SomeChatId -- ^ Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername)
-  -> ClientM (Response Chat)
+  -> ClientM (Response ChatFullInfo)
 getChat = client (Proxy @GetChat)
diff --git a/src/Telegram/Bot/API/Methods/SendAnimation.hs b/src/Telegram/Bot/API/Methods/SendAnimation.hs
--- a/src/Telegram/Bot/API/Methods/SendAnimation.hs
+++ b/src/Telegram/Bot/API/Methods/SendAnimation.hs
@@ -37,7 +37,8 @@
 
 -- | Request parameters for 'sendAnimation'.
 data SendAnimationRequest = SendAnimationRequest
-  { sendAnimationChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername)
+  { sendAnimationBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendAnimationChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername)
   , sendAnimationMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendAnimationAnimation :: InputFile -- ^ Animation to send. Pass a file_id as String to send an animation that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get an animation from the Internet, or upload a new animation using multipart/form-data. More info on Sending Files »
   , sendAnimationDuration :: Maybe Int -- ^ Duration of sent animation in seconds
diff --git a/src/Telegram/Bot/API/Methods/SendAudio.hs b/src/Telegram/Bot/API/Methods/SendAudio.hs
--- a/src/Telegram/Bot/API/Methods/SendAudio.hs
+++ b/src/Telegram/Bot/API/Methods/SendAudio.hs
@@ -37,7 +37,8 @@
 
 -- | Request parameters for 'sendAudio'.
 data SendAudioRequest = SendAudioRequest
-  { sendAudioChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendAudioBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendAudioChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendAudioMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendAudioAudio :: InputFile -- ^ Audio to send. Pass a file_id as String to send an audio that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a audio from the Internet, or upload a new audio using multipart/form-data. More info on Sending Files »
   , sendAudioDuration :: Maybe Int -- ^ Duration of sent audio in seconds
diff --git a/src/Telegram/Bot/API/Methods/SendChatAction.hs b/src/Telegram/Bot/API/Methods/SendChatAction.hs
--- a/src/Telegram/Bot/API/Methods/SendChatAction.hs
+++ b/src/Telegram/Bot/API/Methods/SendChatAction.hs
@@ -1,20 +1,32 @@
 {-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE TypeApplications #-}
 {-# LANGUAGE TypeOperators #-}
 module Telegram.Bot.API.Methods.SendChatAction where
 
+import Data.Aeson (ToJSON (..))
 import Data.Proxy
 import Data.Text (Text)
+import GHC.Generics (Generic)
 import Servant.API
 import Servant.Client hiding (Response)
 
+import Telegram.Bot.API.Internal.Utils
 import Telegram.Bot.API.MakingRequests
 import Telegram.Bot.API.Types
 
+data SendChatActionRequest = SendChatActionRequest
+  { sendChatActionBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the action will be sent.
+  , sendChatActionChatId :: ChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @\@channelusername@).
+  , sendChatActionMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread; for supergroups only.
+  , sendChatActionAction :: Text -- ^ Type of action to broadcast. Choose one, depending on what the user is about to receive: typing for text messages, upload_photo for photos, record_video or upload_video for videos, record_voice or upload_voice for voice notes, upload_document for general files, choose_sticker for stickers, find_location for location data, record_video_note or upload_video_note for video notes.
+  }
+  deriving Generic
+
+instance ToJSON SendChatActionRequest where toJSON = gtoJSON
+
 type SendChatAction = "sendChatAction"
-  :> RequiredQueryParam "chat_id" SomeChatId
-  :> QueryParam "message_thread_id" MessageThreadId
-  :> RequiredQueryParam "action" Text
+  :> ReqBody '[JSON] SendChatActionRequest
   :> Post '[JSON] (Response Bool)
 
 -- | Use this method when you need to tell the
@@ -34,8 +46,5 @@
 --   We only recommend using this method when a
 --   response from the bot will take a noticeable
 --   amount of time to arrive.
-sendChatAction :: SomeChatId -- ^ Unique identifier for the target chat or username of the target supergroup (in the format @supergroupusername).
-  -> Maybe MessageThreadId -- ^ Unique identifier for the target message thread; supergroups only.
-  -> Text -- ^ Type of action to broadcast. Choose one, depending on what the user is about to receive: typing for text messages, upload_photo for photos, record_video or upload_video for videos, record_voice or upload_voice for voice notes, upload_document for general files, choose_sticker for stickers, find_location for location data, record_video_note or upload_video_note for video notes.
-  -> ClientM (Response  Bool)
+sendChatAction :: SendChatActionRequest -> ClientM (Response  Bool)
 sendChatAction = client (Proxy @SendChatAction)
diff --git a/src/Telegram/Bot/API/Methods/SendContact.hs b/src/Telegram/Bot/API/Methods/SendContact.hs
--- a/src/Telegram/Bot/API/Methods/SendContact.hs
+++ b/src/Telegram/Bot/API/Methods/SendContact.hs
@@ -20,7 +20,8 @@
 
 -- | Request parameters for 'sendContact'.
 data SendContactRequest = SendContactRequest
-  { sendContactChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendContactBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendContactChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendContactMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendContactPhoneNumber :: Text -- ^ Contact's phone number
   , sendContactFirstName  :: Text -- ^ Contact's first name
diff --git a/src/Telegram/Bot/API/Methods/SendDice.hs b/src/Telegram/Bot/API/Methods/SendDice.hs
--- a/src/Telegram/Bot/API/Methods/SendDice.hs
+++ b/src/Telegram/Bot/API/Methods/SendDice.hs
@@ -20,7 +20,8 @@
 
 -- | Request parameters for 'sendDice'.
 data SendDiceRequest = SendDiceRequest
-  { sendDiceChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendDiceBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendDiceChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendDiceMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendDiceEmoji :: Maybe Text -- ^ Emoji on which the dice throw animation is based. Currently, must be one of “🎲”, “🎯”, “🏀”, “⚽”, “🎳”, or “🎰”. Dice can have values 1-6 for “🎲”, “🎯” and “🎳”, values 1-5 for “🏀” and “⚽”, and values 1-64 for “🎰”. Defaults to “🎲”
   , sendDiceDisableNotification :: Maybe Bool -- ^ Sends the message silently. Users will receive a notification with no sound.
diff --git a/src/Telegram/Bot/API/Methods/SendDocument.hs b/src/Telegram/Bot/API/Methods/SendDocument.hs
--- a/src/Telegram/Bot/API/Methods/SendDocument.hs
+++ b/src/Telegram/Bot/API/Methods/SendDocument.hs
@@ -59,7 +59,8 @@
 
 -- | Request parameters for 'sendDocument'
 data SendDocumentRequest = SendDocumentRequest
-  { sendDocumentChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @\@channelusername@).
+  { sendDocumentBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendDocumentChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @\@channelusername@).
   , sendDocumentMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendDocumentDocument :: DocumentFile -- ^ Pass a file_id as String to send a file that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data
   , sendDocumentThumbnail :: Maybe FilePath -- ^ Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass “attach://<file_attach_name>” if the thumbnail was uploaded using multipart/form-data under <file_attach_name>
diff --git a/src/Telegram/Bot/API/Methods/SendLocation.hs b/src/Telegram/Bot/API/Methods/SendLocation.hs
--- a/src/Telegram/Bot/API/Methods/SendLocation.hs
+++ b/src/Telegram/Bot/API/Methods/SendLocation.hs
@@ -19,7 +19,8 @@
 
 -- | Request parameters for 'sendLocation'.
 data SendLocationRequest = SendLocationRequest
-  { sendLocationChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendLocationBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendLocationChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendLocationMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendLocationLatitude :: Float -- ^ Latitude of new location
   , sendLocationLongitude :: Float -- ^ Longitude of new location
diff --git a/src/Telegram/Bot/API/Methods/SendMediaGroup.hs b/src/Telegram/Bot/API/Methods/SendMediaGroup.hs
--- a/src/Telegram/Bot/API/Methods/SendMediaGroup.hs
+++ b/src/Telegram/Bot/API/Methods/SendMediaGroup.hs
@@ -19,7 +19,8 @@
 
 -- | Request parameters for 'sendMediaGroup'.
 data SendMediaGroupRequest = SendMediaGroupRequest
-  { sendMediaGroupChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendMediaGroupBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendMediaGroupChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendMediaGroupMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendMediaGroupMedia :: [InputMedia] -- ^ A JSON-serialized array describing messages to be sent, must include 2-10 items. InputMediaAudio, InputMediaDocument, InputMediaPhoto or InputMediaVideo.
   , sendMediaGroupDisableNotification :: Maybe Bool -- ^ Sends the message silently. Users will receive a notification with no sound.
diff --git a/src/Telegram/Bot/API/Methods/SendMessage.hs b/src/Telegram/Bot/API/Methods/SendMessage.hs
--- a/src/Telegram/Bot/API/Methods/SendMessage.hs
+++ b/src/Telegram/Bot/API/Methods/SendMessage.hs
@@ -30,7 +30,8 @@
 
 -- | Request parameters for 'sendMessage'.
 data SendMessageRequest = SendMessageRequest
-  { sendMessageChatId                :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @\@channelusername@).
+  { sendMessageBusinessConnectionId  :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendMessageChatId                :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @\@channelusername@).
   , sendMessageMessageThreadId       :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendMessageText                  :: Text -- ^ Text of the message to be sent.
   , sendMessageParseMode             :: Maybe ParseMode -- ^ Send 'MarkdownV2', 'HTML' or 'Markdown' (legacy), if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message.
diff --git a/src/Telegram/Bot/API/Methods/SendPhoto.hs b/src/Telegram/Bot/API/Methods/SendPhoto.hs
--- a/src/Telegram/Bot/API/Methods/SendPhoto.hs
+++ b/src/Telegram/Bot/API/Methods/SendPhoto.hs
@@ -61,7 +61,8 @@
 
 -- | Request parameters for 'sendPhoto'
 data SendPhotoRequest = SendPhotoRequest
-  { sendPhotoChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @\@channelusername@).
+  { sendPhotoBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendPhotoChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @\@channelusername@).
   , sendPhotoMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendPhotoPhoto :: PhotoFile -- ^ Pass a file_id as String to send a file that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data
   , sendPhotoThumb :: Maybe FilePath -- ^ Thumbnail of the file sent; can be ignored if thumbnail generation for the file is supported server-side. The thumbnail should be in JPEG format and less than 200 kB in size. A thumbnail's width and height should not exceed 320. Ignored if the file is not uploaded using multipart/form-data. Thumbnails can't be reused and can be only uploaded as a new file, so you can pass “attach://<file_attach_name>” if the thumbnail was uploaded using multipart/form-data under <file_attach_name>
diff --git a/src/Telegram/Bot/API/Methods/SendPoll.hs b/src/Telegram/Bot/API/Methods/SendPoll.hs
--- a/src/Telegram/Bot/API/Methods/SendPoll.hs
+++ b/src/Telegram/Bot/API/Methods/SendPoll.hs
@@ -21,23 +21,26 @@
 
 -- | Request parameters for 'sendPoll'.
 data SendPollRequest = SendPollRequest
-  { sendPollChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendPollBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendPollChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendPollMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
-  , sendPollQuestion :: Text -- ^ Poll question, 1-300 characters
-  , sendPollOptions :: [Text] -- ^ A JSON-serialized list of answer options, 2-10 strings 1-100 characters each
-  , sendPollIsAnonymous :: Maybe Bool -- ^ True, if the poll needs to be anonymous, defaults to True
-  , sendPollType :: Maybe Text -- ^ Poll type, “quiz” or “regular”, defaults to “regular”
-  , sendPollAllowsMultipleAnswers :: Maybe Bool -- ^ True, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to False
-  , sendPollCorrectOptionId :: Maybe Int -- ^ 0-based identifier of the correct answer option, required for polls in quiz mode
-  , sendPollExplanation :: Maybe Text -- ^ Text that is shown when a user chooses an incorrect answer or taps on the lamp icon in a quiz-style poll, 0-200 characters with at most 2 line feeds after entities parsing
+  , sendPollQuestion :: Text -- ^ Poll question, 1-300 characters.
+  , sendPollQuestionParseMode :: Maybe ParseMode -- ^ Mode for parsing entities in the question. See [formatting options](https://core.telegram.org/bots/api#formatting-options) for more details. Currently, only custom emoji entities are allowed.
+  , sendPollQuestionEntities :: Maybe [MessageEntity] -- ^ A JSON-serialized list of special entities that appear in the poll question. It can be specified instead of @question_parse_mode@.
+  , sendPollOptions :: [InputPollOption] -- ^ A JSON-serialized list of answer options, 2-10 strings 1-100 characters each.
+  , sendPollIsAnonymous :: Maybe Bool -- ^ True, if the poll needs to be anonymous, defaults to 'True'.
+  , sendPollType :: Maybe Text -- ^ Poll type, “quiz” or “regular”, defaults to “regular”.
+  , sendPollAllowsMultipleAnswers :: Maybe Bool -- ^ True, if the poll allows multiple answers, ignored for polls in quiz mode, defaults to 'False'.
+  , sendPollCorrectOptionId :: Maybe Int -- ^ 0-based identifier of the correct answer option, required for polls in quiz mode.
+  , sendPollExplanation :: Maybe Text -- ^ Text that is shown when a user chooses an incorrect answer or taps on the lamp icon in a quiz-style poll, 0-200 characters with at most 2 line feeds after entities parsing.
   , sendPollExplanationParseMode :: Maybe ParseMode  -- ^ Send 'MarkdownV2', 'HTML' or 'Markdown' (legacy), if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message.
-  , sendPollExplanationEntities :: Maybe [MessageEntity] -- ^ A JSON-serialized list of special entities that appear in the poll explanation, which can be specified instead of parse_mode
-  , sendPollOpenPeriod :: Maybe Int -- ^ Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with close_date.
-  , sendPollCloseDate :: Maybe Int -- ^ Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with open_period.
+  , sendPollExplanationEntities :: Maybe [MessageEntity] -- ^ A JSON-serialized list of special entities that appear in the poll explanation, which can be specified instead of @parse_mode@.
+  , sendPollOpenPeriod :: Maybe Int -- ^ Amount of time in seconds the poll will be active after creation, 5-600. Can't be used together with @close_date@.
+  , sendPollCloseDate :: Maybe Int -- ^ Point in time (Unix timestamp) when the poll will be automatically closed. Must be at least 5 and no more than 600 seconds in the future. Can't be used together with @open_period@.
   , sendPollIsClosed :: Maybe Bool -- ^ Pass True, if the poll needs to be immediately closed. This can be useful for poll preview.
   , sendPollDisableNotification :: Maybe Bool -- ^ Sends the message silently. Users will receive a notification with no sound.
-  , sendPollProtectContent :: Maybe Bool -- ^ Protects the contents of the sent message from forwarding and saving
-  , sendPollReplyToMessageId :: Maybe MessageId -- ^ If the message is a reply, ID of the original message
+  , sendPollProtectContent :: Maybe Bool -- ^ Protects the contents of the sent message from forwarding and saving.
+  , sendPollReplyToMessageId :: Maybe MessageId -- ^ If the message is a reply, ID of the original message.
   , sendPollReplyParameters :: Maybe ReplyParameters -- ^ Description of the message to reply to.
   , sendPollReplyMarkup :: Maybe InlineKeyboardMarkup -- ^ Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user.
   }
diff --git a/src/Telegram/Bot/API/Methods/SendVenue.hs b/src/Telegram/Bot/API/Methods/SendVenue.hs
--- a/src/Telegram/Bot/API/Methods/SendVenue.hs
+++ b/src/Telegram/Bot/API/Methods/SendVenue.hs
@@ -20,7 +20,8 @@
 
 -- | Request parameters for 'sendVenue'.
 data SendVenueRequest = SendVenueRequest
-  { sendVenueChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendVenueBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendVenueChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendVenueMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendVenueLatitude :: Float -- ^ Latitude of the venue
   , sendVenueLongitude :: Float -- ^ Longitude of the venue
diff --git a/src/Telegram/Bot/API/Methods/SendVideo.hs b/src/Telegram/Bot/API/Methods/SendVideo.hs
--- a/src/Telegram/Bot/API/Methods/SendVideo.hs
+++ b/src/Telegram/Bot/API/Methods/SendVideo.hs
@@ -37,7 +37,8 @@
 
 -- | Request parameters for 'sendVideo'.
 data SendVideoRequest = SendVideoRequest
-  { sendVideoChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername)
+  { sendVideoBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendVideoChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername)
   , sendVideoMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendVideoVideo :: InputFile -- ^ Video to send. Pass a file_id as String to send an video that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a video from the Internet, or upload a new video using multipart/form-data. More info on Sending Files »
   , sendVideoDuration :: Maybe Int -- ^ Duration of sent video in seconds
diff --git a/src/Telegram/Bot/API/Methods/SendVideoNote.hs b/src/Telegram/Bot/API/Methods/SendVideoNote.hs
--- a/src/Telegram/Bot/API/Methods/SendVideoNote.hs
+++ b/src/Telegram/Bot/API/Methods/SendVideoNote.hs
@@ -35,7 +35,8 @@
 
 -- | Request parameters for 'sendVideoNote'.
 data SendVideoNoteRequest = SendVideoNoteRequest
-  { sendVideoNoteChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendVideoNoteBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendVideoNoteChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendVideoNoteMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendVideoNoteVideoNote :: InputFile -- ^ Video note to send. Pass a file_id as String to send a video note that exists on the Telegram servers (recommended) or upload a new video using multipart/form-data. More info on Sending Files ». Sending video notes by a URL is currently unsupported
   , sendVideoNoteDuration :: Maybe Int -- ^ Duration of sent video in seconds
diff --git a/src/Telegram/Bot/API/Methods/SendVoice.hs b/src/Telegram/Bot/API/Methods/SendVoice.hs
--- a/src/Telegram/Bot/API/Methods/SendVoice.hs
+++ b/src/Telegram/Bot/API/Methods/SendVoice.hs
@@ -37,7 +37,8 @@
 
 -- | Request parameters for 'sendVoice'.
 data SendVoiceRequest = SendVoiceRequest
-  { sendVoiceChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendVoiceBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendVoiceChatId :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendVoiceMessageThreadId :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendVoiceVoice :: InputFile -- ^ Audio file to send. Pass a file_id as String to send a file that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data. More info on Sending Files »
   , sendVoiceCaption :: Maybe Text -- ^ Voice message caption, 0-1024 characters after entities parsing
diff --git a/src/Telegram/Bot/API/Stickers.hs b/src/Telegram/Bot/API/Stickers.hs
--- a/src/Telegram/Bot/API/Stickers.hs
+++ b/src/Telegram/Bot/API/Stickers.hs
@@ -45,10 +45,11 @@
 
 -- | Request parameters for 'sendSticker'.
 data SendStickerRequest = SendStickerRequest
-  { sendStickerChatId                   :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
+  { sendStickerBusinessConnectionId :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection on behalf of which the message will be sent.
+  , sendStickerChatId                   :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @channelusername).
   , sendStickerMessageThreadId          :: Maybe MessageThreadId -- ^ Unique identifier for the target message thread (topic) of the forum; for forum supergroups only.
   , sendStickerEmoji                    :: Maybe Text -- ^ Emoji associated with the sticker; only for just uploaded stickers.
-  , sendStickerSticker                  :: InputFile -- ^ Sticker to send. Pass a file_id as String to send a file that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a .WEBP file from the Internet, or upload a new one using multipart/form-data.
+  , sendStickerSticker                  :: InputFile -- ^ Sticker to send. Pass a file_id as String to send a file that exists on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get a __.WEBP__ sticker from the Internet, or upload a new __.WEBP__, __.TGS__, or __.WEBM__ sticker using multipart\/form-data. More information on Sending Files ». Video and animated stickers can't be sent via an HTTP URL.
   , sendStickerDisableNotification      :: Maybe Bool -- ^ Sends the message silently. Users will receive a notification with no sound.
   , sendStickerProtectContent           :: Maybe Bool -- ^ Protects the contents of the sent message from forwarding and saving.
   , sendStickerReplyToMessageId         :: Maybe MessageId -- ^	If the message is a reply, ID of the original message
@@ -147,7 +148,7 @@
   :> ReqBody '[JSON] UploadStickerFileRequest
   :> Post '[JSON] (Response File)
 
--- | Use this method to upload f file in .WEBP, .PNG, .TGS, or .WEBM format
+-- | Use this method to upload f file in __.WEBP__, __.PNG__, __.TGS__, or __.WEBM__ format
 --   with a sticker for later use in createNewStickerSet
 --   and addStickerToSet methods (can be used multiple times).
 --   Returns the uploaded File on success.
@@ -168,8 +169,7 @@
   , createNewStickerSetName          :: T.Text -- ^ Short name of sticker set, to be used in t.me/addstickers/ URLs (e.g., animals). Can contain only english letters, digits and underscores. Must begin with a letter, can't contain consecutive underscores and must end in “_by_<bot username>”. <bot_username> is case insensitive. 1-64 characters.
   , createNewStickerSetTitle         :: T.Text -- ^ Sticker set title, 1-64 characters
   , createNewStickerSetStickers      :: [InputSticker] -- ^ A JSON-serialized list of 1-50 initial stickers to be added to the sticker set.
-  , createNewStickerFormat           :: Text -- ^ Format of stickers in the set, must be one of “static”, “animated”, “video”.
-  , createNewStickerSetType             :: Maybe StickerSetType -- ^ Type of stickers in the set, pass “regular”, “mask”, or “custom_emoji”. By default, a regular sticker set is created.
+  , createNewStickerSetStickerType   :: Maybe StickerSetType -- ^ Type of stickers in the set, pass “regular”, “mask”, or “custom_emoji”. By default, a regular sticker set is created.
   , createNewStickerSetNeedsRepainting :: Maybe Bool -- ^ 'True' if stickers in the sticker set must be repainted to the color of text when used in messages, the accent color if used as emoji status, white on chat photos, or another appropriate color based on context; for custom emoji sticker sets only.
   } deriving Generic
 
@@ -182,9 +182,7 @@
 
 -- | Use this method to create a new sticker
 --   set owned by a user. The bot will be able
---   to edit the sticker set thus created. You
---   must use exactly one of the fields png_sticker or tgs_sticker.
---   Returns True on success.
+--   to edit the sticker set thus created. Returns 'True' on success.
 createNewStickerSet :: CreateNewStickerSetRequest -> ClientM (Response Bool)
 createNewStickerSet = client (Proxy @CreateNewStickerSet)
 
@@ -263,6 +261,7 @@
   { setStickerSetThumbnailName   :: T.Text -- ^ Sticker set name
   , setStickerSetThumbnailUserId :: UserId -- ^ User identifier of the sticker set owner
   , setStickerSetThumbnailThumbnail  :: InputFile -- ^ A PNG image with the thumbnail, must be up to 128 kilobytes in size and have width and height exactly 100px, or a TGS animation with the thumbnail up to 32 kilobytes in size; see <https:\/\/core.telegram.org\/animated_stickers#technical-requirements> for animated sticker technical requirements. Pass a file_id as a String to send a file that already exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data. Animated sticker set thumbnail can't be uploaded via HTTP URL.
+  , setStickerSetThumbnailFormat :: Text -- ^ Format of the thumbnail, must be one of “static” for a __.WEBP__ or __.PNG__ image, “animated” for a __.TGS__ animation, or “video” for a WEBM video.
   } deriving Generic
 
 instance ToJSON SetStickerSetThumbnailRequest where toJSON = gtoJSON
diff --git a/src/Telegram/Bot/API/Types.hs b/src/Telegram/Bot/API/Types.hs
--- a/src/Telegram/Bot/API/Types.hs
+++ b/src/Telegram/Bot/API/Types.hs
@@ -18,16 +18,25 @@
   , module Telegram.Bot.API.Types.BotCommand
   , module Telegram.Bot.API.Types.BotCommandScope
   , module Telegram.Bot.API.Types.BotDescription
+  , module Telegram.Bot.API.Types.Birthdate
   , module Telegram.Bot.API.Types.BotName
   , module Telegram.Bot.API.Types.BotShortDescription
+  , module Telegram.Bot.API.Types.BusinessConnection
+  , module Telegram.Bot.API.Types.BusinessIntro
+  , module Telegram.Bot.API.Types.BusinessMessagesDeleted
+  , module Telegram.Bot.API.Types.BusinessLocation
+  , module Telegram.Bot.API.Types.BusinessOpeningHours
+  , module Telegram.Bot.API.Types.BusinessOpeningHoursInterval
   , module Telegram.Bot.API.Types.CallbackGame
   , module Telegram.Bot.API.Types.CallbackQuery
   , module Telegram.Bot.API.Types.Chat
+  , module Telegram.Bot.API.Types.ChatAdministratorRights
   , module Telegram.Bot.API.Types.ChatBoost
+  , module Telegram.Bot.API.Types.ChatBoostAdded
   , module Telegram.Bot.API.Types.ChatBoostRemoved
   , module Telegram.Bot.API.Types.ChatBoostSource
   , module Telegram.Bot.API.Types.ChatBoostUpdated
-  , module Telegram.Bot.API.Types.ChatAdministratorRights
+  , module Telegram.Bot.API.Types.ChatFullInfo
   , module Telegram.Bot.API.Types.ChatInviteLink
   , module Telegram.Bot.API.Types.ChatJoinRequest
   , module Telegram.Bot.API.Types.ChatLocation
@@ -36,6 +45,7 @@
   , module Telegram.Bot.API.Types.ChatPermissions
   , module Telegram.Bot.API.Types.ChatPhoto
   , module Telegram.Bot.API.Types.ChatShared
+  , module Telegram.Bot.API.Types.ChatType
   , module Telegram.Bot.API.Types.Common
   , module Telegram.Bot.API.Types.Contact
   , module Telegram.Bot.API.Types.CopyMessageId
@@ -62,6 +72,7 @@
   , module Telegram.Bot.API.Types.InlineKeyboardButton
   , module Telegram.Bot.API.Types.InlineKeyboardMarkup
   , module Telegram.Bot.API.Types.InputMedia
+  , module Telegram.Bot.API.Types.InputPollOption
   , module Telegram.Bot.API.Types.Invoice
   , module Telegram.Bot.API.Types.KeyboardButton
   , module Telegram.Bot.API.Types.KeyboardButtonRequestChat
@@ -95,6 +106,7 @@
   , module Telegram.Bot.API.Types.ReplyKeyboardRemove
   , module Telegram.Bot.API.Types.ReplyParameters
   , module Telegram.Bot.API.Types.ResponseParameters
+  , module Telegram.Bot.API.Types.SharedUser
   , module Telegram.Bot.API.Types.ShippingAddress
   , module Telegram.Bot.API.Types.ShippingOption
   , module Telegram.Bot.API.Types.ShippingQuery
@@ -125,16 +137,25 @@
 import Telegram.Bot.API.Types.BotCommand
 import Telegram.Bot.API.Types.BotCommandScope
 import Telegram.Bot.API.Types.BotDescription
+import Telegram.Bot.API.Types.Birthdate
 import Telegram.Bot.API.Types.BotName
 import Telegram.Bot.API.Types.BotShortDescription
+import Telegram.Bot.API.Types.BusinessConnection
+import Telegram.Bot.API.Types.BusinessIntro
+import Telegram.Bot.API.Types.BusinessMessagesDeleted
+import Telegram.Bot.API.Types.BusinessLocation
+import Telegram.Bot.API.Types.BusinessOpeningHours
+import Telegram.Bot.API.Types.BusinessOpeningHoursInterval
 import Telegram.Bot.API.Types.CallbackGame
 import Telegram.Bot.API.Types.CallbackQuery
 import Telegram.Bot.API.Types.Chat
+import Telegram.Bot.API.Types.ChatAdministratorRights
 import Telegram.Bot.API.Types.ChatBoost
+import Telegram.Bot.API.Types.ChatBoostAdded
 import Telegram.Bot.API.Types.ChatBoostRemoved
 import Telegram.Bot.API.Types.ChatBoostSource
 import Telegram.Bot.API.Types.ChatBoostUpdated
-import Telegram.Bot.API.Types.ChatAdministratorRights
+import Telegram.Bot.API.Types.ChatFullInfo
 import Telegram.Bot.API.Types.ChatInviteLink
 import Telegram.Bot.API.Types.ChatJoinRequest
 import Telegram.Bot.API.Types.ChatLocation
@@ -143,6 +164,7 @@
 import Telegram.Bot.API.Types.ChatPermissions
 import Telegram.Bot.API.Types.ChatPhoto
 import Telegram.Bot.API.Types.ChatShared
+import Telegram.Bot.API.Types.ChatType
 import Telegram.Bot.API.Types.Common
 import Telegram.Bot.API.Types.Contact
 import Telegram.Bot.API.Types.CopyMessageId
@@ -169,6 +191,7 @@
 import Telegram.Bot.API.Types.InlineKeyboardButton
 import Telegram.Bot.API.Types.InlineKeyboardMarkup
 import Telegram.Bot.API.Types.InputMedia
+import Telegram.Bot.API.Types.InputPollOption
 import Telegram.Bot.API.Types.Invoice
 import Telegram.Bot.API.Types.KeyboardButton
 import Telegram.Bot.API.Types.KeyboardButtonRequestChat
@@ -202,6 +225,7 @@
 import Telegram.Bot.API.Types.ReplyKeyboardRemove
 import Telegram.Bot.API.Types.ReplyParameters
 import Telegram.Bot.API.Types.ResponseParameters
+import Telegram.Bot.API.Types.SharedUser
 import Telegram.Bot.API.Types.ShippingAddress
 import Telegram.Bot.API.Types.ShippingOption
 import Telegram.Bot.API.Types.ShippingQuery
diff --git a/src/Telegram/Bot/API/Types/BackgroundFill.hs b/src/Telegram/Bot/API/Types/BackgroundFill.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/BackgroundFill.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+module Telegram.Bot.API.Types.BackgroundFill where
+
+import Data.Aeson (FromJSON (..), ToJSON (..), Value (..), (.=), (.:), withObject)
+import Data.Aeson.Types (Parser)
+import Data.Text
+import GHC.Generics (Generic)
+
+import qualified Data.Text as Text
+
+import Telegram.Bot.API.Types.Common
+import Telegram.Bot.API.Internal.Utils
+
+-- ** 'BackgroundFill'
+
+-- | This object describes the way a background is filled based on the selected colors. Currently, it can be one of
+--
+-- * BackgroundFillSolid
+-- * BackgroundFillGradient
+-- * BackgroundFillFreeformGradient
+--
+data BackgroundFill
+  -- | The background is filled using the selected color.
+  = BackgroundFillSolid
+      { backgroundFillSolidType :: Text -- ^ Type of the background fill, always “solid”.
+      , backgroundFillSolidColor :: Int  -- ^ The color of the background fill in the RGB24 format.
+      }
+  -- | The background is a gradient fill.
+  | BackgroundFillGradient
+      { backgroundFillGradientType :: Text -- ^ Type of the background fill, always “gradient”.
+      , backgroundFillGradientTopColor :: Int -- ^ Top color of the gradient in the RGB24 format.
+      , backgroundFillGradientBottomColor :: Int -- ^ Bottom color of the gradient in the RGB24 format.
+      , backgroundFillGradientRotationAngle :: Int -- ^ Clockwise rotation angle of the background fill in degrees; @0-359@.
+      }
+  -- | The background is a freeform gradient that rotates after every message in the chat.
+  | BackgroundFillFreeformGradient
+      { backgroundFillFreeformGradientType :: Text -- ^ Type of the background fill, always “freeform_gradient”.
+      , backgroundFillFreeformGradientColors :: [Int] -- ^ A list of the 3 or 4 base colors that are used to generate the freeform gradient in the RGB24 format.
+      }
+  deriving (Generic, Show)
+
+instance ToJSON BackgroundFill where
+  toJSON = \case
+    BackgroundFillSolid _t c -> addJsonFields
+      (Object mempty)
+      (addType "solid" ["color" .= c])
+    BackgroundFillGradient _t tc bc ra -> addJsonFields
+      (Object mempty)
+      (addType "gradient" ["top_color" .= tc, "bottom_color" .= bc, "rotation_angle" .= ra])
+    BackgroundFillFreeformGradient _t cs -> addJsonFields
+      (Object mempty)
+      (addType "freeform_gradient" ["colors" .= cs])
+
+instance FromJSON BackgroundFill where
+  parseJSON = withObject "BackgroundFill" \o ->
+    (o .: "type" :: Parser Text) >>= \case
+    "solid" -> BackgroundFillSolid
+      <$> o .: "type"
+      <*> o .: "color"
+    "gradient" ->BackgroundFillGradient
+      <$> o .: "type"
+      <*> o .: "top_color"
+      <*> o .: "bottom_color"
+      <*> o .: "rotation_angle"
+    "freeform_gradient" -> BackgroundFillFreeformGradient
+      <$> o .: "type"
+      <*> o .: "colors"
+    t -> fail $ Text.unpack ("Unknown type: " <> t)
diff --git a/src/Telegram/Bot/API/Types/BackgroundType.hs b/src/Telegram/Bot/API/Types/BackgroundType.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/BackgroundType.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+module Telegram.Bot.API.Types.BackgroundType where
+
+import Data.Aeson (FromJSON (..), ToJSON (..), Value (..), (.=), (.:), withObject)
+import Data.Aeson.Types (Parser)
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+import qualified Data.Text as Text
+
+import Telegram.Bot.API.Types.BackgroundFill
+import Telegram.Bot.API.Types.Common
+import Telegram.Bot.API.Types.Document
+import Telegram.Bot.API.Internal.Utils
+
+-- ** 'BackgroundType'
+
+-- | This object describes the type of a background. Currently, it can be one of
+--
+-- * BackgroundTypeFill
+-- * BackgroundTypeWallpaper
+-- * BackgroundTypePattern
+-- * BackgroundTypeChatTheme
+--
+data BackgroundType
+  -- | The background is automatically filled based on the selected colors.
+  = BackgroundTypeFill
+      { backgroundTypeFillType :: Text -- ^ Type of the background, always “fill”.
+      , backgroundTypeFillFill :: BackgroundFill -- ^ The background fill.
+      , backgroundTypeFillDarkThemeDimming :: Int -- ^ Dimming of the background in dark themes, as a percentage; @0-100@.
+      }
+  -- | The background is a wallpaper in the JPEG format.
+  | BackgroundTypeWallpaper
+      { backgroundTypeWallpaperType :: Text -- ^ Type of the background, always “wallpaper”.
+      , backgroundTypeWallpaperDocument :: Document -- ^ Document with the wallpaper.
+      , backgroundTypeWallpaperDarkThemeDimming :: Int -- ^ Dimming of the background in dark themes, as a percentage; @0-100@.
+      , backgroundTypeWallpaperIsBlurred :: Maybe Bool -- ^ 'True', if the wallpaper is downscaled to fit in a @450x450@ square and then box-blurred with radius 12.
+      , backgroundTypeWallpaperIsMoving :: Maybe Bool -- ^ 'True', if the background moves slightly when the device is tilted.
+      }
+  -- | The background is a PNG or TGV (gzipped subset of SVG with MIME type “application/x-tgwallpattern”) pattern to be combined with the background fill chosen by the user.
+  | BackgroundTypePattern
+      { backgroundTypePatternType :: Text -- ^ Type of the background, always “pattern”.
+      , backgroundTypePatternDocument :: Document -- ^ Document with the pattern.
+      , backgroundTypePatternFill :: BackgroundFill -- ^ The background fill that is combined with the pattern.
+      , backgroundTypePatternIntensity :: Int -- ^ Intensity of the pattern when it is shown above the filled background; @0-100@.
+      , backgroundTypePatternIsInverted :: Maybe Bool -- ^ 'True', if the background fill must be applied only to the pattern itself. All other pixels are black in this case. For dark themes only.
+      , backgroundTypePatternIsMoving :: Maybe Bool -- ^ 'True', if the background moves slightly when the device is tilted.
+      }
+  -- | The background is taken directly from a built-in chat theme.
+  | BackgroundTypeChatTheme
+      { backgroundTypeChatThemeType :: Text -- ^ Type of the background, always “chat_theme”.
+      , backgroundTypeChatThemeThemeName :: Text -- ^ Name of the chat theme, which is usually an emoji.
+      }
+  deriving (Generic, Show)
+
+instance ToJSON BackgroundType where
+  toJSON = \case
+     BackgroundTypeFill _t f dtd -> addJsonFields
+       (Object mempty)
+       (addType "fill" ["fill" .= f, "dark_theme_dimming" .= dtd])
+     BackgroundTypeWallpaper _t d dtd ib im -> addJsonFields
+       (Object mempty)
+       (addType "wallpaper" ["document" .= d, "dark_theme_dimming" .= dtd, "is_blurred" .= ib, "is_moving" .= im])
+     BackgroundTypePattern _t d f i ii im -> addJsonFields
+       (Object mempty)
+       (addType "pattern" ["document" .= d, "fill" .= f, "intensity" .= i, "is_inverted" .= ii, "is_moving" .= im])
+     BackgroundTypeChatTheme _t tn -> addJsonFields
+       (Object mempty)
+       (addType "chat_theme" ["theme_name" .= tn])
+
+instance FromJSON BackgroundType where
+  parseJSON = withObject "BackgroundType" \o ->
+    (o .: "type" :: Parser Text) >>= \case
+    "fill" -> BackgroundTypeFill
+      <$> o .: "type"
+      <*> o .: "fill"
+      <*> o .: "dark_theme_dimming"
+    "wallpaper" -> BackgroundTypeWallpaper
+      <$> o .: "type"
+      <*> o .: "document"
+      <*> o .: "dark_theme_dimming"
+      <*> o .: "is_blurred"
+      <*> o .: "is_moving"
+    "pattern" -> BackgroundTypePattern
+      <$> o .: "type"
+      <*> o .: "document"
+      <*> o .: "fill"
+      <*> o .: "intensity"
+      <*> o .: "is_inverted"
+      <*> o .: "is_moving"
+    "chat_theme" -> BackgroundTypeChatTheme
+      <$> o .: "type"
+      <*> o .: "theme_name"
+    t -> fail $ Text.unpack ("Unknown type: " <> t)
diff --git a/src/Telegram/Bot/API/Types/Birthdate.hs b/src/Telegram/Bot/API/Types/Birthdate.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/Birthdate.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+module Telegram.Bot.API.Types.Birthdate where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import Data.Time.Calendar
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Internal.Utils
+
+
+-- ** 'Birthdate'
+
+-- | Describes the birthdate of a user.
+data Birthdate = Birthdate
+  { birthdateDay :: DayOfMonth -- ^ Day of the user's birth; 1-31.
+  , birthdateMonth :: MonthOfYear -- ^ Month of the user's birth; 1-12.
+  , birthdate :: Maybe Year -- ^ Year of the user's birth.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON Birthdate where toJSON = gtoJSON
+instance FromJSON Birthdate where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/BusinessConnection.hs b/src/Telegram/Bot/API/Types/BusinessConnection.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/BusinessConnection.hs
@@ -0,0 +1,26 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.BusinessConnection where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import Data.Time.Clock.POSIX (POSIXTime)
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Types.Common
+import Telegram.Bot.API.Types.User
+import Telegram.Bot.API.Internal.Utils
+
+-- ** 'BusinessConnection'
+
+-- | Describes the connection of the bot with a business account.
+data BusinessConnection = BusinessConnection
+  { businessConnectionId :: BusinessConnectionId -- ^ Unique identifier of the business connection.
+  , businessConnectionUser :: User -- ^ Business account user that created the business connection.
+  , businessConnectionUserChatId :: ChatId -- ^ Identifier of a private chat with the user who created the business connection. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier.
+  , businessConnectionDate :: POSIXTime -- ^ Date the connection was established in Unix time.
+  , businessConnectionCanReply :: Bool -- ^ 'True', if the bot can act on behalf of the business account in chats that were active in the last 24 hours.
+  , businessConnectionIsEnabled :: Bool -- ^ 'True', if the connection is active.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   BusinessConnection where toJSON = gtoJSON
+instance FromJSON BusinessConnection where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/BusinessIntro.hs b/src/Telegram/Bot/API/Types/BusinessIntro.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/BusinessIntro.hs
@@ -0,0 +1,22 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.BusinessIntro where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Internal.Utils
+import Telegram.Bot.API.Types.Sticker (Sticker)
+
+-- ** 'BusinessIntro'
+
+-- | Contains information about the start page settings of a Telegram Business account.
+data BusinessIntro = BusinessIntro
+  { businessIntroTitle :: Maybe Text -- ^ Title text of the business intro.
+  , businessIntroMessage :: Maybe Text -- ^ Message text of the business intro.
+  , businessIntroSticker :: Maybe Sticker -- ^ Sticker of the business intro.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   BusinessIntro where toJSON = gtoJSON
+instance FromJSON BusinessIntro where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/BusinessLocation.hs b/src/Telegram/Bot/API/Types/BusinessLocation.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/BusinessLocation.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.BusinessLocation where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Internal.Utils
+import Telegram.Bot.API.Types.Location
+
+-- ** 'BusinessLocation'
+
+-- | Contains information about the location of a Telegram Business account.
+data BusinessLocation = BusinessLocation
+  { businessLocationAddress :: Text -- ^ Address of the business.
+  , businessLocationLocation :: Maybe Location -- ^ Location of the business.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   BusinessLocation where toJSON = gtoJSON
+instance FromJSON BusinessLocation where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/BusinessMessagesDeleted.hs b/src/Telegram/Bot/API/Types/BusinessMessagesDeleted.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/BusinessMessagesDeleted.hs
@@ -0,0 +1,22 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.BusinessMessagesDeleted where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Types.Chat
+import Telegram.Bot.API.Types.Common
+import Telegram.Bot.API.Internal.Utils
+
+-- ** 'BusinessMessagesDeleted'
+
+-- | This object is received when messages are deleted from a connected business account.
+data BusinessMessagesDeleted = BusinessMessagesDeleted
+  { businessMessagesDeletedBusinessConnectionId :: BusinessConnectionId -- ^ Unique identifier of the business connection.
+  , businessMessagesDeletedChat :: Chat -- ^ Information about a chat in the business account. The bot may not have access to the chat or the corresponding user.
+  , businessMessagesDeletedMessageIds :: [MessageId] -- ^ The list of identifiers of deleted messages in the chat of the business account.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   BusinessMessagesDeleted where toJSON = gtoJSON
+instance FromJSON BusinessMessagesDeleted where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/BusinessOpeningHours.hs b/src/Telegram/Bot/API/Types/BusinessOpeningHours.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/BusinessOpeningHours.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.BusinessOpeningHours where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Internal.Utils
+import Telegram.Bot.API.Types.BusinessOpeningHoursInterval
+
+-- ** 'BusinessOpeningHours'
+
+-- | 
+data BusinessOpeningHours = BusinessOpeningHours
+  { businessOpeningHoursTimeZoneName :: Text -- ^ Unique name of the time zone for which the opening hours are defined.
+  , businessOpeningHoursOpeningHours :: [BusinessOpeningHoursInterval] -- ^ List of time intervals describing business opening hours.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   BusinessOpeningHours where toJSON = gtoJSON
+instance FromJSON BusinessOpeningHours where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/BusinessOpeningHoursInterval.hs b/src/Telegram/Bot/API/Types/BusinessOpeningHoursInterval.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/BusinessOpeningHoursInterval.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.BusinessOpeningHoursInterval where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Internal.Utils
+
+-- ** 'BusinessOpeningHoursInterval'
+
+-- | Contains information about the start page settings of a Telegram Business account.
+data BusinessOpeningHoursInterval = BusinessOpeningHoursInterval
+  { businessOpeningHoursIntervalOpeningMinute :: Int -- ^ The minute's sequence number in a week, starting on Monday, marking the start of the time interval during which the business is open; @0 - 7 * 24 * 60@.
+  , businessOpeningHoursIntervalClosingMinute :: Int -- ^ The minute's sequence number in a week, starting on Monday, marking the end of the time interval during which the business is open; @0 - 8 * 24 * 60@.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   BusinessOpeningHoursInterval where toJSON = gtoJSON
+instance FromJSON BusinessOpeningHoursInterval where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/Chat.hs b/src/Telegram/Bot/API/Types/Chat.hs
--- a/src/Telegram/Bot/API/Types/Chat.hs
+++ b/src/Telegram/Bot/API/Types/Chat.hs
@@ -1,76 +1,27 @@
 {-# LANGUAGE DeriveGeneric #-}
 module Telegram.Bot.API.Types.Chat where
 
-import Data.Aeson (ToJSON(..), FromJSON(..))
-import Data.Time.Clock.POSIX (POSIXTime)
-import Data.Text (Text)
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import Data.Text
 import GHC.Generics (Generic)
 
-import Telegram.Bot.API.Types.ChatLocation
-import Telegram.Bot.API.Types.ChatPhoto
-import Telegram.Bot.API.Types.ChatPermissions
-import Telegram.Bot.API.Types.Common
-import Telegram.Bot.API.Types.Message
-import Telegram.Bot.API.Types.ReactionType
 import Telegram.Bot.API.Internal.Utils
+import Telegram.Bot.API.Types.ChatType
+import Telegram.Bot.API.Types.Common
 
--- ** Chat
+-- ** 'Chat'
 
 -- | This object represents a chat.
---
--- <https://core.telegram.org/bots/api#chat>
 data Chat = Chat
-  { chatId               :: ChatId          -- ^ Unique identifier for this chat. This number may be greater than 32 bits and some programming languages may have difficulty/silent defects in interpreting it. But it is smaller than 52 bits, so a signed 64 bit integer or double-precision float type are safe for storing this identifier.
-  , chatType             :: ChatType        -- ^ Type of chat.
-  , chatTitle            :: Maybe Text      -- ^ Title, for supergroups, channels and group chats
-  , chatUsername         :: Maybe Text      -- ^ Username, for private chats, supergroups and channels if available
-  , chatFirstName        :: Maybe Text      -- ^ First name of the other party in a private chat
-  , chatLastName         :: Maybe Text      -- ^ Last name of the other party in a private chat
-  , chatIsForum          :: Maybe Bool      -- ^ 'True', if the supergroup chat is a forum (has topics enabled).
-  , chatPhoto            :: Maybe ChatPhoto -- ^ Chat photo. Returned only in getChat.
-  , chatActiveUsernames  :: Maybe Text      -- ^ If non-empty, the list of all active chat usernames; for private chats, supergroups and channels. Returned only in 'getChat'.
-  , chatAvailableReactions :: Maybe [ReactionType] -- ^ List of available reactions allowed in the chat. If omitted, then all emoji reactions are allowed. Returned only in 'getChat'.
-  , chatAccentColorId    :: Maybe Int -- ^ Identifier of the accent color for the chat name and backgrounds of the chat photo, reply header, and link preview. See [accent colors](https://core.telegram.org/bots/api#accent-colors) for more details. Returned only in 'getChat'. Always returned in 'getChat'.
-  , chatBackgroundCustomEmojiId :: Maybe Text -- ^ Custom emoji identifier of emoji chosen by the chat for the reply header and link preview background. Returned only in 'getChat'.
-  , chatProfileAccentColorId :: Maybe Int -- ^ Identifier of the accent color for the chat's profile background. See [profile accent colors](https://core.telegram.org/bots/api#profile-accent-colors) for more details. Returned only in getChat.
-  , chatProfileBackgroundCustomEmojiId :: Maybe Text -- ^ Custom emoji identifier of the emoji chosen by the chat for its profile background. Returned only in 'getChat'.
-  , chatEmojiStatusCustomEmojiId :: Maybe Text -- ^ Custom emoji identifier of emoji status of the other party in a private chat. Returned only in 'getChat'.
-  , chatEmojiStatusExpirationDate :: Maybe POSIXTime -- ^ Expiration date of the emoji status of the chat or the other party in a private chat, in Unix time, if any. Returned only in 'getChat'.
-  , chatBio              :: Maybe Text      -- ^ Bio of the other party in a private chat. Returned only in `getChat`.
-  , chatHasPrivateForwards :: Maybe Bool    -- ^ 'True', if privacy settings of the other party in the private chat allows to use `tg://user?id=<user_id>` links only in chats with the user. Returned only in getChat.
-  , chatHasRestrictedVoiceAndVideoMessages :: Maybe Bool -- ^ 'True', if the privacy settings of the other party restrict sending voice and video note messages in the private chat. Returned only in 'getChat'.
-  , chatJoinToSendMessages :: Maybe Bool    -- ^ 'True', if users need to join the supergroup before they can send messages. Returned only in 'getChat'.
-  , chatJoinByRequest    :: Maybe Bool      -- ^ 'True', if all users directly joining the supergroup need to be approved by supergroup administrators. Returned only in 'getChat'.
-  , chatDescription      :: Maybe Text      -- ^ Description, for supergroups and channel chats. Returned only in getChat.
-  , chatInviteLink       :: Maybe Text      -- ^ Chat invite link, for supergroups and channel chats. Returned only in getChat.
-  , chatPinnedMessage    :: Maybe Message   -- ^ Pinned message, for supergroups. Returned only in getChat.
-  , chatPermissions      :: Maybe ChatPermissions -- ^ Default chat member permissions, for groups and supergroups.
-  , chatSlowModeDelay    :: Maybe Int       -- ^ For supergroups, the minimum allowed delay between consecutive messages sent by each unpriviledged user; in seconds.
-  , chatMessageAutoDeleteTime :: Maybe POSIXTime -- ^ The time after which all messages sent to the chat will be automatically deleted; in seconds.
-  , chatHasAggressiveAntiSpamEnabled :: Maybe Bool -- ^ 'True', if aggressive anti-spam checks are enabled in the supergroup. The field is only available to chat administrators. Returned only in 'getChat'.
-  , chatHasHiddenMembers :: Maybe Bool      -- ^ 'True', if non-administrators can only get the list of bots and administrators in the chat. Returned only in 'getChat'.
-  , chatHasProtectedContent :: Maybe Bool   -- ^ 'True', if messages from the chat can't be forwarded to other chats.
-  , chatHasVisibleHistory :: Maybe Bool     -- ^ 'True', if new chat members will have access to old messages; available only to chat administrators. Returned only in 'getChat'.
-  , chatStickerSetName   :: Maybe Text      -- ^ For supergroups, name of group sticker set. Returned only in getChat.
-  , chatCanSetStickerSet :: Maybe Bool      -- ^ True, if the bot can change the group sticker set. Returned only in `getChat`.
-  , chatLinkedChatId     :: Maybe ChatId    -- ^ Unique identifier for the linked chat, i.e. the discussion group identifier for a channel and vice versa; for supergroups and channel chats. This identifier may be greater than 32 bits and some programming languages may have difficulty/silent defects in interpreting it. But it is smaller than 52 bits, so a signed 64 bit integer or double-precision float type are safe for storing this identifier.
-  , chatLocation         :: Maybe ChatLocation -- ^ For supergroups, the location to which the supergroup is connected. Returned only in getChat.
+  { chatId :: ChatId -- ^ Unique identifier for this chat. This number may be greater than 32 bits and some programming languages may have difficulty/silent defects in interpreting it. But it is smaller than 52 bits, so a signed 64 bit integer or double-precision float type are safe for storing this identifier.
+  , chatType :: ChatType -- ^ Type of the chat, can be either “private”, “group”, “supergroup” or “channel”
+  , chatTitle :: Maybe Text -- ^ Title, for supergroups, channels and group chats.
+  , chatUsername :: Maybe Text -- ^ Username, for private chats, supergroups and channels if available.
+  , chatFirstName :: Maybe Text -- ^ First name of the other party in a private chat.
+  , chatLastName :: Maybe Text -- ^ Last name of the other party in a private chat.
+  , chatIsForum :: Maybe Bool -- ^ 'True', if the supergroup chat is a forum (has topics enabled).
   }
   deriving (Generic, Show)
 
 instance ToJSON   Chat where toJSON = gtoJSON
 instance FromJSON Chat where parseJSON = gparseJSON
-
--- | Type of chat.
-data ChatType
-  = ChatTypePrivate
-  | ChatTypeGroup
-  | ChatTypeSupergroup
-  | ChatTypeChannel
-  | ChatTypeSender
-  deriving (Generic, Show)
-
-instance ToJSON   ChatType where
-  toJSON = gtoJSON
-instance FromJSON ChatType where
-  parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/ChatAdministratorRights.hs b/src/Telegram/Bot/API/Types/ChatAdministratorRights.hs
--- a/src/Telegram/Bot/API/Types/ChatAdministratorRights.hs
+++ b/src/Telegram/Bot/API/Types/ChatAdministratorRights.hs
@@ -18,12 +18,12 @@
   , chatAdministratorRightsCanPromoteMembers   :: Bool -- ^ 'True', if the administrator can add new administrators with a subset of their own privileges or demote administrators that he has promoted, directly or indirectly (promoted by administrators that were appointed by the user).
   , chatAdministratorRightsCanChangeInfo       :: Bool -- ^ 'True', if the user is allowed to change the chat title, photo and other settings.
   , chatAdministratorRightsCanInviteUsers      :: Bool -- ^ 'True', if the user is allowed to invite new users to the chat.
+  , chatAdministratorRightsCanPostStories      :: Maybe Bool -- ^ 'True', if the administrator can post stories to the chat.
+  , chatAdministratorRightsCanEditStories      :: Maybe Bool -- ^ 'True', if the administrator can edit stories posted by other users, post stories to the chat page, pin chat stories, and access the chat's story archive.
+  , chatAdministratorRightsCanDeleteStories    :: Maybe Bool -- ^ 'True', if the administrator can delete stories posted by other users.
   , chatAdministratorRightsCanPostMessages     :: Maybe Bool -- ^ 'True', if the administrator can post in the channel; channels only.
   , chatAdministratorRightsCanEditMessages     :: Maybe Bool -- ^ 'True', if the administrator can edit messages of other users and can pin messages; channels only.
   , chatAdministratorRightsCanPinMessages      :: Maybe Bool -- ^ 'True', if the user is allowed to pin messages; groups and supergroups only
-  , chatAdministratorRightsCanPostStories      :: Maybe Bool -- ^ 'True', if the administrator can post stories in the channel; channels only.
-  , chatAdministratorRightsCanEditStories      :: Maybe Bool -- ^ 'True', if the administrator can edit stories posted by other users; channels only.
-  , chatAdministratorRightsCanDeleteStories    :: Maybe Bool -- ^ 'True', if the administrator can delete stories posted by other users; channels only.
   , chatAdministratorRightsCanManageTopics     :: Maybe Bool -- ^ 'True', if the user is allowed to create, rename, close, and reopen forum topics; supergroups only.
   }
   deriving (Generic, Show)
diff --git a/src/Telegram/Bot/API/Types/ChatBackground.hs b/src/Telegram/Bot/API/Types/ChatBackground.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/ChatBackground.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.ChatBackground where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Internal.Utils
+import Telegram.Bot.API.Types.BackgroundType
+
+-- ** 'ChatBackground'
+
+-- | This object represents a chat background.
+data ChatBackground = ChatBackground
+  { chatBackgroundType :: BackgroundType -- ^ Type of the background.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   ChatBackground where toJSON = gtoJSON
+instance FromJSON ChatBackground where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/ChatBoostAdded.hs b/src/Telegram/Bot/API/Types/ChatBoostAdded.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/ChatBoostAdded.hs
@@ -0,0 +1,18 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.ChatBoostAdded where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Internal.Utils
+
+-- ** 'ChatBoostAdded'
+
+-- | This object represents a boost added to a chat or changed.
+data ChatBoostAdded = ChatBoostAdded
+  { chatBoostAddedBoostCount :: Int -- ^ Number of boosts added by the user.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   ChatBoostAdded where toJSON = gtoJSON
+instance FromJSON ChatBoostAdded where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/ChatFullInfo.hs b/src/Telegram/Bot/API/Types/ChatFullInfo.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/ChatFullInfo.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.ChatFullInfo where
+
+import Data.Aeson (ToJSON(..), FromJSON(..))
+import Data.Time.Clock.POSIX (POSIXTime)
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Types.Birthdate
+import Telegram.Bot.API.Types.BusinessIntro
+import Telegram.Bot.API.Types.BusinessLocation
+import Telegram.Bot.API.Types.BusinessOpeningHours
+import Telegram.Bot.API.Types.Chat
+import Telegram.Bot.API.Types.ChatLocation
+import Telegram.Bot.API.Types.ChatPhoto
+import Telegram.Bot.API.Types.ChatPermissions
+import Telegram.Bot.API.Types.ChatType
+import Telegram.Bot.API.Types.Common
+import Telegram.Bot.API.Types.Message
+import Telegram.Bot.API.Types.ReactionType
+import Telegram.Bot.API.Internal.Utils
+
+-- ** Chat
+
+-- | This object contains full information about a chat.
+--
+-- <https://core.telegram.org/bots/api#chatfullinfo>
+data ChatFullInfo = ChatFullInfo
+  { chatFullInfoId               :: ChatId          -- ^ Unique identifier for this chat. This number may be greater than 32 bits and some programming languages may have difficulty/silent defects in interpreting it. But it is smaller than 52 bits, so a signed 64 bit integer or double-precision float type are safe for storing this identifier.
+  , chatFullInfoIsBot            :: Maybe Bool      -- ^ 'True', if this user is a bot.
+  , chatFullInfoType             :: ChatType        -- ^ Type of chat.
+  , chatFullInfoTitle            :: Maybe Text      -- ^ Title, for supergroups, channels and group chats.
+  , chatFullInfoUsername         :: Maybe Text      -- ^ Username, for private chats, supergroups and channels if available.
+  , chatFullInfoFirstName        :: Maybe Text      -- ^ First name of the other party in a private chat.
+  , chatFullInfoLastName         :: Maybe Text      -- ^ Last name of the other party in a private chat.
+  , chatFullInfoIsForum          :: Maybe Bool      -- ^ 'True', if the supergroup chat is a forum (has topics enabled).
+  , chatFullInfoAccentColorId    :: Maybe Int -- ^ Identifier of the accent color for the chat name and backgrounds of the chat photo, reply header, and link preview. See [accent colors](https://core.telegram.org/bots/api#accent-colors) for more details. Returned only in 'getChat'. Always returned in 'getChat'.
+  , chatFullInfoMaxReactionCount :: Int -- ^ The maximum number of reactions that can be set on a message in the chat.
+  , chatFullInfoPhoto            :: Maybe ChatPhoto -- ^ Chat photo. Returned only in getChat.
+  , chatFullInfoActiveUsernames  :: Maybe Text      -- ^ If non-empty, the list of all active chat usernames; for private chats, supergroups and channels. Returned only in 'getChat'.
+  , chatFullInfoBirthdate        :: Maybe Birthdate -- ^ For private chats, the date of birth of the user.
+  , chatFullInfoBusinessIntro    :: Maybe BusinessIntro -- ^ For private chats with business accounts, the intro of the business.
+  , chatFullInfoBusinessLocation :: Maybe BusinessLocation -- ^ For private chats with business accounts, the location of the business.
+  , chatFullInfoBusinessOpeningHours :: Maybe BusinessOpeningHours -- ^ For private chats with business accounts, the opening hours of the business.
+  , chatFullInfoPersonalChat     :: Maybe Chat -- ^ For private chats, the personal channel of the user. 
+  , chatFullInfoAvailableReactions :: Maybe [ReactionType] -- ^ List of available reactions allowed in the chat. If omitted, then all emoji reactions are allowed. Returned only in 'getChat'.
+  , chatFullInfoBackgroundCustomEmojiId :: Maybe Text -- ^ Custom emoji identifier of emoji chosen by the chat for the reply header and link preview background. Returned only in 'getChat'.
+  , chatFullInfoProfileAccentColorId :: Maybe Int -- ^ Identifier of the accent color for the chat's profile background. See [profile accent colors](https://core.telegram.org/bots/api#profile-accent-colors) for more details. Returned only in getChat.
+  , chatFullInfoProfileBackgroundCustomEmojiId :: Maybe Text -- ^ Custom emoji identifier of the emoji chosen by the chat for its profile background. Returned only in 'getChat'.
+  , chatFullInfoEmojiStatusCustomEmojiId :: Maybe Text -- ^ Custom emoji identifier of emoji status of the other party in a private chat. Returned only in 'getChat'.
+  , chatFullInfoEmojiStatusExpirationDate :: Maybe POSIXTime -- ^ Expiration date of the emoji status of the chat or the other party in a private chat, in Unix time, if any. Returned only in 'getChat'.
+  , chatFullInfoBio              :: Maybe Text      -- ^ Bio of the other party in a private chat. Returned only in `getChat`.
+  , chatFullInfoHasPrivateForwards :: Maybe Bool    -- ^ 'True', if privacy settings of the other party in the private chat allows to use `tg://user?id=<user_id>` links only in chats with the user. Returned only in getChat.
+  , chatFullInfoHasRestrictedVoiceAndVideoMessages :: Maybe Bool -- ^ 'True', if the privacy settings of the other party restrict sending voice and video note messages in the private chat. Returned only in 'getChat'.
+  , chatFullInfoJoinToSendMessages :: Maybe Bool    -- ^ 'True', if users need to join the supergroup before they can send messages. Returned only in 'getChat'.
+  , chatFullInfoJoinByRequest    :: Maybe Bool      -- ^ 'True', if all users directly joining the supergroup need to be approved by supergroup administrators. Returned only in 'getChat'.
+  , chatFullInfoDescription      :: Maybe Text      -- ^ Description, for supergroups and channel chats. Returned only in getChat.
+  , chatFullInfoInviteLink       :: Maybe Text      -- ^ Chat invite link, for supergroups and channel chats. Returned only in getChat.
+  , chatFullInfoPinnedMessage    :: Maybe Message   -- ^ Pinned message, for supergroups. Returned only in getChat.
+  , chatFullInfoPermissions      :: Maybe ChatPermissions -- ^ Default chat member permissions, for groups and supergroups.
+  , chatFullInfoSlowModeDelay    :: Maybe Int       -- ^ For supergroups, the minimum allowed delay between consecutive messages sent by each unpriviledged user; in seconds.
+  , chatFullInfoUnrestrictBootCount :: Maybe Int -- ^ For supergroups, the minimum number of boosts that a non-administrator user needs to add in order to ignore slow mode and chat permissions.
+  , chatFullInfoMessageAutoDeleteTime :: Maybe POSIXTime -- ^ The time after which all messages sent to the chat will be automatically deleted; in seconds.
+  , chatFullInfoHasAggressiveAntiSpamEnabled :: Maybe Bool -- ^ 'True', if aggressive anti-spam checks are enabled in the supergroup. The field is only available to chat administrators. Returned only in 'getChat'.
+  , chatFullInfoHasHiddenMembers :: Maybe Bool      -- ^ 'True', if non-administrators can only get the list of bots and administrators in the chat. Returned only in 'getChat'.
+  , chatFullInfoHasProtectedContent :: Maybe Bool   -- ^ 'True', if messages from the chat can't be forwarded to other chats.
+  , chatFullInfoHasVisibleHistory :: Maybe Bool     -- ^ 'True', if new chat members will have access to old messages; available only to chat administrators. Returned only in 'getChat'.
+  , chatFullInfoStickerSetName   :: Maybe Text      -- ^ For supergroups, name of group sticker set. Returned only in getChat.
+  , chatFullInfoCanSetStickerSet :: Maybe Bool      -- ^ True, if the bot can change the group sticker set. Returned only in `getChat`.
+  , chatFullInfoCustomEmojiStickerSet :: Maybe Text -- ^ For supergroups, the name of the group's custom emoji sticker set. Custom emoji from this set can be used by all users and bots in the group.
+  , chatFullInfoLinkedChatId     :: Maybe ChatId    -- ^ Unique identifier for the linked chat, i.e. the discussion group identifier for a channel and vice versa; for supergroups and channel chats. This identifier may be greater than 32 bits and some programming languages may have difficulty/silent defects in interpreting it. But it is smaller than 52 bits, so a signed 64 bit integer or double-precision float type are safe for storing this identifier.
+  , chatFullInfoLocation         :: Maybe ChatLocation -- ^ For supergroups, the location to which the supergroup is connected. Returned only in getChat.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   ChatFullInfo where toJSON = gtoJSON
+instance FromJSON ChatFullInfo where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/ChatMemberUpdated.hs b/src/Telegram/Bot/API/Types/ChatMemberUpdated.hs
--- a/src/Telegram/Bot/API/Types/ChatMemberUpdated.hs
+++ b/src/Telegram/Bot/API/Types/ChatMemberUpdated.hs
@@ -21,6 +21,7 @@
   , chatMemberUpdatedOldChatMember :: ChatMember           -- ^ Previous information about the chat member.
   , chatMemberUpdatedNewChatMember :: ChatMember           -- ^ New information about the chat member.
   , chatMemberUpdatedInviteLink    :: Maybe ChatInviteLink -- ^ Chat invite link, which was used by the user to join the chat; for joining by invite link events only.
+  , chatMemberUpdatedViaJoinRequest :: Maybe Bool          -- ^ 'True', if the user joined the chat after sending a direct join request without using an invite link and being approved by an administrator.
   , chatMemberUpdatedViaChatFolderInviteLink :: Maybe Bool -- ^ 'True', if the user joined the chat via a chat folder invite link.
   }
   deriving (Generic, Show)
diff --git a/src/Telegram/Bot/API/Types/ChatShared.hs b/src/Telegram/Bot/API/Types/ChatShared.hs
--- a/src/Telegram/Bot/API/Types/ChatShared.hs
+++ b/src/Telegram/Bot/API/Types/ChatShared.hs
@@ -2,9 +2,11 @@
 module Telegram.Bot.API.Types.ChatShared where
 
 import Data.Aeson (FromJSON (..), ToJSON (..))
+import Data.Text (Text)
 import GHC.Generics (Generic)
 
 import Telegram.Bot.API.Types.Common
+import Telegram.Bot.API.Types.PhotoSize
 import Telegram.Bot.API.Internal.Utils
 
 -- ** 'ChatShared'
@@ -13,6 +15,9 @@
 data ChatShared = ChatShared
   { chatSharedRequestId :: RequestId -- ^ Identifier of the request.
   , chatSharedChatId :: ChatId -- ^ Identifier of the shared chat. This number may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting it. But it has at most 52 significant bits, so a 64-bit integer or double-precision float type are safe for storing this identifier. The bot may not have access to the chat and could be unable to use this identifier, unless the chat is already known to the bot by some other means.
+  , chatSharedTitle :: Maybe Text -- ^ Title of the chat, if the title was requested by the bot.
+  , chatSharedUsername :: Maybe Text -- ^ Username of the chat, if the username was requested by the bot and available.
+  , chatSharedPhoto :: Maybe [PhotoSize] -- ^ Available sizes of the chat photo, if the photo was requested by the bot.
   }
   deriving (Generic, Show)
 
diff --git a/src/Telegram/Bot/API/Types/ChatType.hs b/src/Telegram/Bot/API/Types/ChatType.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/ChatType.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.ChatType where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Internal.Utils
+
+-- ** 'ChatType'
+
+-- | Type of the chat, can be either “private”, “group”, “supergroup” or “channel”.
+
+data ChatType
+  = ChatTypePrivate
+  | ChatTypeGroup
+  | ChatTypeSupergroup
+  | ChatTypeChannel
+  | ChatTypeSender
+  deriving (Generic, Show)
+
+instance ToJSON   ChatType where
+  toJSON = gtoJSON
+instance FromJSON ChatType where
+  parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/Common.hs b/src/Telegram/Bot/API/Types/Common.hs
--- a/src/Telegram/Bot/API/Types/Common.hs
+++ b/src/Telegram/Bot/API/Types/Common.hs
@@ -79,6 +79,10 @@
 newtype CallbackQueryId = CallbackQueryId Text
   deriving (Eq, Show, Generic, ToJSON, FromJSON)
 
+-- | Unique identifier of the business connection.
+newtype BusinessConnectionId = BusinessConnectionId Text
+  deriving (Eq, Show, Generic, ToHttpApiData, ToJSON, FromJSON)
+
 -- | Unique identifier for the target chat
 -- or username of the target channel (in the format @\@channelusername@).
 data SomeChatId
diff --git a/src/Telegram/Bot/API/Types/GiveawayWinners.hs b/src/Telegram/Bot/API/Types/GiveawayWinners.hs
--- a/src/Telegram/Bot/API/Types/GiveawayWinners.hs
+++ b/src/Telegram/Bot/API/Types/GiveawayWinners.hs
@@ -7,7 +7,7 @@
 import GHC.Generics (Generic)
 
 import Telegram.Bot.API.Internal.Utils
-import {-# SOURCE #-} Telegram.Bot.API.Types.Chat
+import Telegram.Bot.API.Types.Chat
 import Telegram.Bot.API.Types.Common
 import Telegram.Bot.API.Types.User
 
diff --git a/src/Telegram/Bot/API/Types/InlineKeyboardButton.hs b/src/Telegram/Bot/API/Types/InlineKeyboardButton.hs
--- a/src/Telegram/Bot/API/Types/InlineKeyboardButton.hs
+++ b/src/Telegram/Bot/API/Types/InlineKeyboardButton.hs
@@ -7,6 +7,7 @@
 
 import Telegram.Bot.API.Types.CallbackGame
 import Telegram.Bot.API.Types.Common
+import Telegram.Bot.API.Types.LoginUrl
 import Telegram.Bot.API.Types.SwitchInlineQueryChosenChat
 import Telegram.Bot.API.Internal.Utils
 
@@ -18,6 +19,7 @@
   , inlineKeyboardButtonUrl               :: Maybe Text -- ^ HTTP url to be opened when button is pressed
   , inlineKeyboardButtonCallbackData      :: Maybe Text -- ^ Data to be sent in a callback query to the bot when button is pressed, 1-64 bytes
   , inlineKeyboardButtonWebApp            :: Maybe WebAppInfo -- ^ Description of the Web App that will be launched when the user presses the button. The Web App will be able to send an arbitrary message on behalf of the user using the method @answerWebAppQuery@. Available only in private chats between a user and the bot.
+  , inlineKeyboardButtonLoginUrl          :: Maybe LoginUrl -- ^ An HTTPS URL used to automatically authorize the user. Can be used as a replacement for the [Telegram Login Widget](https://core.telegram.org/widgets/login).
   , inlineKeyboardButtonSwitchInlineQuery :: Maybe Text -- ^ If set, pressing the button will prompt the user to select one of their chats, open that chat and insert the bot‘s username and the specified inline query in the input field. Can be empty, in which case just the bot’s username will be inserted.
   , inlineKeyboardButtonSwitchInlineQueryCurrentChat :: Maybe Text -- ^ If set, pressing the button will insert the bot‘s username and the specified inline query in the current chat's input field. Can be empty, in which case only the bot’s username will be inserted.
   , inlineKeyboardButtonSwitchInlineQueryChosenChat :: Maybe SwitchInlineQueryChosenChat -- ^ If set, pressing the button will prompt the user to select one of their chats of the specified type, open that chat and insert the bot's username and the specified inline query in the input field.
@@ -28,7 +30,7 @@
   deriving (Generic, Show)
 
 labeledInlineKeyboardButton :: Text -> InlineKeyboardButton
-labeledInlineKeyboardButton label = InlineKeyboardButton label Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
-
+labeledInlineKeyboardButton label = InlineKeyboardButton label Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing
+ 
 instance ToJSON   InlineKeyboardButton where toJSON = gtoJSON
 instance FromJSON InlineKeyboardButton where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/InputPollOption.hs b/src/Telegram/Bot/API/Types/InputPollOption.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/InputPollOption.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.InputPollOption where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Internal.Utils
+import Telegram.Bot.API.Types.MessageEntity
+import Telegram.Bot.API.Types.ParseMode
+
+-- ** 'InputPollOption'
+
+-- | This object contains information about one answer option in a poll to send.
+data InputPollOption = InputPollOption
+  { inputPollOptionText :: Text -- ^ Option text, 1-100 characters.
+  , inputPollOptionTextParseMode :: Maybe ParseMode -- ^ Mode for parsing entities in the text. See [formatting options](https://core.telegram.org/bots/api#formatting-options) for more details. Currently, only custom emoji entities are allowed.
+  , inputPollOptionTextEntities :: Maybe [MessageEntity] -- ^ A JSON-serialized list of special entities that appear in the poll option text. It can be specified instead of @text_parse_mode@.
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   InputPollOption where toJSON = gtoJSON
+instance FromJSON InputPollOption where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/KeyboardButtonRequestChat.hs b/src/Telegram/Bot/API/Types/KeyboardButtonRequestChat.hs
--- a/src/Telegram/Bot/API/Types/KeyboardButtonRequestChat.hs
+++ b/src/Telegram/Bot/API/Types/KeyboardButtonRequestChat.hs
@@ -20,6 +20,9 @@
   , keyboardButtonRequestChatUserAdministratorRights :: Maybe ChatAdministratorRights -- ^ A JSON-serialized object listing the required administrator rights of the user in the chat. The rights must be a superset of @bot_administrator_rights@. If not specified, no additional restrictions are applied.
   , keyboardButtonRequestChatBotAdministratorRights :: Maybe ChatAdministratorRights -- ^ A JSON-serialized object listing the required administrator rights of the bot in the chat. The rights must be a subset of @user_administrator_rights@. If not specified, no additional restrictions are applied.
   , keyboardButtonRequestChatBotIsMember :: Maybe Bool -- ^ Pass 'True' to request a chat with the bot as a member. Otherwise, no additional restrictions are applied.
+  , keyboardButtonRequestChatRequestTitle :: Maybe Bool -- ^ Pass 'True' to request the chat's title.
+  , keyboardButtonRequestChatRequestUsername :: Maybe Bool -- ^ Pass 'True' to request the chat's username.
+  , keyboardButtonRequestChatRequestPhoto :: Maybe Bool -- ^ Pass 'True' to request the chat's photo.
   }
   deriving (Generic, Show)
 
diff --git a/src/Telegram/Bot/API/Types/KeyboardButtonRequestUsers.hs b/src/Telegram/Bot/API/Types/KeyboardButtonRequestUsers.hs
--- a/src/Telegram/Bot/API/Types/KeyboardButtonRequestUsers.hs
+++ b/src/Telegram/Bot/API/Types/KeyboardButtonRequestUsers.hs
@@ -17,6 +17,9 @@
   , keyboardButtonRequestUsersUserIsBot :: Maybe Bool -- ^ Pass 'True' to request a bot, pass 'False' to request a regular user. If not specified, no additional restrictions are applied.
   , keyboardButtonRequestUsersUserIsPremium :: Maybe Bool -- ^ Pass 'True' to request a premium user, pass 'False' to request a non-premium user. If not specified, no additional restrictions are applied.
   , keyboardButtonRequestUsersMaxQuantity :: Maybe Int -- ^ The maximum number of users to be selected; 1-10. Defaults to 1.
+  , keyboardButtonRequestUsersRequestName :: Maybe Bool -- ^ Pass 'True' to request the users' first and last names.
+  , keyboardButtonRequestUsersRequestUsername :: Maybe Bool -- ^ Pass 'True' to request the users' usernames.
+  , keyboardButtonRequestUsersRequestPhoto :: Maybe Bool -- ^ Pass 'True' to request the users' photos.
   }
   deriving (Generic, Show)
 
diff --git a/src/Telegram/Bot/API/Types/Message.hs b/src/Telegram/Bot/API/Types/Message.hs
--- a/src/Telegram/Bot/API/Types/Message.hs
+++ b/src/Telegram/Bot/API/Types/Message.hs
@@ -8,13 +8,15 @@
 
 import Telegram.Bot.API.Types.Animation
 import Telegram.Bot.API.Types.Audio
-import Telegram.Bot.API.Types.Document
-import {-# SOURCE #-} Telegram.Bot.API.Types.Chat
+import Telegram.Bot.API.Types.Chat
+import Telegram.Bot.API.Types.ChatBackground
+import Telegram.Bot.API.Types.ChatBoostAdded
 import Telegram.Bot.API.Types.ChatShared
 import Telegram.Bot.API.Types.Common
 import Telegram.Bot.API.Types.Contact
 import Telegram.Bot.API.Types.Dice
-import {-# SOURCE #-} Telegram.Bot.API.Types.ExternalReplyInfo
+import Telegram.Bot.API.Types.Document
+import Telegram.Bot.API.Types.ExternalReplyInfo
 import Telegram.Bot.API.Types.ForumTopicEdited
 import Telegram.Bot.API.Types.ForumTopicClosed
 import Telegram.Bot.API.Types.ForumTopicCreated
@@ -22,16 +24,17 @@
 import Telegram.Bot.API.Types.Game
 import Telegram.Bot.API.Types.GeneralForumTopicHidden
 import Telegram.Bot.API.Types.GeneralForumTopicUnhidden
-import {-# SOURCE #-} Telegram.Bot.API.Types.Giveaway
+import Telegram.Bot.API.Types.Giveaway
 import {-# SOURCE #-} Telegram.Bot.API.Types.GiveawayCompleted
 import Telegram.Bot.API.Types.GiveawayCreated
-import {-# SOURCE #-} Telegram.Bot.API.Types.GiveawayWinners
+import Telegram.Bot.API.Types.GiveawayWinners
 import Telegram.Bot.API.Types.InlineKeyboardMarkup
 import Telegram.Bot.API.Types.Invoice
 import Telegram.Bot.API.Types.LinkPreviewOptions
 import Telegram.Bot.API.Types.Location
 import Telegram.Bot.API.Types.MessageAutoDeleteTimerChanged
 import Telegram.Bot.API.Types.MessageEntity
+import Telegram.Bot.API.Types.MessageOrigin
 import Telegram.Bot.API.Types.PassportData
 import Telegram.Bot.API.Types.PhotoSize
 import Telegram.Bot.API.Types.Poll
@@ -61,22 +64,22 @@
   , messageMessageThreadId       :: Maybe MessageThreadId -- ^ Unique identifier of a message thread to which the message belongs; for supergroups only.
   , messageFrom                  :: Maybe User -- ^ Sender, empty for messages sent to channels.
   , messageSenderChat            :: Maybe Chat -- ^ Sender of the message, sent on behalf of a chat. For example, the channel itself for channel posts, the supergroup itself for messages from anonymous group administrators, the linked channel for messages automatically forwarded to the discussion group. For backward compatibility, the field from contains a fake sender user in non-channel chats, if the message was sent on behalf of a chat.
+  , messageSenderBoostCount      :: Maybe Int -- ^ If the sender of the message boosted the chat, the number of boosts added by the user.
+  , messageSenderBusinessBot     :: Maybe User -- ^ The bot that actually sent the message on behalf of the business account. Available only for outgoing messages sent on behalf of the connected business account.
   , messageDate                  :: POSIXTime -- ^ Date the message was sent in Unix time.
+  , messageBusinessConnectionId  :: Maybe BusinessConnectionId -- ^ Unique identifier of the business connection from which the message was received. If non-empty, the message belongs to a chat of the corresponding business account that is independent from any potential bot chat which might share the same identifier.
   , messageChat                  :: Chat -- ^ Conversation the message belongs to.
-  , messageForwardFrom           :: Maybe User -- ^ For forwarded messages, sender of the original message.
-  , messageForwardFromChat       :: Maybe Chat -- ^ For messages forwarded from channels, information about the original channel.
-  , messageForwardFromMessageId  :: Maybe MessageId -- ^ For messages forwarded from channels, identifier of the original message in the channel.
-  , messageForwardSignature      :: Maybe Text -- ^ For messages forwarded from channels, signature of the post author if present.
-  , messageForwardSenderName     :: Maybe Text -- ^ Sender's name for messages forwarded from users who disallow adding a link to their account in forwarded messages.
-  , messageForwardDate           :: Maybe POSIXTime -- ^ For forwarded messages, date the original message was sent in Unix time
+  , messageForwardOrigin         :: Maybe MessageOrigin -- ^ Information about the original message for forwarded messages.
   , messageIsTopicMessage        :: Maybe Bool -- ^ 'True', if the message is sent to a forum topic.
   , messageIsAutomaticForward    :: Maybe Bool -- ^ 'True', if the message is a channel post that was automatically forwarded to the connected discussion group.
   , messageReplyToMessage        :: Maybe Message -- ^ For replies, the original message. Note that the Message object in this field will not contain further reply_to_message fields even if it itself is a reply.
   , messageExternalReply         :: Maybe ExternalReplyInfo -- ^ Information about the message that is being replied to, which may come from another chat or forum topic.
-  , quote                        :: Maybe TextQuote -- ^ For replies that quote part of the original message, the quoted part of the message.
+  , messageQuote                 :: Maybe TextQuote -- ^ For replies that quote part of the original message, the quoted part of the message.
+  , messageReplyToStory          :: Maybe Story -- ^ For replies to a story, the original story.
   , messageViaBot                :: Maybe User -- ^ Bot through which the message was sent.
   , messageEditDate              :: Maybe POSIXTime -- ^ Date the message was last edited in Unix time
   , messageHasProtectedContent   :: Maybe Bool -- ^ 'True', if the message can't be forwarded.
+  , messageIsFromOffline         :: Maybe Bool -- ^ 'True', if the message was sent by an implicit action, for example, as an away or a greeting business message, or as a scheduled message.
   , messageMediaGroupId          :: Maybe MediaGroupId -- ^ The unique identifier of a media message group this message belongs to
   , messageAuthorSignature       :: Maybe Text -- ^ Signature of the post author for messages in channels
   , messageText                  :: Maybe Text -- ^ For text messages, the actual UTF-8 text of the message, 0-4096 characters.
@@ -122,6 +125,8 @@
   , messageWriteAccessAllowed    :: Maybe WriteAccessAllowed -- ^ Service message: the user allowed the bot added to the attachment menu to write messages.
   , messagePassportData          :: Maybe PassportData -- ^ Telegram Passport data.
   , messageProximityAlertTriggered :: Maybe ProximityAlertTriggered -- ^ Service message. A user in the chat triggered another user's proximity alert while sharing Live Location.
+  , messageBoostAdded            :: Maybe ChatBoostAdded -- ^ Service message: user boosted the chat.
+  , messageChatBackgroundSet     :: Maybe ChatBackground -- ^ Service message: chat background set.
   , messageForumTopicCreated     :: Maybe ForumTopicCreated -- ^ Service message: forum topic created.
   , messageForumTopicEdited     :: Maybe ForumTopicEdited -- ^ Service message: forum topic edited.
   , messageForumTopicClosed     :: Maybe ForumTopicClosed -- ^ Service message: forum topic closed.
diff --git a/src/Telegram/Bot/API/Types/MessageEntity.hs b/src/Telegram/Bot/API/Types/MessageEntity.hs
--- a/src/Telegram/Bot/API/Types/MessageEntity.hs
+++ b/src/Telegram/Bot/API/Types/MessageEntity.hs
@@ -37,13 +37,14 @@
   | MessageEntityItalic
   | MessageEntityUnderline -- ^ See <https://core.telegram.org/tdlib/docs/classtd_1_1td__api_1_1text_entity_type_underline.html>
   | MessageEntityStrikethrough -- ^ See <https://core.telegram.org/tdlib/docs/classtd_1_1td__api_1_1text_entity_type_strikethrough.html>
+  | MessageEntitySpoiler
+  | MessageEntityBlockquote
   | MessageEntityCode
   | MessageEntityPre
   | MessageEntityTextLink
   | MessageEntityTextMention
   | MessageEntityCashtag -- ^ See <https://core.telegram.org/tdlib/docs/classtd_1_1td__api_1_1text_entity_type_cashtag.html>.
   | MessageEntityPhoneNumber -- ^ See <https://core.telegram.org/tdlib/docs/classtd_1_1td__api_1_1text_entity_type_phone_number.html>.
-  | MessageEntitySpoiler
   | MessageEntityCustomEmoji
   deriving (Eq, Show, Generic)
 
diff --git a/src/Telegram/Bot/API/Types/MessageOrigin.hs-boot b/src/Telegram/Bot/API/Types/MessageOrigin.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/MessageOrigin.hs-boot
@@ -0,0 +1,11 @@
+module Telegram.Bot.API.Types.MessageOrigin where
+
+import Data.Aeson
+
+data MessageOrigin
+
+instance Show MessageOrigin
+
+instance FromJSON MessageOrigin
+
+instance ToJSON MessageOrigin
diff --git a/src/Telegram/Bot/API/Types/Poll.hs b/src/Telegram/Bot/API/Types/Poll.hs
--- a/src/Telegram/Bot/API/Types/Poll.hs
+++ b/src/Telegram/Bot/API/Types/Poll.hs
@@ -17,8 +17,9 @@
 data Poll = Poll
   { pollId                    :: PollId                -- ^ Unique poll identifier.
   , pollQuestion              :: Text                  -- ^ Poll question, 1-300 characters.
+  , pollQuestionEntities      :: Maybe [MessageEntity] -- ^ Special entities that appear in the @question@. Currently, only custom emoji entities are allowed in poll questions.
   , pollOptions               :: [PollOption]          -- ^ List of poll options.
-  , pollTotalVoterCount       :: Int                 -- ^ Total number of users that voted in the poll.
+  , pollTotalVoterCount       :: Int                   -- ^ Total number of users that voted in the poll.
   , pollIsClosed              :: Bool                  -- ^ 'True', if the poll is closed.
   , pollIsAnonymous           :: Bool                  -- ^ 'True', if the poll is anonymous.
   , pollType                  :: PollType              -- ^ Poll type, currently can be “regular” or “quiz”.
diff --git a/src/Telegram/Bot/API/Types/PollOption.hs b/src/Telegram/Bot/API/Types/PollOption.hs
--- a/src/Telegram/Bot/API/Types/PollOption.hs
+++ b/src/Telegram/Bot/API/Types/PollOption.hs
@@ -6,12 +6,14 @@
 import GHC.Generics (Generic)
 
 import Telegram.Bot.API.Internal.Utils
+import Telegram.Bot.API.Types.MessageEntity
 
 -- ** 'PollOption'
 
 -- | This object contains information about one answer option in a poll.
 data PollOption = PollOption
   { pollOptionText       :: Text -- ^ Option text, 1-100 characters.
+  , pollOptionEntities  :: Maybe [MessageEntity] -- ^ Special entities that appear in the option @text@. Currently, only custom emoji entities are allowed in poll option texts.
   , pollOptionVoterCount :: Int  -- ^ Number of users that voted for this option.
   }
   deriving (Generic, Show)
diff --git a/src/Telegram/Bot/API/Types/SharedUser.hs b/src/Telegram/Bot/API/Types/SharedUser.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/SharedUser.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Telegram.Bot.API.Types.SharedUser where
+
+import Data.Aeson (FromJSON (..), ToJSON (..))
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+import Telegram.Bot.API.Types.Common
+import Telegram.Bot.API.Types.PhotoSize
+import Telegram.Bot.API.Internal.Utils
+
+-- ** 'SharedUser'
+
+-- | This object contains information about a user that was shared with the bot using a 'KeyboardButtonRequestUsers' button.
+data SharedUser = SharedUser
+  { sharedUserUserId :: UserId -- ^ Identifier of the shared user. This number may have more than 32 significant bits and some programming languages may have difficulty\/silent defects in interpreting it. But it has at most 52 significant bits, so 64-bit integers or double-precision float types are safe for storing these identifiers. The bot may not have access to the user and could be unable to use this identifier, unless the user is already known to the bot by some other means.
+  , sharedUserFirstName :: Maybe Text -- ^ First name of the user, if the name was requested by the bot.
+  , sharedUserLastName :: Maybe Text -- ^ Last name of the user, if the name was requested by the bot.
+  , sharedUserUsername :: Maybe Text -- ^ Username of the user, if the username was requested by the bot.
+  , sharedUserPhoto :: Maybe [PhotoSize] -- ^ Available sizes of the chat photo, if the photo was requested by the bot.3
+  }
+  deriving (Generic, Show)
+
+instance ToJSON   SharedUser where toJSON = gtoJSON
+instance FromJSON SharedUser where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/Types/Sticker.hs b/src/Telegram/Bot/API/Types/Sticker.hs
--- a/src/Telegram/Bot/API/Types/Sticker.hs
+++ b/src/Telegram/Bot/API/Types/Sticker.hs
@@ -17,6 +17,7 @@
 
 data InputSticker = InputSticker
   { inputStickerSticker :: InputFile -- ^ The added sticker. Pass a file_id as a String to send a file that already exists on the Telegram servers, pass an HTTP URL as a String for Telegram to get a file from the Internet, upload a new one using @multipart/form-data@, or pass @attach://<file_attach_name>@ to upload a new one using @multipart/form-data@ under @<file_attach_name>@ name. Animated and video stickers can't be uploaded via HTTP URL.
+  , inputStickerFormat :: Text -- ^ Format of the added sticker, must be one of “static” for a __.WEBP__ or __.PNG__ image, “animated” for a __.TGS__ animation, “video” for a WEBM video.
   , inputStickerEmojiList :: [Text] -- ^ List of 1-20 emoji associated with the sticker.
   , inputStickerMaskPosition :: Maybe MaskPosition -- ^ Position where the mask should be placed on faces. For “mask” stickers only.
   , inputStickerKeywords :: Maybe [Text] -- ^ List of 0-20 search keywords for the sticker with total length of up to 64 characters. For “regular” and “custom_emoji” stickers only.
@@ -56,8 +57,6 @@
   { stickerSetName          :: Text            -- ^ Sticker set name.
   , stickerSetTitle         :: Text            -- ^ Sticker set title.
   , stickerSetType          :: StickerSetType  -- ^ Type of stickers in the set, currently one of “regular”, “mask”, “custom_emoji”.
-  , stickerSetIsAnimated    :: Bool            -- ^ 'True', if the sticker set contains animated stickers.
-  , stickerSetIsVideo       :: Bool            -- ^ 'True', if the sticker is a video sticker.
   , stickerSetContainsMasks :: Maybe Bool      -- ^ True, if the sticker set contains masks.
   , stickerSetStickers      :: [Sticker]       -- ^ List of all set stickers.
   , stickerSetThumbnail     :: Maybe PhotoSize -- ^ Sticker set thumbnail in the .WEBP or .TGS format.
diff --git a/src/Telegram/Bot/API/Types/Story.hs b/src/Telegram/Bot/API/Types/Story.hs
--- a/src/Telegram/Bot/API/Types/Story.hs
+++ b/src/Telegram/Bot/API/Types/Story.hs
@@ -1,16 +1,25 @@
 {-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 module Telegram.Bot.API.Types.Story where
 
 import Data.Aeson (FromJSON (..), ToJSON (..))
 import GHC.Generics (Generic)
 
 import Telegram.Bot.API.Internal.Utils
+import Telegram.Bot.API.Types.Chat
 
+
 -- ** 'Story'
 
--- | This object represents a message about a forwarded story in the chat. Currently holds no information.
+-- | Unique identifier for the story in the chat
+newtype StoryId = StoryId Int
+  deriving (Show, ToJSON, FromJSON)
 
+-- | This object represents a message about a story.
 data Story = Story
+  { storyChat :: Chat -- ^ Chat that posted the story.
+  , storyId :: StoryId -- ^ Unique identifier for the story in the chat.
+  }
   deriving (Generic, Show)
 
 instance ToJSON Story where toJSON = gtoJSON
diff --git a/src/Telegram/Bot/API/Types/Story.hs-boot b/src/Telegram/Bot/API/Types/Story.hs-boot
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/Types/Story.hs-boot
@@ -0,0 +1,11 @@
+module Telegram.Bot.API.Types.Story where
+
+import Data.Aeson
+
+data Story
+
+instance Show Story
+
+instance FromJSON Story
+
+instance ToJSON Story
diff --git a/src/Telegram/Bot/API/Types/UsersShared.hs b/src/Telegram/Bot/API/Types/UsersShared.hs
--- a/src/Telegram/Bot/API/Types/UsersShared.hs
+++ b/src/Telegram/Bot/API/Types/UsersShared.hs
@@ -5,6 +5,7 @@
 import GHC.Generics (Generic)
 
 import Telegram.Bot.API.Types.Common
+import Telegram.Bot.API.Types.SharedUser
 import Telegram.Bot.API.Internal.Utils
 
 -- ** 'UsersShared'
@@ -12,7 +13,7 @@
 -- | This object contains information about the users whose identifiers were shared with the bot using a 'KeyboardButtonRequestUsers' button.
 data UsersShared = UsersShared
   { usersSharedRequestId :: RequestId -- ^ Identifier of the request.
-  , usersSharedUserId :: [UserId] -- ^ Identifiers of the shared users. These numbers may have more than 32 significant bits and some programming languages may have difficulty/silent defects in interpreting them. But they have at most 52 significant bits, so 64-bit integers or double-precision float types are safe for storing these identifiers. The bot may not have access to the users and could be unable to use these identifiers, unless the users are already known to the bot by some other means.
+  , usersSharedUserId :: [SharedUser] -- ^ Information about users shared with the bot.
   }
   deriving (Generic, Show)
 
diff --git a/telegram-bot-api.cabal b/telegram-bot-api.cabal
--- a/telegram-bot-api.cabal
+++ b/telegram-bot-api.cabal
@@ -1,7 +1,7 @@
 cabal-version: 1.12
 
 name:           telegram-bot-api
-version:        7.0
+version:        7.3
 synopsis:       Easy to use library for building Telegram bots. Exports Telegram Bot API.
 description:    Please see the README on Github at <https://github.com/fizruk/telegram-bot-simple#readme>
                 .
@@ -57,6 +57,7 @@
       Telegram.Bot.API.Methods.ExportChatInviteLink
       Telegram.Bot.API.Methods.ForwardMessage
       Telegram.Bot.API.Methods.ForwardMessages
+      Telegram.Bot.API.Methods.GetBusinessConnection
       Telegram.Bot.API.Methods.GetChat
       Telegram.Bot.API.Methods.GetChatAdministrators
       Telegram.Bot.API.Methods.GetChatMember
@@ -122,19 +123,31 @@
       -- Types
       Telegram.Bot.API.Types.Animation
       Telegram.Bot.API.Types.Audio
+      Telegram.Bot.API.Types.BackgroundFill
+      Telegram.Bot.API.Types.BackgroundType
+      Telegram.Bot.API.Types.Birthdate
       Telegram.Bot.API.Types.BotCommand
       Telegram.Bot.API.Types.BotCommandScope
       Telegram.Bot.API.Types.BotDescription
       Telegram.Bot.API.Types.BotName
       Telegram.Bot.API.Types.BotShortDescription
+      Telegram.Bot.API.Types.BusinessConnection
+      Telegram.Bot.API.Types.BusinessIntro
+      Telegram.Bot.API.Types.BusinessMessagesDeleted
+      Telegram.Bot.API.Types.BusinessLocation
+      Telegram.Bot.API.Types.BusinessOpeningHours
+      Telegram.Bot.API.Types.BusinessOpeningHoursInterval
       Telegram.Bot.API.Types.CallbackGame
       Telegram.Bot.API.Types.CallbackQuery
       Telegram.Bot.API.Types.Chat
+      Telegram.Bot.API.Types.ChatAdministratorRights
+      Telegram.Bot.API.Types.ChatBackground
       Telegram.Bot.API.Types.ChatBoost
+      Telegram.Bot.API.Types.ChatBoostAdded
       Telegram.Bot.API.Types.ChatBoostRemoved
       Telegram.Bot.API.Types.ChatBoostSource
       Telegram.Bot.API.Types.ChatBoostUpdated
-      Telegram.Bot.API.Types.ChatAdministratorRights
+      Telegram.Bot.API.Types.ChatFullInfo
       Telegram.Bot.API.Types.ChatInviteLink
       Telegram.Bot.API.Types.ChatJoinRequest
       Telegram.Bot.API.Types.ChatLocation
@@ -143,6 +156,7 @@
       Telegram.Bot.API.Types.ChatPermissions
       Telegram.Bot.API.Types.ChatPhoto
       Telegram.Bot.API.Types.ChatShared
+      Telegram.Bot.API.Types.ChatType
       Telegram.Bot.API.Types.Common
       Telegram.Bot.API.Types.Contact
       Telegram.Bot.API.Types.CopyMessageId
@@ -169,6 +183,7 @@
       Telegram.Bot.API.Types.InlineKeyboardButton
       Telegram.Bot.API.Types.InlineKeyboardMarkup
       Telegram.Bot.API.Types.InputMedia
+      Telegram.Bot.API.Types.InputPollOption
       Telegram.Bot.API.Types.Invoice
       Telegram.Bot.API.Types.KeyboardButton
       Telegram.Bot.API.Types.KeyboardButtonRequestChat
@@ -203,6 +218,7 @@
       Telegram.Bot.API.Types.ReplyKeyboardRemove
       Telegram.Bot.API.Types.ReplyParameters
       Telegram.Bot.API.Types.ResponseParameters
+      Telegram.Bot.API.Types.SharedUser
       Telegram.Bot.API.Types.ShippingAddress
       Telegram.Bot.API.Types.ShippingOption
       Telegram.Bot.API.Types.ShippingQuery
@@ -237,7 +253,7 @@
   build-depends:
       aeson
     , aeson-pretty
-    , base >=4.9 && <5
+    , base >=4.16 && <5
     , bytestring
     , cron >=0.7.0
     , filepath
