diff --git a/network-api-support.cabal b/network-api-support.cabal
--- a/network-api-support.cabal
+++ b/network-api-support.cabal
@@ -1,5 +1,5 @@
 Name:               network-api-support
-Version:            0.0.3
+Version:            0.0.4
 License:            BSD3
 License-File:       LICENSE
 Author:             Mark Hibberd <mark@hibberd.id.au>
@@ -39,6 +39,7 @@
                     , http-types                    >= 0.6
                     , resourcet                     >= 0.3
                     , text                          >= 0.11
+                    , time                          >= 1
                     , tls                           >= 0.9
                     , tls-extra                     >= 0.4
                     , transformers                  >= 0.2
diff --git a/src/Network/Api/Support/Core.hs b/src/Network/Api/Support/Core.hs
--- a/src/Network/Api/Support/Core.hs
+++ b/src/Network/Api/Support/Core.hs
@@ -27,7 +27,7 @@
   -> StdMethod
   -> Text
   -> RequestTransformer m
-  -> Responder b
+  -> Responder m b
   -> m b
 runRequest settings stdmethod url transform  =
   runRequest' settings url (transform <> setMethod (renderStdMethod stdmethod))
@@ -40,12 +40,13 @@
   ManagerSettings
   -> Text
   -> RequestTransformer m
-  -> Responder b
+  -> Responder m b
   -> m b
 runRequest' settings url transform responder =
   do url' <- parseUrl $ unpack url
      let url'' = url' { checkStatus = const . const $ Nothing } -- handle all response codes.
-     liftM responder . withCustomManager settings . httpLbs $ appEndo transform url''
+     let req = appEndo transform url''
+     liftM (responder req) . withCustomManager settings . httpLbs $ req
 
 -- Build a custom connection manager and run ResourceT against that connection manager.
 -- This function is responsible for ensuring manager is always closed.
diff --git a/src/Network/Api/Support/Request.hs b/src/Network/Api/Support/Request.hs
--- a/src/Network/Api/Support/Request.hs
+++ b/src/Network/Api/Support/Request.hs
@@ -7,6 +7,7 @@
 , setHeader
 , addHeader
 , stripHeader
+, setCookieJar
 , setMethod
 , setBody
 , setBodyLazy
@@ -21,6 +22,7 @@
 import Data.Aeson
 import Data.CaseInsensitive
 import Data.Monoid
+import Data.Time
 
 import Network.HTTP.Conduit
 
@@ -56,6 +58,10 @@
 stripHeader n = (Endo $ \r ->  r {
     requestHeaders = filter (\x -> fst x == n) (requestHeaders r)
   })
+
+-- | Register all cookies in cookie jar against request.
+setCookieJar :: CookieJar -> UTCTime -> RequestTransformer m
+setCookieJar cj now = Endo $ \r -> fst $ insertCookiesIntoRequest r cj now
 
 -- | Set the request method to be the specified name.
 setMethod :: B.ByteString -> RequestTransformer m
diff --git a/src/Network/Api/Support/Response.hs b/src/Network/Api/Support/Response.hs
--- a/src/Network/Api/Support/Response.hs
+++ b/src/Network/Api/Support/Response.hs
@@ -6,6 +6,8 @@
 , basicResponder
 ) where
 
+import Control.Monad.Trans.Resource
+
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Lazy as BL
 import Data.Attoparsec.Lazy
@@ -16,8 +18,8 @@
 import Network.HTTP.Types
 
 -- | Response handler.
-type Responder a =
-  Response BL.ByteString -> a
+type Responder m a =
+  Request (ResourceT m) -> Response BL.ByteString -> a
 
 -- | Wrap up json parse and decode errors.
 data JsonResult a =
@@ -52,6 +54,6 @@
       (Success a) -> JsonSuccess a
 
 -- | Lift function handling status code and body into a responder.
-basicResponder :: (Int -> BL.ByteString -> a) -> Responder a
-basicResponder f (Response (Status code _) _ _ body) =
+basicResponder :: (Int -> BL.ByteString -> a) -> Responder m a
+basicResponder f _ (Response (Status code _) _ _ body) =
   f code body
