diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,14 @@
+0.3.7
+---
+
+- Add inline mode support (see [#45](https://github.com/fizruk/telegram-bot-simple/pull/45));
+
 0.3.6
 ---
 
-- Remove extra spaces, restore Tested-with (see [#48]( https://github.com/fizruk/telegram-bot-simple/pull/48 ));
+- Remove extra spaces, restore Tested-with (see [#48](https://github.com/fizruk/telegram-bot-simple/pull/48));
 - Add support of ghc 9 (see [#47]( https://github.com/fizruk/telegram-bot-simple/pull/47 ));
+
 0.3.5
 ---
 
diff --git a/examples/EchoBot.hs b/examples/EchoBot.hs
--- a/examples/EchoBot.hs
+++ b/examples/EchoBot.hs
@@ -3,15 +3,19 @@
 
 import           Data.Text                        (Text)
 import qualified Data.Text                        as Text
+import           Data.Maybe
 
 import           Telegram.Bot.API
 import           Telegram.Bot.Simple
 import           Telegram.Bot.Simple.UpdateParser (updateMessageText)
+import           Telegram.Bot.API.InlineMode.InlineQueryResult
+import           Telegram.Bot.API.InlineMode.InputMessageContent (defaultInputTextMessageContent)
 
 type Model = ()
 
 data Action
   = NoOp
+  | InlineEcho InlineQueryId Text
   | Echo Text
 
 echoBot :: BotApp Model Action
@@ -23,14 +27,30 @@
   }
 
 updateToAction :: Update -> Model -> Maybe Action
-updateToAction update _ =
-  case updateMessageText update of
-    Just text -> Just (Echo text)
-    Nothing   -> Nothing
+updateToAction update _
+  | isJust $ updateInlineQuery update =  do
+      query <- updateInlineQuery update
+      let queryId = inlineQueryId query
+      let msg =  inlineQueryQuery query
+      Just $ InlineEcho queryId msg
+  | otherwise = case updateMessageText update of
+      Just text -> Just (Echo text)
+      Nothing   -> Nothing
 
 handleAction :: Action -> Model -> Eff Action Model
 handleAction action model = case action of
   NoOp -> pure model
+  InlineEcho queryId msg -> model <# do
+    _ <- liftClientM (
+      answerInlineQuery (
+          AnswerInlineQueryRequest
+            queryId
+            [
+              InlineQueryResult InlineQueryResultArticle (InlineQueryResultId msg) (Just msg) (Just (defaultInputTextMessageContent msg))
+            ]
+        )
+      )
+    return NoOp
   Echo msg -> model <# do
     replyText msg
     return NoOp
@@ -38,7 +58,7 @@
 run :: Token -> IO ()
 run token = do
   env <- defaultTelegramClientEnv token
-  startBot_ (conversationBot updateChatId echoBot) env
+  startBot_ echoBot env
 
 main :: IO ()
 main = do
diff --git a/src/Telegram/Bot/API.hs b/src/Telegram/Bot/API.hs
--- a/src/Telegram/Bot/API.hs
+++ b/src/Telegram/Bot/API.hs
@@ -11,8 +11,8 @@
   module Telegram.Bot.API.UpdatingMessages,
 --   -- * Stickers
 --   module Telegram.Bot.API.Stickers,
---   -- * Inline mode
---   module Telegram.Bot.API.InlineMode,
+  -- * Inline mode
+  module Telegram.Bot.API.InlineMode,
 --   -- * Payments
 --   module Telegram.Bot.API.Payments,
 --   -- * Games
@@ -25,6 +25,6 @@
 import           Telegram.Bot.API.Types
 import           Telegram.Bot.API.UpdatingMessages
 -- import Telegram.Bot.API.Stickers
--- import Telegram.Bot.API.InlineMode
+import Telegram.Bot.API.InlineMode
 -- import Telegram.Bot.API.Payments
 -- import Telegram.Bot.API.Games
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
@@ -18,6 +18,7 @@
 import           Telegram.Bot.API.Internal.Utils
 import           Telegram.Bot.API.MakingRequests
 import           Telegram.Bot.API.Types
+import           Telegram.Bot.API.InlineMode
 
 -- ** 'Update'
 
@@ -33,7 +34,7 @@
   , updateChannelPost       :: Maybe Message -- ^ New incoming channel post of any kind — text, photo, sticker, etc.
   , 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
+  , 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
diff --git a/src/Telegram/Bot/API/InlineMode.hs b/src/Telegram/Bot/API/InlineMode.hs
--- a/src/Telegram/Bot/API/InlineMode.hs
+++ b/src/Telegram/Bot/API/InlineMode.hs
@@ -1,1 +1,60 @@
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedStrings          #-}
+{-# LANGUAGE TemplateHaskell            #-}
+{-# LANGUAGE TypeApplications           #-}
+{-# LANGUAGE TypeOperators              #-}
 module Telegram.Bot.API.InlineMode where
+
+import           Data.Aeson                      (FromJSON (..), ToJSON (..))
+import           Data.Hashable                   (Hashable)
+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
+import           Telegram.Bot.API.InlineMode.InlineQueryResult
+
+-- * Available types
+-- ** User
+--
+-- | This object represents an incoming inline query. When the user sends an empty query, your bot could return some default or trending results.
+--
+-- <https://core.telegram.org/bots/api#inline-mode>
+data InlineQuery = InlineQuery
+  { inlineQueryId       :: InlineQueryId -- ^ Unique query identifier
+  , inlineQueryFrom     :: User -- ^ Sender
+  , inlineQueryLocation :: Maybe Location -- ^ For bots that require user location, sender location
+  , inlineQueryQuery    :: Text -- ^ Text of the query, up to 256 characters
+  , inlineQueryOffset   :: Text -- ^ Offset of the results to be returned, can be controlled by bot
+  } deriving (Generic, Show)
+
+-- | Unique identifier for this query
+newtype InlineQueryId = InlineQueryId Text
+  deriving (Eq, Show, ToJSON, FromJSON, Hashable, Generic)
+
+-- * Available methods
+
+-- ** answerInlineQuery
+
+type AnswerInlineQuery
+  = "answerInlineQuery" :> ReqBody '[JSON] AnswerInlineQueryRequest :> Post '[JSON] (Response Bool)
+
+answerInlineQuery :: AnswerInlineQueryRequest -> ClientM (Response Bool)
+answerInlineQuery = client (Proxy @AnswerInlineQuery)
+
+data AnswerInlineQueryRequest = AnswerInlineQueryRequest
+  { answerInlineQueryRequestInlineQueryId :: InlineQueryId
+  , answerInlineQueryRequestResults       :: [InlineQueryResult]
+  } deriving (Generic)
+
+instance ToJSON AnswerInlineQueryRequest where toJSON = gtoJSON
+instance FromJSON AnswerInlineQueryRequest where parseJSON = gparseJSON
+
+deriveJSON' ''InlineQuery
diff --git a/src/Telegram/Bot/API/InlineMode/InlineQueryResult.hs b/src/Telegram/Bot/API/InlineMode/InlineQueryResult.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/InlineMode/InlineQueryResult.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE OverloadedStrings          #-}
+module Telegram.Bot.API.InlineMode.InlineQueryResult where
+
+import           Data.Aeson                      (FromJSON (..), ToJSON (..), Value (String))
+import           Data.Hashable                   (Hashable)
+import           Data.Text                       (Text)
+import           GHC.Generics                    (Generic)
+
+import           Telegram.Bot.API.Internal.Utils
+import           Telegram.Bot.API.InlineMode.InputMessageContent
+
+-- | This object represents one result of an inline query
+data InlineQueryResult = InlineQueryResult
+  { inlineQueryResultType     :: InlineQueryResultType -- ^ Type of the result
+  , inlineQueryResultId :: InlineQueryResultId -- ^ Unique identifier for this result, 1-64 Bytes
+  , inlineQueryResultTitle :: Maybe Text -- ^ Title of the result (only valid for "Article", "Photo", "Gif", "Mpeg4Gif", "Video", "Audio", "Voice", "Document", "Location", "Venue", "CachedPhoto", "CachedGif", "CachedMpeg4Gif", "CachedDocument", "CachedVideo", "CachedVoice" types of results)
+  , inlineQueryResultInputMessageContent :: Maybe InputMessageContent
+--  , inlineQueryResultContact  :: Maybe Contact
+  } deriving (Generic, Show)
+
+newtype InlineQueryResultId = InlineQueryResultId Text
+  deriving (Eq, Show, Generic, ToJSON, FromJSON, Hashable)
+
+instance ToJSON InlineQueryResult where toJSON = gtoJSON
+instance FromJSON InlineQueryResult where parseJSON = gparseJSON
+
+-- | Type of inline query result
+data InlineQueryResultType
+  = InlineQueryResultCachedAudio
+  | InlineQueryResultCachedDocument
+  | InlineQueryResultCachedGif
+  | InlineQueryResultCachedMpeg4Gif
+  | InlineQueryResultCachedPhoto
+  | InlineQueryResultCachedSticker
+  | InlineQueryResultCachedVideo
+  | InlineQueryResultCachedVoice
+  | InlineQueryResultArticle
+  | InlineQueryResultAudio
+  | InlineQueryResultContact
+  | InlineQueryResultGame
+  | InlineQueryResultDocument
+  | InlineQueryResultGif
+  | InlineQueryResultLocation
+  | InlineQueryResultMpeg4Gif
+  | InlineQueryResultPhoto
+  | InlineQueryResultVenue
+  | InlineQueryResultVideo
+  | InlineQueryResultVoice
+  deriving (Eq, Show, Generic)
+
+getType :: InlineQueryResultType -> Text
+getType InlineQueryResultCachedAudio = "audio"
+getType InlineQueryResultCachedDocument = "document"
+getType InlineQueryResultCachedGif = "gif"
+getType InlineQueryResultCachedMpeg4Gif = "mpeg4_gif"
+getType InlineQueryResultCachedPhoto = "photo"
+getType InlineQueryResultCachedSticker = "sticker"
+getType InlineQueryResultCachedVideo = "video"
+getType InlineQueryResultCachedVoice = "voice"
+getType InlineQueryResultArticle = "article"
+getType InlineQueryResultAudio = "audio"
+getType InlineQueryResultContact = "contact"
+getType InlineQueryResultGame = "game"
+getType InlineQueryResultDocument = "document"
+getType InlineQueryResultGif = "gif"
+getType InlineQueryResultLocation = "location"
+getType InlineQueryResultMpeg4Gif = "mpeg4_gif"
+getType InlineQueryResultPhoto = "photo"
+getType InlineQueryResultVenue = "venue"
+getType InlineQueryResultVideo = "video"
+getType InlineQueryResultVoice = "voice"
+
+instance ToJSON InlineQueryResultType where
+  toJSON = String . getType
+
+instance FromJSON InlineQueryResultType where parseJSON = gparseJSON
diff --git a/src/Telegram/Bot/API/InlineMode/InputMessageContent.hs b/src/Telegram/Bot/API/InlineMode/InputMessageContent.hs
new file mode 100644
--- /dev/null
+++ b/src/Telegram/Bot/API/InlineMode/InputMessageContent.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE DeriveGeneric              #-}
+module Telegram.Bot.API.InlineMode.InputMessageContent (InputMessageContent(..), defaultInputTextMessageContent, defaultInputLocationMessageContent) where
+
+import           Data.Aeson                      (FromJSON (..), ToJSON (..))
+import           Data.Text                       (Text)
+import           GHC.Generics                    (Generic)
+
+import           Telegram.Bot.API.Internal.Utils
+
+-- | Represents the content of a text message to be sent as the result of an inline query.
+data InputMessageContent =
+  InputTextMessageContent -- ^ Represents the [content](https://core.telegram.org/bots/api#inputmessagecontent) of a text message to be sent as the result of an inline query.
+  { inputMessageContentMessageText :: Text -- ^ Text of the message to be sent, 1-4096 characters
+  , inputMessageContentParseMode :: Maybe Text -- ^ Mode for parsing entities in the message text. See [formatting options](https://core.telegram.org/bots/api#formatting-options) for more details.
+  , inputMessageContentDisableWebPagePrefiew :: Maybe Bool -- ^ Disables link previews for links in the sent message
+  }
+  | InputLocationMessageContent                                      -- ^ Represents the [content](https://core.telegram.org/bots/api#inputmessagecontent) of a location message to be sent as the result of an inline query.
+  { inputMessageContentLatitude :: Float                     -- ^ Latitude of the location in degrees
+  , inputMessageContentLongitude :: Float                    -- ^ Longitude of the location in degrees
+  , inputMessageContentHorizontalAccuracy :: Maybe Float     -- ^ The radius of uncertainty for the location, measured in meters; 0-1500
+  , inputMessageContentLivePeriod :: Maybe Integer           -- ^ Period in seconds for which the location can be updated, should be between 60 and 86400.
+  , inputMessageContentHeading :: Maybe Integer              -- ^ For live locations, a direction in which the user is moving, in degrees. Must be between 1 and 360 if specified.
+  , inputMessageContentProximityAlertRadius :: Maybe Integer -- ^ For live locations, a maximum distance for proximity alerts about approaching another chat member, in meters. Must be between 1 and 100000 if specified.
+  }
+  | InputVenueMessageContent                              -- ^ Represents the content of a [venue](https://core.telegram.org/bots/api#inputmessagecontent) message to be sent as the result of an inline query.
+  { inputMessageContentLatitude :: Float             -- ^ Latitude of the venue in degrees
+  , inputMessageContentLongitude :: Float            -- ^ Longitude of the venue in degrees
+  , inputMessageContentTitle :: Text                 -- ^ Name of the venue
+  , inputMessageContentAddress :: Text               -- ^ Address of the venue
+  , inputMessageContentFoursquareId :: Maybe Text    -- ^ Foursquare identifier of the venue, if known
+  , inputMessageContentFoursquareType :: Maybe Text  -- ^ Foursquare type of the venue, if known. (For example, “arts_entertainment\/default”, “arts_entertainment\/aquarium” or “food\/icecream”.)
+  , inputMessageContentGooglePlaceId :: Maybe Text   -- ^ Google Places identifier of the venue
+  , inputMessageContentGooglePlaceType :: Maybe Text -- ^ Google Places type of the venue. (See [supported types](https://developers.google.com/places/web-service/supported_types).)
+  }
+  | InputContactMessageContent                         -- ^ Represents the [content](https://core.telegram.org/bots/api#inputmessagecontent) of a contact message to be sent as the result of an inline query.
+  { inputMessageContentPhoneNumber :: Text      -- ^ Contact's phone number
+  , inputMessageContentFirstName :: Text        -- ^ Contact's first name
+  , inputMessageContentSecondName :: Maybe Text -- ^ Contact's last name
+  , inputMessageContentVcard :: Maybe Text      -- ^ Additional data about the contact in the form of a [vCard](https://en.wikipedia.org/wiki/VCard), 0-2048 bytes
+  } deriving (Generic, Show)
+
+-- ** Helper functions to easily construct 'InputMessageContent'
+
+defaultInputTextMessageContent :: Text -> InputMessageContent
+defaultInputTextMessageContent text = InputTextMessageContent text Nothing Nothing
+
+defaultInputLocationMessageContent :: Float -> Float -> InputMessageContent
+defaultInputLocationMessageContent lat long = InputLocationMessageContent lat long Nothing Nothing Nothing Nothing 
+
+instance ToJSON InputMessageContent where toJSON = gtoJSON
+instance FromJSON InputMessageContent where parseJSON = gparseJSON
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.3.6
+version:        0.3.7
 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
@@ -33,6 +33,8 @@
       Telegram.Bot.API.Games
       Telegram.Bot.API.GettingUpdates
       Telegram.Bot.API.InlineMode
+      Telegram.Bot.API.InlineMode.InlineQueryResult
+      Telegram.Bot.API.InlineMode.InputMessageContent
       Telegram.Bot.API.Internal.Utils
       Telegram.Bot.API.MakingRequests
       Telegram.Bot.API.Methods
