diff --git a/hzulip.cabal b/hzulip.cabal
--- a/hzulip.cabal
+++ b/hzulip.cabal
@@ -1,5 +1,5 @@
 name:                hzulip
-version:             0.4.0.1
+version:             0.4.1.0
 synopsis:            A haskell wrapper for the Zulip API.
 description:         This a Zulip API wrapper for Haskell.
 homepage:            https://github.com/yamadapc/hzulip
@@ -19,9 +19,9 @@
                      , wreq >=0.2 && <1
                      , lens >=4.4 && <5
                      , aeson >=0.7 && <1
+                     , lens-aeson >=1 && <2
                      , bytestring >=0.10 && <1
                      , text >=1.1 &&<1.2
-                     , hspec >=1.11 && <2
   hs-source-dirs:      src
   default-language:    Haskell2010
 
@@ -34,7 +34,9 @@
                      , wreq >=0.2 && <1
                      , lens >=4.4 && <5
                      , aeson >=0.7 && <1
+                     , lens-aeson >=1 && <2
                      , bytestring >=0.10 && <1
                      , hspec >=1.11 && <2
                      , raw-strings-qq >=1.0.2 && <2
+                     , text >=1.1 &&<1.2
   default-language:    Haskell2010
diff --git a/src/HZulip.hs b/src/HZulip.hs
--- a/src/HZulip.hs
+++ b/src/HZulip.hs
@@ -9,6 +9,7 @@
               , defaultBaseUrl
               , eventTypes
               , getEvents
+              , getSubscriptions
               , newZulip
               , onNewEvent
               , onNewMessage
@@ -19,11 +20,12 @@
               )
   where
 
-import Control.Concurrent
-import Control.Exception
-import Control.Lens ((.~), (&), (^.))
+import Control.Concurrent (threadDelay)
+import Control.Exception (SomeException, handle)
+import Control.Lens ((.~), (&), (^.), (^..))
+import Data.Aeson.Lens (key, values, _String)
 import qualified Data.ByteString.Char8 as BS (pack)
-import qualified Data.Text as T (pack)
+import qualified Data.Text as T (pack, unpack)
 import Network.Wreq
 import qualified Network.Wreq.Types as WT (params)
 
@@ -105,6 +107,14 @@
         else fail $ responseMsg body
 
 -- |
+-- Get a list of the streams the client is currently subscribed to.
+getSubscriptions :: ZulipClient -> IO [String]
+getSubscriptions z = do
+    r <- getWith (reqOptions z) (subscriptionsUrl z)
+    return $ map T.unpack $ r ^.. responseBody . key "subscriptions"
+                                . values . key "name" . _String
+
+-- |
 -- Fetches new set of events from a `Queue`.
 getEvents :: ZulipClient -> Queue -> Bool -> IO (Queue, [Event])
 getEvents z q b = do
@@ -171,6 +181,11 @@
 -- Gets the endpoint for fetching events for a given `ZulipClient`
 eventsUrl :: ZulipClient -> String
 eventsUrl = (++ "/events") . clientBaseUrl
+
+-- |
+-- Gets the endpoint for fetching subscriptions for a given `ZulipClient`
+subscriptionsUrl :: ZulipClient -> String
+subscriptionsUrl = (++ "/users/me/subscriptions") . clientBaseUrl
 
 -- |
 -- Constructs the `Wreq` HTTP request `Options` object for a `ZulipClient`
