diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,10 @@
 
 ## Unreleased changes
 
+## 0.3.0.0
+
+- Add support for multipart forms
+
 ## 0.2.0.0
 
 - Update code with changes from `haskell-to-elm-0.2.0.0`
diff --git a/servant-to-elm.cabal b/servant-to-elm.cabal
--- a/servant-to-elm.cabal
+++ b/servant-to-elm.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 11605446602bdfe9cebe8697f26a8560fb1d2b9ff791eaf13b847658631ffb92
+-- hash: 93b2674b01cbea25b894fcbcb2d07f0308d2c535ba76a81fd6831bda6deb39cb
 
 name:           servant-to-elm
-version:        0.2.0.0
+version:        0.3.0.0
 synopsis:       Automatically generate Elm clients for Servant APIs
 description:    Please see the README on GitHub at <https://github.com/folq/servant-to-elm#readme>
 category:       Servant, API, Elm, Compiler
@@ -49,6 +49,7 @@
     , http-types >=0.12.0
     , protolude >=0.2.3
     , servant >=0.16.0
+    , servant-multipart >=0.11.0
     , text >=1.2.0
   default-language: Haskell2010
 
@@ -69,6 +70,7 @@
     , http-types >=0.12.0
     , protolude >=0.2.3
     , servant
+    , servant-multipart >=0.11.0
     , servant-to-elm
     , text >=1.2.0
     , unordered-containers
@@ -93,6 +95,7 @@
     , http-types >=0.12.0
     , protolude >=0.2.3
     , servant >=0.16.0
+    , servant-multipart >=0.11.0
     , servant-to-elm
     , text >=1.2.0
   default-language: Haskell2010
diff --git a/src/Servant/To/Elm.hs b/src/Servant/To/Elm.hs
--- a/src/Servant/To/Elm.hs
+++ b/src/Servant/To/Elm.hs
@@ -25,6 +25,7 @@
 import qualified Network.HTTP.Types as HTTP
 import Servant.API ((:<|>), (:>))
 import qualified Servant.API as Servant
+import qualified Servant.Multipart as Servant
 import qualified Servant.API.Modifiers as Servant
 
 import Language.Elm.Definition (Definition)
@@ -90,7 +91,7 @@
             | (_, type_, arg) <- _queryString $ _url endpoint
             ]
           , [ _encodedType body
-            | Just body <- [_body endpoint]
+            | Just (_, body) <- [_body endpoint]
             ]
           ]
         )
@@ -286,9 +287,9 @@
         Nothing ->
           "Http.emptyBody"
 
-        Just body ->
+        Just (bodyType, body) ->
           Expression.App
-            "Http.jsonBody"
+            (vacuous bodyType)
             (Expression.App (vacuous $ _encoder body) $ pure bodyArgName)
 
     elmExpect =
@@ -402,7 +403,7 @@
   { _url :: URL
   , _method :: HTTP.Method
   , _headers :: [(Text, Encoder, Bool)]
-  , _body :: Maybe Encoder
+  , _body :: Maybe (Expression Void, Encoder)
   , _returnType :: Maybe Decoder
   , _functionName :: [Text]
   }
@@ -561,9 +562,16 @@
   => HasElmEndpoints (Servant.ReqBody' mods list a :> api) where
     elmEndpoints' prefix =
       elmEndpoints' @api prefix
-        { _body = Just $ makeEncoder @Aeson.Value @a
+        { _body = Just ("Http.jsonBody", makeEncoder @Aeson.Value @a)
         }
 
+instance (HasElmEncoder (Servant.MultipartData tag) a, HasElmEndpoints api)
+  => HasElmEndpoints (Servant.MultipartForm tag a :> api) where
+    elmEndpoints' prefix =
+      elmEndpoints' @api prefix
+        { _body = Just ("Http.multipartBody", makeEncoder @(Servant.MultipartData tag) @a)
+        }
+
 instance (KnownSymbol path, HasElmEndpoints api) => HasElmEndpoints (path :> api) where
   elmEndpoints' prefix =
     elmEndpoints' @api prefix
@@ -607,3 +615,11 @@
 instance HasElmDecoder Aeson.Value Servant.NoContent where
   elmDecoder =
     Expression.App "Json.Decode.succeed" "NoContent.NoContent"
+
+instance HasElmType (Servant.MultipartData tag) where
+  elmType =
+    Type.App "List.List" "Http.Part"
+
+instance HasElmEncoder (Servant.MultipartData tag) (Servant.MultipartData tag) where
+  elmEncoder =
+    "Basics.identity"
