diff --git a/api-builder.cabal b/api-builder.cabal
--- a/api-builder.cabal
+++ b/api-builder.cabal
@@ -1,5 +1,5 @@
 name: api-builder
-version: 0.7.4.0
+version: 0.8.0.0
 synopsis: Library for easily building REST API wrappers in Haskell
 license: BSD3
 license-file: LICENSE
@@ -18,7 +18,7 @@
 source-repository this
   type: git
   location: git://github.com/intolerable/api-builder.git
-  tag: v0.7.4.0
+  tag: v0.8.0.0
 
 library
   exposed-modules:
@@ -36,7 +36,7 @@
     base >= 4.6 && < 4.9,
     aeson >= 0.7 && < 0.9,
     attoparsec >= 0.11 && < 0.13,
-    bifunctors == 4.*,
+    bifunctors >= 4.0 && < 6.0,
     bytestring == 0.10.*,
     either == 4.*,
     HTTP == 4000.*,
diff --git a/src/Network/API/Builder/API.hs b/src/Network/API/Builder/API.hs
--- a/src/Network/API/Builder/API.hs
+++ b/src/Network/API/Builder/API.hs
@@ -77,7 +77,8 @@
   liftIO $ closeManager m
   return res
 
--- | Runs an @API@ by executing its transformer stack and dumping it all into @IO@. Returns the actual result as well as the final states of the @Builder@ and custom state @s@.
+-- | Runs an @API@ by executing its transformer stack and dumping it all into @IO@.
+-- | Returns the actual result as well as the final states of the @Builder@ and custom state @s@.
 runAPI :: MonadIO m
        => Builder -- ^ initial @Builder@ for the @API@
        -> Manager -- ^ manager for working with conduit functions
diff --git a/src/Network/API/Builder/Send.hs b/src/Network/API/Builder/Send.hs
--- a/src/Network/API/Builder/Send.hs
+++ b/src/Network/API/Builder/Send.hs
@@ -22,24 +22,35 @@
               , requestBody = RequestBodyBS (dropQuestion $ queryString req)
               , queryString = ""
               , method = httpMethod r }
-      _ -> do
-        req <- parseUrl $ Text.unpack $ routeURL (_baseURL builder) (_customizeRoute builder r)
-        return $ _customizeRequest builder $ req { method = httpMethod r }
+      _ -> basicSend builder r
     where dropQuestion b = if ByteString.isPrefixOf "?" b then ByteString.drop 1 b else b
 
+basicSend :: Builder -> Route -> Maybe Request
+basicSend builder r = do
+  req <- parseUrl $ Text.unpack $ routeURL (_baseURL builder) (_customizeRoute builder r)
+  return $ _customizeRequest builder $ req { method = httpMethod r }
+
 instance Sendable Value where
   send builder r value =
     case httpMethod r of
       "POST" -> do
-        req <- send builder r ()
-        return $ req { requestBody = RequestBodyLBS (encode value)
-                     , requestHeaders = ("Content-Type", "application/json") : requestHeaders req }
+        req <- parseUrl $ Text.unpack $ routeURL (_baseURL builder) (_customizeRoute builder r)
+        return $ _customizeRequest builder $
+          req { requestBody = RequestBodyLBS (encode value)
+              , requestHeaders = ("Content-Type", "application/json") : requestHeaders req
+              , method = httpMethod r }
       _ -> Nothing
 
 instance Sendable ByteString where
   send builder r bs =
     case httpMethod r of
       "POST" -> do
-        req <- send builder r ()
+        req <- basicSend builder r
         return $ req { requestBody = RequestBodyLBS bs }
       _ -> Nothing
+
+data PostQuery = PostQuery
+  deriving (Show)
+
+instance Sendable PostQuery where
+  send builder r PostQuery = basicSend builder r
