diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,5 +2,11 @@
 
 `pagure-hs` uses [PVP Versioning](https://pvp.haskell.org).
 
+## 0.1.1 (2022-02-17)
+- add queryPagure' which errors when JSON response has "error" field
+  and use it for queryPagureCount and queryPagurePaged
+  This requires http-query-0.1.2 or later to avoid early exceptions
+  and get meanful error messages instead
+
 ## 0.1.0 (2021-12-27)
 * Initial Hackage release
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,14 +1,14 @@
 # pagure-hs
 
-[![Hackage](https://img.shields.io/hackage/v/pagure-hs.svg?logo=haskell)](https://hackage.haskell.org/package/pagure-hs)
-[![Stackage Lts](http://stackage.org/package/pagure-hs/badge/lts)](http://stackage.org/lts/package/pagure-hs)
-[![Stackage Nightly](http://stackage.org/package/pagure-hs/badge/nightly)](http://stackage.org/nightly/package/pagure-hs)
+[![Hackage](https://img.shields.io/hackage/v/pagure.svg?logo=haskell)](https://hackage.haskell.org/package/pagure)
+[![Stackage Lts](http://stackage.org/package/pagure/badge/lts)](http://stackage.org/lts/package/pagure)
+[![Stackage Nightly](http://stackage.org/package/pagure/badge/nightly)](http://stackage.org/nightly/package/pagure)
 [![GPL-2.0-only license](https://img.shields.io/badge/license-GPL--2.0--only-blue.svg)](LICENSE)
 
 Pagure REST client library.
 
 [Pagure](https://pagure.io/pagure) is an opensource git forge
-(ie similar to gitlab).
+(ie somewhat like gitlab).
 
 The primary instance is https://pagure.io,
 but pagure is also used to host current Fedora package
diff --git a/pagure.cabal b/pagure.cabal
--- a/pagure.cabal
+++ b/pagure.cabal
@@ -1,6 +1,6 @@
 cabal-version:       1.22
 name:                pagure
-version:             0.1.0
+version:             0.1.1
 synopsis:            Pagure REST client library
 description:         A library for querying Pagure gitforges via REST.
 homepage:            https://github.com/juhp/pagure-hs
@@ -9,7 +9,7 @@
 license-file:        LICENSE
 author:              Jens Petersen <petersen@redhat.com>
 maintainer:          Jens Petersen <petersen@redhat.com>
-copyright:           2020-2021 Jens Petersen <petersen@redhat.com>
+copyright:           2020-2022 Jens Petersen <petersen@redhat.com>
 category:            Network
 build-type:          Simple
 extra-doc-files:     README.md
@@ -28,7 +28,7 @@
 library
   build-depends:       aeson
                      , base >= 4 && < 5
-                     , http-query
+                     , http-query >= 0.1.2
                      , text
   hs-source-dirs:      src
   exposed-modules:     Fedora.Pagure
diff --git a/src/Fedora/Pagure.hs b/src/Fedora/Pagure.hs
--- a/src/Fedora/Pagure.hs
+++ b/src/Fedora/Pagure.hs
@@ -24,6 +24,7 @@
   , pagureListGroups
   , pagureProjectGitURLs
   , queryPagure
+  , queryPagure'
   , queryPagureSingle
   , queryPagurePaged
   , queryPagureCount
@@ -124,7 +125,8 @@
 -- | List repo branches with commits
 --
 -- https://pagure.io/api/0/#projects-tab
-pagureListGitBranchesWithCommits :: String -> String -> IO (Either String Object)
+pagureListGitBranchesWithCommits :: String -> String
+                                 -> IO (Either String Object)
 pagureListGitBranchesWithCommits server repo = do
   let path = repo +/+ "git/branches"
       params = makeKey "with_commits" "1"
@@ -173,6 +175,14 @@
   let url = "https://" ++ server +/+ "api/0" +/+ path
   in webAPIQuery url params
 
+-- | low-level query
+-- Like queryPagure but errors if JSON has "error" field:
+-- eg for a non-existent API query path
+queryPagure' :: String -> String -> Query -> IO Object
+queryPagure' server path params = do
+  eres <- queryPagureSingle server path params
+  either error return eres
+
 -- | single query
 queryPagureSingle :: String -> String -> Query -> IO (Either String Object)
 queryPagureSingle server path params = do
@@ -182,20 +192,23 @@
              Nothing -> Right res
 
 -- | count total number of hits
+-- FIXME: errors if the query fails
 queryPagureCount :: String -> String -> Query -> String -> IO (Maybe Integer)
 queryPagureCount server path params pagination = do
-  res <- queryPagure server path (params ++ makeKey "per_page" "1")
+  res <- queryPagure' server path (params ++ makeKey "per_page" "1")
   return $ lookupKey (T.pack pagination) res >>= lookupKey "pages"
 
 -- | get all pages of results
 --
--- Note this can potentially download very large amount of data.
+-- Warning: this can potentially download very large amounts of data.
 -- For potentially large queries, it is a good idea to queryPagureCount first.
+--
+-- Errors for a non-existent API path
 queryPagurePaged :: String -> String -> Query -> (String,String) -> IO [Object]
 queryPagurePaged server path params (pagination,paging) = do
   -- FIXME allow overriding per_page
   let maxPerPage = "100"
-  res1 <- queryPagure server path (params ++ makeKey "per_page" maxPerPage)
+  res1 <- queryPagure' server path (params ++ makeKey "per_page" maxPerPage)
   case (lookupKey (T.pack pagination) res1 :: Maybe Object) >>= lookupKey "pages" :: Maybe Int of
     Nothing -> return []
     Just pages -> do
