diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+0.11.3
+------
+
+- Add `HasForeign (MultipartForm t a :> api)` instance.
+  [#20](https://github.com/haskell-servant/servant-multipart/pull/20)
+
 0.11.2
 ------
 
diff --git a/servant-multipart.cabal b/servant-multipart.cabal
--- a/servant-multipart.cabal
+++ b/servant-multipart.cabal
@@ -1,5 +1,5 @@
 name:                servant-multipart
-version:             0.11.2
+version:             0.11.3
 synopsis:            multipart/form-data (e.g file upload) support for servant
 description:
   This package adds support for file upload to the servant ecosystem. It draws
@@ -17,30 +17,35 @@
 cabal-version:       >=1.10
 extra-source-files:  CHANGELOG.md
 tested-with:
-  GHC==7.8.4,
-  GHC==7.10.3,
-  GHC==8.0.2,
-  GHC==8.2.2,
-  GHC==8.4.3
+  GHC ==8.0.2
+   || ==8.2.2
+   || ==8.4.4
+   || ==8.6.2
 
 library
+  default-language:    Haskell2010
   hs-source-dirs:      src
   exposed-modules:     Servant.Multipart
+
+  -- ghc boot libs
   build-depends:
-                base >= 4.7 && < 5,
-                bytestring >= 0.10 && <0.11,
-                directory,
-                http-media >= 0.6 && <0.8,
-                lens >= 4.0 && < 4.17,
-                resourcet >=1.1 && <1.3,
-                servant >=0.10 && <0.15,
-                servant-docs >=0.10 && <0.15,
-                servant-server >=0.10 && <0.15,
-                text >=1.2 && <1.3,
-                transformers >=0.3 && <0.6,
-                wai >= 3.2 && <3.3,
-                wai-extra >=3.0 && <3.1
-  default-language:    Haskell2010
+    base            >= 4.9       && < 5,
+    bytestring      >= 0.10.8.1  && < 0.11,
+    directory       >= 1.3       && < 1.4,
+    text            >= 1.2.3.0   && < 1.3,
+    transformers    >= 0.5.2.0   && < 0.6
+
+  -- other dependencies
+  build-depends:
+    http-media      >= 0.7.1.3  && <0.8,
+    lens            >= 4.17     && < 4.18,
+    resourcet       >= 1.2.2    && <1.3,
+    servant         >= 0.15     && <0.16,
+    servant-docs    >= 0.10     && <0.15,
+    servant-foreign >= 0.15     && <0.16,
+    servant-server  >= 0.15     && <0.16,
+    wai             >= 3.2.1.2  && <3.3,
+    wai-extra       >= 3.0.24.3 && <3.1
 
 executable upload
   hs-source-dirs:      exe
diff --git a/src/Servant/Multipart.hs b/src/Servant/Multipart.hs
--- a/src/Servant/Multipart.hs
+++ b/src/Servant/Multipart.hs
@@ -12,6 +12,7 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE StandaloneDeriving #-}
 {-# LANGUAGE UndecidableInstances #-}
+{-# LANGUAGE TypeApplications #-}
 -- | @multipart/form-data@ support for servant.
 --
 --   This is mostly useful for adding file upload support to
@@ -35,7 +36,7 @@
   , ToMultipartSample(..)
   ) where
 
-import Control.Lens ((<>~), (&), view)
+import Control.Lens ((<>~), (&), view, (.~))
 import Control.Monad.IO.Class
 import Control.Monad.Trans.Resource
 import Data.Foldable (foldMap)
@@ -49,6 +50,7 @@
 import Network.Wai.Parse
 import Servant
 import Servant.Docs
+import Servant.Foreign
 import Servant.Server.Internal
 import System.Directory
 
@@ -525,3 +527,14 @@
                     (Proxy :: Proxy a)
                 ]
     in docsFor (Proxy :: Proxy api) (endpoint, newAction) opts
+
+instance (HasForeignType lang ftype a, HasForeign lang ftype api)
+      => HasForeign lang ftype (MultipartForm t a :> api) where
+  type Foreign ftype (MultipartForm t a :> api) = Foreign ftype api
+
+  foreignFor lang ftype Proxy req =
+    foreignFor lang ftype (Proxy @api) $
+      req & reqBody .~ Just t
+          & reqBodyContentType .~ ReqBodyMultipart
+    where
+      t = typeFor lang ftype (Proxy @a)
