diff --git a/rfc.cabal b/rfc.cabal
--- a/rfc.cabal
+++ b/rfc.cabal
@@ -1,5 +1,5 @@
 name:                rfc
-version:             0.0.0.13
+version:             0.0.0.14
 synopsis:            Robert Fischer's Common library
 description:         An enhanced Prelude and various utilities for Aeson, Servant, PSQL, and Redis that Robert Fischer uses.
 homepage:            https://github.com/RobertFischer/rfc#README.md
diff --git a/src/RFC/Data/IdAnd.hs b/src/RFC/Data/IdAnd.hs
--- a/src/RFC/Data/IdAnd.hs
+++ b/src/RFC/Data/IdAnd.hs
@@ -1,9 +1,14 @@
-{-# LANGUAGE CPP               #-}
-{-# LANGUAGE DeriveGeneric     #-}
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE NoImplicitPrelude #-}
-{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE CPP                 #-}
+{-# LANGUAGE DeriveGeneric       #-}
+{-# LANGUAGE FlexibleContexts    #-}
+{-# LANGUAGE FlexibleInstances   #-}
+{-# LANGUAGE NoImplicitPrelude   #-}
+{-# LANGUAGE OverloadedLists     #-}
+{-# LANGUAGE OverloadedStrings   #-}
+{-# LANGUAGE RecordWildCards     #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 
+
 module RFC.Data.IdAnd
   ( idAndsToMap
   , IdAnd(..)
@@ -19,8 +24,10 @@
 import qualified Data.Map                             as Map
 
 #ifndef GHCJS_BROWSER
+import           Control.Lens                         hiding ((.=))
 import           Data.Aeson                           as JSON
 import           Data.Proxy                           (Proxy (..))
+import           Data.Swagger
 import           Data.UUID.Types                      as UUID
 import           Database.PostgreSQL.Simple.FromField ()
 import           Database.PostgreSQL.Simple.FromRow
@@ -63,6 +70,18 @@
 
 instance (ToRow a) => ToRow (IdAnd a) where
   toRow (IdAnd (id,a)) = toField id : toRow a
+
+instance (ToSchema a) => ToSchema (IdAnd a) where
+  declareNamedSchema _ = do
+    NamedSchema{..} <- declareNamedSchema (Proxy :: Proxy a)
+    let aMaybeName =  _namedSchemaName
+    aSchema <- declareSchemaRef (Proxy :: Proxy a)
+    idSchema <- declareSchemaRef (Proxy :: Proxy UUID)
+    return $ NamedSchema (map (\name -> "IdAnd " ++ name) aMaybeName) $
+      mempty
+        & type_ .~ SwaggerObject
+        & properties .~ [("id", idSchema), ("value", aSchema)]
+        & required .~ ["id", "value"]
 
 uuidList :: [UUID]
 uuidList = List.cycle $ map (fromMaybe UUID.nil) $ map UUID.fromString
diff --git a/src/RFC/Data/UUID.hs b/src/RFC/Data/UUID.hs
--- a/src/RFC/Data/UUID.hs
+++ b/src/RFC/Data/UUID.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE CPP                   #-}
+{-# LANGUAGE DataKinds             #-}
 {-# LANGUAGE FlexibleInstances     #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings     #-}
@@ -21,12 +22,18 @@
 #endif
 
 #ifndef GHCJS_BROWSER
-
 import           Database.PostgreSQL.Simple.FromRow
 import           Database.PostgreSQL.Simple.ToRow
 import           Database.PostgreSQL.Simple.Types   (Only (..))
+import           Servant.API.Capture
+import           Servant.Docs
 #endif
 
+#ifndef GHCJS_BROWSER
+instance ToCapture (Capture "id" UUID) where
+  toCapture _ = DocCapture "id" "UUID identifier"
+
+#endif
 
 #ifndef GHCJS_BROWSER
 instance FromRow UUID where
diff --git a/src/RFC/JSON.hs b/src/RFC/JSON.hs
--- a/src/RFC/JSON.hs
+++ b/src/RFC/JSON.hs
@@ -39,6 +39,10 @@
 import           Data.Either                (either)
 #endif
 
+#ifndef GHCJS_BROWSER
+import qualified Data.Swagger               as Swag
+#endif
+
 jsonOptions :: Options
 jsonOptions = defaultOptions
     { sumEncoding = ObjectWithSingleField
@@ -90,4 +94,10 @@
     cs . JSON.encodeToLazyText
 #else
     cs . JSON.encode
+#endif
+
+#ifndef GHCJS_BROWSER
+instance Swag.ToSchema Value where
+  declareNamedSchema _ = do
+    return $ Swag.NamedSchema (Just $ cs "Value") $ mempty
 #endif
