diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,8 @@
 # Revision history for http-query
 
+## 0.1.3 (2022-02-17)
+- new withURLQuery setup function
+
 ## 0.1.2 (2022-02-17)
 - webAPIQuery: revert to not using setRequestCheckStatus
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -11,10 +11,10 @@
 
 A few projects use http-query already:
 
-- https://hackage.haskell.org/package/cached-json-file
-- https://hackage.haskell.org/package/fbrnch
-- https://hackage.haskell.org/package/stack-all
-- https://hackage.haskell.org/package/bodhi
-- https://hackage.haskell.org/package/copr-api
-- https://hackage.haskell.org/package/pagure
-- https://hackage.haskell.org/package/pdc
+- <https://hackage.haskell.org/package/cached-json-file>
+- <https://hackage.haskell.org/package/fbrnch>
+- <https://hackage.haskell.org/package/stack-all>
+- <https://hackage.haskell.org/package/bodhi>
+- <https://hackage.haskell.org/package/copr-api>
+- <https://hackage.haskell.org/package/pagure>
+- <https://hackage.haskell.org/package/pdc>
diff --git a/http-query.cabal b/http-query.cabal
--- a/http-query.cabal
+++ b/http-query.cabal
@@ -1,5 +1,5 @@
 name:                http-query
-version:             0.1.2
+version:             0.1.3
 synopsis:            Simple http queries
 description:
         Simple web API queries returning JSON.
@@ -29,13 +29,9 @@
                      , text
   if impl(ghc < 8)
     build-depends:     transformers
-  if impl(ghc<8.3)
-    build-depends:
-                       http-client < 0.7.11 || > 0.7.11,
-                       http-client-tls < 0.3.6 || > 0.3.6
   exposed-modules:     Network.HTTP.Query
   hs-source-dirs:      src
-
+  default-language:    Haskell2010
   ghc-options:         -Wall
   if impl(ghc >= 8.0)
     ghc-options:       -Wcompat
@@ -48,5 +44,3 @@
   if impl(ghc >= 8.4)
     ghc-options:       -Wmissing-export-lists
                        -Wpartial-fields
-
-  default-language:    Haskell2010
diff --git a/src/Network/HTTP/Query.hs b/src/Network/HTTP/Query.hs
--- a/src/Network/HTTP/Query.hs
+++ b/src/Network/HTTP/Query.hs
@@ -23,14 +23,18 @@
 -}
 
 module Network.HTTP.Query (
+  -- * Queries
+  withURLQuery,
+  webAPIQuery,
+  apiQueryURI,
+  (+/+),
+  -- * Query parameters
   Query,
   QueryItem,
   maybeKey,
   makeKey,
   makeItem,
-  (+/+),
-  webAPIQuery,
-  apiQueryURI,
+  -- * Lookup fields
   lookupKey,
   lookupKeyEither,
   lookupKey'
@@ -86,30 +90,30 @@
         | head t == '/' = s ++ t
 s +/+ t = s ++ '/' : t
 
--- | Low-level web api query
-webAPIQuery :: (MonadIO m, FromJSON a)
-            => String -- ^ url of endpoint
-            -> Query -- ^ query options
-            -> m a -- ^ returned json
-webAPIQuery url params =
+-- | Sets up an API request for some action
+withURLQuery :: String -> Query -> (Request -> a) -> a
+withURLQuery url params act =
   case parseURI url of
     Nothing -> error $ "Cannot parse uri: " ++ url
     Just uri ->
       let req = setRequestQueryString params $
                 requestFromURI_ uri
-      in getResponseBody <$> httpJSON req
+      in act req
 
+-- | Low-level web api query
+webAPIQuery :: (MonadIO m, FromJSON a)
+            => String -- ^ URL of endpoint
+            -> Query -- ^ query options
+            -> m a -- ^ returned JSON
+webAPIQuery url params =
+  withURLQuery url params $ fmap getResponseBody . httpJSON
+
 -- | Get the URI for a web query
-apiQueryURI :: String -- ^ url of endpoint
+apiQueryURI :: String -- ^ URL of endpoint
             -> Query -- ^ query options
             -> URI
 apiQueryURI url params =
-  case parseURI url of
-    Nothing -> error $ "Cannot parse uri: " ++ url
-    Just uri ->
-      let req = setRequestQueryString params $
-                requestFromURI_ uri
-      in getUri req
+  withURLQuery url params getUri
 
 -- FIXME support "key1.key2" etc
 -- | Look up key in object
