diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,17 @@
+0.5
+---
+
+- Add `MarkdownV2` to `ParseMode` haddock suggestion (see [#110](https://github.com/fizruk/telegram-bot-simple/pull/110));
+- Make package complaint with Telegram Bot API 6.0 (breaking changes included) (see [#112](https://github.com/fizruk/telegram-bot-simple/pull/112)):
+
+    - `WebAppInfo` data type added. `KeyboardButton`, `InlineKeyboardButton` extended with `web_app` record.
+    - `SentWebAppMessage` data type added. `answerWebAppQuery` method added.
+    - `MenuButton` data type added. `setChatMenuButton`, `getChatMenuButton` methods added.
+    - `ChatAdministratorRights` data type added. `setMyDefaultAdministratorRights`, `getMyDefaultAdministratorRights` methods added.
+    - :warning: `ChatMember` records changed: `can_manage_voice_chats` renamed to `can_manage_video_chat`.
+    - :warning: `PromoteChatMemberRequest` records changed: `can_manage_voice_chats` renamed to `can_manage_video_chats`.
+    - :warning: `Message` records changed: `voice_chat_scheduled`, `voice_chat_started`, `voice_chat_ended`, and `voice_chat_participants_invited` renamed to `video_chat_scheduled`, `video_chat_started`, `video_chat_ended`, and `video_chat_participants_invited` correspondingly.
+
 0.4.5
 ---
 
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
@@ -103,7 +103,7 @@
 data SendMessageRequest = SendMessageRequest
   { sendMessageChatId                :: SomeChatId -- ^ Unique identifier for the target chat or username of the target channel (in the format @\@channelusername@).
   , sendMessageText                  :: Text -- ^ Text of the message to be sent.
-  , sendMessageParseMode             :: Maybe ParseMode -- ^ Send 'Markdown' or 'HTML', if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message.
+  , 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.
   , sendMessageEntities              :: Maybe [MessageEntity] -- ^ A JSON-serialized list of special entities that appear in message text, which can be specified instead of /parse_mode/.
   , sendMessageDisableWebPagePreview :: Maybe Bool -- ^ Disables link previews for links in this message.
   , sendMessageDisableNotification   :: Maybe Bool -- ^ Sends the message silently. Users will receive a notification with no sound.
@@ -919,7 +919,7 @@
   , promoteChatMemberCanPostMessages :: Maybe Bool -- ^ Pass True, if the administrator can create channel posts, channels only
   , promoteChatMemberCanEditMessages :: Maybe Bool -- ^ Pass True, if the administrator can edit messages of other users and can pin messages, channels only
   , promoteChatMemberCanDeleteMessages :: Maybe Bool -- ^ Pass True, if the administrator can delete messages of other users
-  , promoteChatMemberCanManageVoiceChats :: Maybe Bool -- ^ Pass True, if the administrator can manage voice chats
+  , promoteChatMemberCanManageVideoChats :: Maybe Bool -- ^ Pass True, if the administrator can manage video chats
   , promoteChatMemberCanRestrictMembers :: Maybe Bool -- ^ Pass True, if the administrator can restrict, ban or unban chat members
   , promoteChatMemberCanPromoteMembers :: Maybe Bool -- ^ Pass 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 him)
   , promoteChatMemberCanChangeInfo :: Maybe Bool -- ^ Pass True, if the administrator can change chat title, photo and other settings
@@ -1312,8 +1312,40 @@
   }
   deriving Generic
 
+-- | Request parameters for 'setChatMenuButton'
+
+data SetChatMenuButtonRequest = SetChatMenuButtonRequest
+  { setChatMenuButtonRequestChatId     :: Maybe ChatId     -- ^ Unique identifier for the target private chat. If not specified, default bot's menu button will be changed.
+  , setChatMenuButtonRequestMenuButton :: Maybe MenuButton -- ^ A JSON-serialized object for the new bot's menu button. Defaults to @MenuButtonDefault@.
+  }
+  deriving Generic
+
+-- | Request parameters for 'getChatMenuButton'
+
+data GetChatMenuButtonRequest = GetChatMenuButtonRequest
+  { getChatMenuButtonRequestChatId     :: Maybe ChatId     -- ^ Unique identifier for the target private chat. If not specified, default bot's menu button will be returned.
+  }
+  deriving Generic
+
+-- | Request parameters for 'setMyDefaultAdministratorRights'
+data SetMyDefaultAdministratorRightsRequest = SetMyDefaultAdministratorRightsRequest
+  { setMyDefaultAdministratorRightsRequestRights      :: Maybe ChatAdministratorRights -- ^ A JSON-serialized object describing new default administrator rights. If not specified, the default administrator rights will be cleared.
+  , setMyDefaultAdministratorRightsRequestForChannels :: Maybe Bool -- ^ Pass 'True' to change the default administrator rights of the bot in channels. Otherwise, the default administrator rights of the bot for groups and supergroups will be changed.
+  }
+  deriving Generic
+
+-- | Request parameters for 'getMyDefaultAdministratorRights'
+data GetMyDefaultAdministratorRightsRequest = GetMyDefaultAdministratorRightsRequest
+  { getMyDefaultAdministratorRightsRequestForChannels :: Maybe Bool -- ^ Pass 'True' to get default administrator rights of the bot in channels. Otherwise, default administrator rights of the bot for groups and supergroups will be returned.
+  }
+  deriving Generic
+
 foldMap deriveJSON'
-  [ ''GetMyCommandsRequest
+  [ ''SetMyDefaultAdministratorRightsRequest
+  , ''GetMyDefaultAdministratorRightsRequest
+  , ''GetChatMenuButtonRequest
+  , ''SetChatMenuButtonRequest
+  , ''GetMyCommandsRequest
   , ''DeleteMyCommandsRequest
   , ''SetMyCommandsRequest
   , ''AnswerCallbackQueryRequest
@@ -1616,3 +1648,41 @@
 --   is returned.
 getMyCommands :: GetMyCommandsRequest -> ClientM (Response [BotCommand])
 getMyCommands = client (Proxy @GetMyCommands)
+
+type SetChatMenuButton = "setChatMenuButton"
+  :> ReqBody '[JSON] SetChatMenuButtonRequest
+  :> Post '[JSON] (Response Bool)
+
+-- | Use this method to change the bot's menu button in a private chat,
+--  or the default menu button. Returns True on success.
+setChatMenuButton :: SetChatMenuButtonRequest -> ClientM (Response Bool)
+setChatMenuButton = client (Proxy @SetChatMenuButton)
+
+type GetChatMenuButton = "getChatMenuButton"
+  :> ReqBody '[JSON] GetChatMenuButtonRequest
+  :> Post '[JSON] (Response MenuButton)
+
+-- | Use this method to get the current value
+--  of the bot's menu button in a private chat, or the default menu button.
+-- Returns @MenuButton@ on success.
+getChatMenuButton :: GetChatMenuButtonRequest -> ClientM (Response MenuButton)
+getChatMenuButton = client (Proxy @GetChatMenuButton)
+
+type SetMyDefaultAdministratorRights = "setMyDefaultAdministratorRights"
+  :> ReqBody '[JSON] SetMyDefaultAdministratorRightsRequest
+  :> Post '[JSON] (Response Bool)
+
+-- | Use this method to change the default administrator rights requested by the bot when it's added as an administrator to groups or channels. These rights will be suggested to users, but they are are free to modify the list before adding the bot. Returns 'True' on success.
+setMyDefaultAdministratorRights
+  :: SetMyDefaultAdministratorRightsRequest -> ClientM (Response Bool)
+setMyDefaultAdministratorRights = client (Proxy @SetMyDefaultAdministratorRights)
+
+type GetMyDefaultAdministratorRights = "getMyDefaultAdministratorRights"
+  :> ReqBody '[JSON] GetMyDefaultAdministratorRightsRequest
+  :> Post '[JSON] (Response ChatAdministratorRights)
+
+-- | Use this method to get the current default administrator rights of the bot.
+-- Returns 'ChatAdministratorRights' on success.
+getMyDefaultAdministratorRights
+  :: GetMyDefaultAdministratorRightsRequest -> ClientM (Response ChatAdministratorRights)
+getMyDefaultAdministratorRights = client (Proxy @GetMyDefaultAdministratorRights)
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
@@ -171,10 +171,11 @@
   , messageConnectedWebsite      :: Maybe Text -- ^ The domain name of the website on which the user has logged in.
   , 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.
-  , messageVoiceChatScheduled    :: Maybe VoiceChatScheduled -- ^ Service message: voice chat scheduled.
-  , messageVoiceChatStarted      :: Maybe VoiceChatStarted -- ^ Service message: voice chat started
-  , messageVoiceChatEnded        :: Maybe VoiceChatEnded -- ^ Service message: voice chat ended.
-  , messageVoiceChatParticipantsInvited :: Maybe VoiceChatParticipantsInvited -- ^ Service message: new participants invited to a voice chat.
+  , messageVideoChatScheduled    :: Maybe VideoChatScheduled -- ^ Service message: video chat scheduled.
+  , messageVideoChatStarted      :: Maybe VideoChatStarted -- ^ Service message: video chat started
+  , messageVideoChatEnded        :: Maybe VideoChatEnded -- ^ Service message: video chat ended.
+  , messageVideoChatParticipantsInvited :: Maybe VideoChatParticipantsInvited -- ^ Service message: new participants invited to a video chat.
+  , messageWebAppData            :: Maybe WebAppData -- ^ Service message: data sent by a Web App.
   , messageReplyMarkup           :: Maybe InlineKeyboardMarkup -- ^ Inline keyboard attached to the message. `login_url` buttons are represented as ordinary `url` buttons.
   }
   deriving (Generic, Show)
@@ -436,31 +437,31 @@
   }
   deriving (Generic, Show)
 
--- ** 'VoiceChatScheduled'
+-- ** 'VideoChatScheduled'
 
--- | This object represents a service message about a voice chat scheduled in the chat.
-data VoiceChatScheduled = VoiceChatScheduled
-  { voiceChatScheduledStartDate :: POSIXTime -- ^ Point in time (Unix timestamp) when the voice chat is supposed to be started by a chat administrator.
+-- | This object represents a service message about a video chat scheduled in the chat.
+data VideoChatScheduled = VideoChatScheduled
+  { videoChatScheduledStartDate :: POSIXTime -- ^ Point in time (Unix timestamp) when the video chat is supposed to be started by a chat administrator.
   }
   deriving (Generic, Show)
 
--- ** 'VoiceChatStarted'
+-- ** 'VideoChatStarted'
 
--- | This object represents a service message about a voice chat started in the chat. Currently holds no information.
-data VoiceChatStarted = VoiceChatStarted
+-- | This object represents a service message about a video chat started in the chat. Currently holds no information.
+data VideoChatStarted = VideoChatStarted
   deriving (Generic, Show)
 
--- ** 'VoiceChatEnded'
+-- ** 'VideoChatEnded'
 
--- | This object represents a service message about a voice chat ended in the chat.
-data VoiceChatEnded = VoiceChatEnded
-  { voiceChatEndedDuration :: Seconds -- ^ Voice chat duration in seconds.
+-- | This object represents a service message about a video chat ended in the chat.
+data VideoChatEnded = VideoChatEnded
+  { videoChatEndedDuration :: Seconds -- ^ Video chat duration in seconds.
   }
   deriving (Generic, Show)
 
--- ** 'VoiceChatParticipantsInvited'
-data VoiceChatParticipantsInvited = VoiceChatParticipantsInvited
-  { voiceChatParticipantsInvitedUsers :: Maybe [User] -- ^ New members that were invited to the voice chat.
+-- ** 'VideoChatParticipantsInvited'
+data VideoChatParticipantsInvited = VideoChatParticipantsInvited
+  { videoChatParticipantsInvitedUsers :: Maybe [User] -- ^ New members that were invited to the video chat.
   }
   deriving (Generic, Show)
 
@@ -473,6 +474,14 @@
   }
   deriving (Generic, Show)
 
+-- ** 'WebAppData'
+
+data WebAppData = WebAppData
+  { webAppDataData       :: Text -- ^ The data. Be aware that a bad client can send arbitrary data in this field.
+  , webAppDataButtonText :: Text -- ^ Text of the @web_app@ keyboard button, from which the Web App was opened. Be aware that a bad client can send arbitrary data in this field.
+  }
+  deriving (Generic, Show)
+
 -- ** 'File'
 
 -- | This object represents a file ready to be downloaded.
@@ -515,6 +524,9 @@
 
 -- ** 'KeyboardButton'
 
+newtype WebAppInfo = WebAppInfo { webAppInfoUrl :: Text }
+  deriving (Generic, Show)
+
 -- | This object represents one button of the reply keyboard.
 -- For simple text buttons String can be used instead of this object
 -- to specify text of the button. Optional fields are mutually exclusive.
@@ -523,12 +535,40 @@
   , keyboardButtonRequestContact  :: Maybe Bool -- ^ If 'True', the user's phone number will be sent as a contact when the button is pressed. Available in private chats only.
   , keyboardButtonRequestLocation :: Maybe Bool -- ^ If 'True', the user's current location will be sent when the button is pressed. Available in private chats only.
   , keyboardButtonRequestPoll     :: Maybe PollType -- ^ If specified, the user will be asked to create a poll and send it to the bot when the button is pressed. Available in private chats only.
+  , keyboardButtonWebApp          :: Maybe WebAppInfo -- ^ If specified, the described Web App will be launched when the button is pressed. The Web App will be able to send a “web_app_data” service message. Available in private chats only.
   }
   deriving (Generic, Show)
 
 instance IsString KeyboardButton where
-  fromString s = KeyboardButton (fromString s) Nothing Nothing Nothing
+  fromString s = KeyboardButton (fromString s) Nothing Nothing Nothing Nothing
 
+-- ** 'MenuButton'
+
+-- | This object describes the bot's menu button in a private chat.
+-- If a menu button other than @MenuButtonDefault@ is set for a private chat, then it is applied in the chat. Otherwise the default menu button is applied. By default, the menu button opens the list of bot commands.
+data MenuButton
+  = MenuButtonCommands -- ^ Represents a menu button, which opens the bot's list of commands.
+  | MenuButtonWebApp -- ^ Represents a menu button, which launches a Web App.
+      { menuButtonWebAppText :: Text
+      , menuButtonWebAppWebApp :: WebAppInfo
+      } 
+  | MenuButtonDefault -- ^ Describes that no specific value for the menu button was set.
+  deriving Generic
+
+instance ToJSON MenuButton where
+  toJSON = \case
+    MenuButtonCommands ->
+      object $ addType "commands" []
+    MenuButtonWebApp txt wai ->
+      object $ addType "web_app" ["text" .= txt, "web_app_info" .= wai]
+    MenuButtonDefault ->
+      object $ addType "default" []
+
+instance FromJSON MenuButton where
+  parseJSON = gparseJSON
+
+-- ** 'PollType'
+
 data PollType =
   PollTypeQuiz | PollTypeRegular
   deriving (Generic, Show)
@@ -577,6 +617,7 @@
   { inlineKeyboardButtonText              :: Text -- ^ Label text on the button
   , 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.
   , 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.
 
@@ -586,7 +627,7 @@
   deriving (Generic, Show)
 
 labeledInlineKeyboardButton :: Text -> InlineKeyboardButton
-labeledInlineKeyboardButton label = InlineKeyboardButton label Nothing Nothing Nothing Nothing Nothing Nothing
+labeledInlineKeyboardButton label = InlineKeyboardButton label Nothing Nothing Nothing Nothing Nothing Nothing Nothing
 
 -- ** 'LoginUrl'
 
@@ -668,7 +709,23 @@
   }
   deriving (Generic, Show)
 
+-- ** 'ChatAdministratorRights'
 
+-- | Represents the rights of an administrator in a chat.
+data ChatAdministratorRights = ChatAdministratorRights
+  { chatAdministratorRightsIsAnonymous         :: Bool -- ^ 'True', if the user's presence in the chat is hidden.
+  , chatAdministratorRightsCanManageChat       :: Bool -- ^ 'True', if the administrator can access the chat event log, chat statistics, message statistics in channels, see channel members, see anonymous administrators in supergroups and ignore slow mode. Implied by any other administrator privilege.
+  , chatAdministratorRightsCanDeleteMessages   :: Bool -- ^ 'True', if the administrator can delete messages of other users.
+  , chatAdministratorRightsCanManageVideoChats :: Bool -- ^ 'True', if the administrator can manage video chats.
+  , chatAdministratorRightsCanRestrictMembers  :: Bool -- ^ 'True', if the administrator can restrict, ban or unban chat members.
+  , 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.
+  , 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
+  }
+  deriving (Generic, Show)
 
 -- ** 'ChatMember'
 
@@ -688,24 +745,24 @@
   , chatMemberCanBeEdited           :: Maybe Bool -- ^ Administrators only. True, if the bot is allowed to edit administrator privileges of that user
   , chatMemberCanManageChat         :: Maybe Bool -- ^ Administrators only. 'True', if the administrator can access the chat event log, chat statistics, message statistics in channels, see channel members, see anonymous administrators in supergroups and ignore slow mode. Implied by any other administrator privilege.
   , chatMemberCanDeleteMessages     :: Maybe Bool -- ^ Administrators only. True, if the administrator can delete messages of other users.
-  , chatMemberCanManageVoiceChats   :: Maybe Bool -- ^ Administrators only. True, if the administrator can manage voice chats
-  , chatMemberCanRestrictMembers    :: Maybe Bool -- ^ Administrators only. True, if the administrator can restrict, ban or unban chat members
-  , chatMemberCanPromoteMembers     :: Maybe Bool -- ^ Administrators only. True, if the administrator can add new administrators with a subset of his own privileges or demote administrators that he has promoted, directly or indirectly (promoted by administrators that were appointed by the user)
-  , chatMemberCanChangeInfo         :: Maybe Bool -- ^ Administrators only. True, if the administrator can change the chat title, photo and other settings
-  , chatMemberCanPostMessages       :: Maybe Bool -- ^ Administrators only. True, if the administrator can post in the channel, channels only
-  , chatMemberCanEditMessages       :: Maybe Bool -- ^ Administrators only. True, if the administrator can edit messages of other users and can pin messages, channels only
+  , chatMemberCanManageVideoChats   :: Maybe Bool -- ^ Administrators only. True, if the administrator can manage video (previously, voice) chats.
+  , chatMemberCanRestrictMembers    :: Maybe Bool -- ^ Administrators only. True, if the administrator can restrict, ban or unban chat members.
+  , chatMemberCanPromoteMembers     :: Maybe Bool -- ^ Administrators only. True, if the administrator can add new administrators with a subset of his own privileges or demote administrators that he has promoted, directly or indirectly (promoted by administrators that were appointed by the user).
+  , chatMemberCanChangeInfo         :: Maybe Bool -- ^ Administrators only. True, if the administrator can change the chat title, photo and other settings.
+  , chatMemberCanPostMessages       :: Maybe Bool -- ^ Administrators only. True, if the administrator can post in the channel, channels only.
+  , chatMemberCanEditMessages       :: Maybe Bool -- ^ Administrators only. True, if the administrator can edit messages of other users and can pin messages, channels only.
 
   -- administrator, restricted
-  , chatMemberCanInviteUsers        :: Maybe Bool -- ^ Administrators and restricted only. True, if the administrator can invite new users to the chat
-  , chatMemberCanPinMessages        :: Maybe Bool -- ^ Administrators and restricted only. True, if the administrator can pin messages, supergroups only
+  , chatMemberCanInviteUsers        :: Maybe Bool -- ^ Administrators and restricted only. True, if the administrator can invite new users to the chat.
+  , chatMemberCanPinMessages        :: Maybe Bool -- ^ Administrators and restricted only. True, if the administrator can pin messages, supergroups only.
 
   -- restricted
   , chatMemberIsMember              :: Maybe Bool -- ^ Restricted only. True, if the user is a member of the chat at the moment of the request.
-  , chatMemberCanSendMessages       :: Maybe Bool -- ^ Restricted only. True, if the user can send text messages, contacts, locations and venues
-  , chatMemberCanSendMediaMessages  :: Maybe Bool -- ^ Restricted only. True, if the user can send audios, documents, photos, videos, video notes and voice notes, implies can_send_messages
+  , chatMemberCanSendMessages       :: Maybe Bool -- ^ Restricted only. True, if the user can send text messages, contacts, locations and venues.
+  , chatMemberCanSendMediaMessages  :: Maybe Bool -- ^ Restricted only. True, if the user can send audios, documents, photos, videos, video notes and voice notes, implies can_send_messages.
   , chatMemberCanSendPolls          :: Maybe Bool -- ^ Restricted only. True, if the user is allowed to send polls.
-  , chatMemberCanSendOtherMessages  :: Maybe Bool -- ^ Restricted only. True, if the user can send animations, games, stickers and use inline bots, implies can_send_media_messages
-  , chatMemberCanAddWebPagePreviews :: Maybe Bool -- ^ Restricted only. True, if user may add web page previews to his messages, implies can_send_media_messages
+  , chatMemberCanSendOtherMessages  :: Maybe Bool -- ^ Restricted only. True, if the user can send animations, games, stickers and use inline bots, implies can_send_media_messages.
+  , chatMemberCanAddWebPagePreviews :: Maybe Bool -- ^ Restricted only. True, if user may add web page previews to his messages, implies can_send_media_messages.
   }
   deriving (Generic, Show)
 
@@ -1083,6 +1140,7 @@
 
 addType :: Text -> [Pair] -> [Pair]
 addType name xs = ("type" .= name) : xs
+
 instance ToJSON BotCommandScope where
   toJSON = \case
     BotCommandScopeDefault ->
@@ -1201,10 +1259,10 @@
   , ''PassportErrorSource
   , ''EncryptedCredentials
   , ''ProximityAlertTriggered
-  , ''VoiceChatScheduled
-  , ''VoiceChatStarted
-  , ''VoiceChatEnded
-  , ''VoiceChatParticipantsInvited
+  , ''VideoChatScheduled
+  , ''VideoChatStarted
+  , ''VideoChatEnded
+  , ''VideoChatParticipantsInvited
   , ''ChatPermissions
   , ''ChatLocation
   , ''StickerSet
@@ -1214,6 +1272,9 @@
   , ''ShippingOption
   , ''ShippingQuery
   , ''PreCheckoutQuery
+  , ''WebAppData
+  , ''WebAppInfo
+  , ''ChatAdministratorRights
   ]
 
 instance ToJSON InputMediaGeneric where toJSON = gtoJSON
@@ -1327,7 +1388,6 @@
          \t -> Input "disable_content_type_detection" (bool "false" "true" t)
       ]) (toMultipart imgt)
 
-
 -- | Multipart file helper
 makeFile :: Text -> InputFile ->  MultipartData Tmp ->  MultipartData Tmp
 makeFile name (InputFile path ct) (MultipartData fields files) = 
@@ -1339,3 +1399,5 @@
   MultipartData 
     (Input name (TL.toStrict $ encodeToLazyText file) : fields) 
     files
+
+
diff --git a/src/Telegram/Bot/API/UpdatingMessages.hs b/src/Telegram/Bot/API/UpdatingMessages.hs
--- a/src/Telegram/Bot/API/UpdatingMessages.hs
+++ b/src/Telegram/Bot/API/UpdatingMessages.hs
@@ -25,7 +25,7 @@
   , editMessageTextMessageId             :: Maybe MessageId -- ^ Required if 'editMessageTextInlineMessageId' is not specified. Identifier of the sent message.
   , editMessageTextInlineMessageId       :: Maybe MessageId -- ^ Required if 'editMessageTextChatId' and 'editMessageTextMessageId' are not specified. Identifier of the sent message.
   , editMessageTextText                  :: Text -- ^ Text of the message to be sent.
-  , editMessageTextParseMode             :: Maybe ParseMode -- ^ Send 'Markdown' or 'HTML', if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message.
+  , editMessageTextParseMode             :: 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.
   , editMessageEntities                  :: Maybe [MessageEntity] -- ^ A JSON-serialized list of special entities that appear in message text, which can be specified instead of /parse_mode/.
   , editMessageTextDisableWebPagePreview :: Maybe Bool -- ^ Disables link previews for links in this message.
   , editMessageTextReplyMarkup           :: Maybe SomeReplyMarkup -- ^ 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/WebApps.hs b/src/Telegram/Bot/API/WebApps.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/WebApps.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedStrings          #-}
+{-# LANGUAGE TemplateHaskell            #-}
+{-# LANGUAGE TypeApplications           #-}
+{-# LANGUAGE TypeOperators              #-}
+module Telegram.Bot.API.WebApps where
+
+import Data.Text (Text)
+import Data.Proxy
+import GHC.Generics (Generic)
+import Servant.API
+import Servant.Client hiding (Response)
+
+import Telegram.Bot.API.Internal.Utils (deriveJSON')
+import Telegram.Bot.API.MakingRequests (Response)
+import Telegram.Bot.API.InlineMode (InlineQueryId)
+import Telegram.Bot.API.InlineMode.InlineQueryResult (InlineQueryResult)
+
+-- * Types
+
+-- ** 'AnswerWebAppQueryRequest'
+
+data AnswerWebAppQueryRequest = AnswerWebAppQueryRequest
+  { answerWebAppQueryRequestWebAppQueryId :: Text              -- ^ Unique identifier for the query to be answered.
+  , answerWebAppQueryRequestResult        :: InlineQueryResult -- ^ A JSON-serialized object describing the message to be sent.
+  }
+  deriving (Generic, Show)
+
+-- ** 'SentWebAppMessage'
+
+-- | Contains information about an inline message sent by a Web App on behalf of a user.
+newtype SentWebAppMessage = SentWebAppMessage
+  { sentWebAppMessageInlineMessageId :: Maybe InlineQueryId
+  }
+  deriving (Generic, Show)
+  
+foldMap deriveJSON'
+  [ ''SentWebAppMessage
+  , ''AnswerWebAppQueryRequest
+  ]
+
+-- * Methods
+
+-- ** 'answerWebAppQuery'
+
+type AnswerWebAppQuery
+  = "answerWebAppQuery" :> ReqBody '[JSON] AnswerWebAppQueryRequest :> Post '[JSON] (Response SentWebAppMessage)
+
+-- | Use this method to set the result of an interaction with a Web App
+-- and send a corresponding message on behalf of the user
+-- to the chat from which the query originated.
+-- 
+-- On success, a 'SentWebAppMessage' object is returned.
+answerWebAppQuery :: AnswerWebAppQueryRequest -> ClientM (Response SentWebAppMessage)
+answerWebAppQuery = client (Proxy @AnswerWebAppQuery)
diff --git a/src/Telegram/Bot/Simple/Reply.hs b/src/Telegram/Bot/Simple/Reply.hs
--- a/src/Telegram/Bot/Simple/Reply.hs
+++ b/src/Telegram/Bot/Simple/Reply.hs
@@ -37,7 +37,7 @@
 -- This is just like 'SendMessageRequest' but without 'SomeChatId' specified.
 data ReplyMessage = ReplyMessage
   { replyMessageText                  :: Text -- ^ Text of the message to be sent.
-  , replyMessageParseMode             :: Maybe ParseMode -- ^ Send 'Markdown' or 'HTML', if you want Telegram apps to show bold, italic, fixed-width text or inline URLs in your bot's message.
+  , replyMessageParseMode             :: 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.
   , replyMessageEntities              :: Maybe [MessageEntity] -- ^ A JSON-serialized list of special entities that appear in message text, which can be specified instead of /parse_mode/.
   , replyMessageDisableWebPagePreview :: Maybe Bool -- ^ Disables link previews for links in this message.
   , replyMessageDisableNotification   :: Maybe Bool -- ^ Sends the message silently. Users will receive a notification with no sound.
diff --git a/telegram-bot-simple.cabal b/telegram-bot-simple.cabal
--- a/telegram-bot-simple.cabal
+++ b/telegram-bot-simple.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           telegram-bot-simple
-version:        0.4.5
+version:        0.5
 synopsis:       Easy to use library for building Telegram bots.
 description:    Please see the README on Github at <https://github.com/fizruk/telegram-bot-simple#readme>
 category:       Web
@@ -47,6 +47,7 @@
       Telegram.Bot.API.Stickers
       Telegram.Bot.API.Types
       Telegram.Bot.API.UpdatingMessages
+      Telegram.Bot.API.WebApps
       Telegram.Bot.Simple
       Telegram.Bot.Simple.BotApp
       Telegram.Bot.Simple.BotApp.Internal
