diff --git a/json-spec-elm-servant.cabal b/json-spec-elm-servant.cabal
--- a/json-spec-elm-servant.cabal
+++ b/json-spec-elm-servant.cabal
@@ -1,6 +1,6 @@
 cabal-version:       3.0
 name:                json-spec-elm-servant
-version:             0.4.1.2
+version:             0.4.2.0
 synopsis:            Generated elm code for servant APIs.
 description:         Generate Elm encoders, decoders, and API requests
                      for an Servant API, where the shape of the data
diff --git a/src/Data/JsonSpec/Elm/Servant.hs b/src/Data/JsonSpec/Elm/Servant.hs
--- a/src/Data/JsonSpec/Elm/Servant.hs
+++ b/src/Data/JsonSpec/Elm/Servant.hs
@@ -25,7 +25,8 @@
     The symbols in this section are mainly exposed in case you are using
     some extensions to the standard servant types and need to build some
     companion extensions to generate proper Elm types for them. For most
-    normal usage you will probably just use 'servantDefs'.
+    normal usage you will probably just use 'generateElm' (or possibly
+    'servantDefs').
   -}
   Elmable(..),
   IsParam(..),
@@ -314,6 +315,16 @@
 -}
 class IsParam a where
   param :: Definitions Param
+{-|
+  The default instance assumes that the API combinator does not contribute
+  to the parameter list or the "name of the endpoint" in any way. This
+  covers things like 'Summary' and 'Description', or potentially custom
+  combinators created by the user. In the case of custom combinators,
+  you may need to create an overlapping instance if you wish it to affect
+  the elm function parameters or function name.
+-}
+instance {-# OVERLAPPABLE #-} IsParam a where
+  param = pure Ignore
 instance (KnownSymbol name) => IsParam (Capture name tpy) where
   param = pure $ PathParam (Capture (sym @name))
 instance (KnownSymbol name) => IsParam (Header' (Optional : mods) name a) where
@@ -429,6 +440,7 @@
               HeaderParam (OptionalHeader _) ->
                 Just ("Basics.Maybe" `Type.App` "Basics.String")
               BodyEncoder typ _ -> Just typ
+              Ignore -> Nothing
             )
             params
         )
@@ -535,6 +547,8 @@
           (Bound.closed e)
       (PathParam (Static _) : more) e ->
         buildLambda more e
+      (Ignore : more) e ->
+        buildLambda more e
       (p : more) e ->
         buildLambda
           more
@@ -549,6 +563,7 @@
       { elmType :: Type Void
       , encoder :: Expression Void
       }
+  | Ignore {-^ This is for things like `Summary` -}
   deriving stock (Eq)
 
 
diff --git a/test/Api.hs b/test/Api.hs
--- a/test/Api.hs
+++ b/test/Api.hs
@@ -72,7 +72,8 @@
   ( FromHttpApiData(parseHeader, parseQueryParam), GenericMode((:-))
   , StdMethod(GET), (:>), Capture, DeleteNoContent, Get, Header, Header'
   , Headers, JSON, NamedRoutes, NoContent, Optional, Post, PostNoContent
-  , QueryParam', ReqBody, ReqBody', Required, Strict, ToHttpApiData, Verb
+  , QueryParam', ReqBody, ReqBody', Required, Strict, Summary, ToHttpApiData
+  , Verb
   )
 import Web.Cookie (SetCookie)
 import qualified Data.JsonSpec as Spec
@@ -100,6 +101,7 @@
 data ProtectedApi mode = ProtectedApi
   { makeProposal :: mode
       :- "proposal"
+      :> Summary "a summary"
       :> ReqBody' '[Required, Strict] '[JSON] NewProposalReq
       :> Post '[JSON] (KV ProposalId Proposal)
 
