diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,4 +1,11 @@
+## 2.2.2
+
+* support http-api-data for url serialization
+
+## 2.2.1
+
 * Migration failure message with context
+* Fix insertKey for composite keys
 
 ## 2.2
 
diff --git a/Database/Persist/Sql/Orphan/PersistStore.hs b/Database/Persist/Sql/Orphan/PersistStore.hs
--- a/Database/Persist/Sql/Orphan/PersistStore.hs
+++ b/Database/Persist/Sql/Orphan/PersistStore.hs
@@ -34,6 +34,7 @@
 import Data.Acquire (with)
 import Data.Int (Int64)
 import Web.PathPieces (PathPiece)
+import Web.HttpApiData (ToHttpApiData, FromHttpApiData)
 import Database.Persist.Sql.Class (PersistFieldSql)
 import qualified Data.Aeson as A
 import Control.Exception.Lifted (throwIO)
@@ -105,7 +106,7 @@
 
 instance PersistStore SqlBackend where
     newtype BackendKey SqlBackend = SqlBackendKey { unSqlBackendKey :: Int64 }
-        deriving (Show, Read, Eq, Ord, Num, Integral, PersistField, PersistFieldSql, PathPiece, Real, Enum, Bounded, A.ToJSON, A.FromJSON)
+        deriving (Show, Read, Eq, Ord, Num, Integral, PersistField, PersistFieldSql, PathPiece, ToHttpApiData, FromHttpApiData, Real, Enum, Bounded, A.ToJSON, A.FromJSON)
 
     update _ [] = return ()
     update k upds = do
diff --git a/Database/Persist/Types/Base.hs b/Database/Persist/Types/Base.hs
--- a/Database/Persist/Types/Base.hs
+++ b/Database/Persist/Types/Base.hs
@@ -5,7 +5,8 @@
 
 import qualified Data.Aeson as A
 import Control.Exception (Exception)
-import Web.PathPieces (PathPiece (..))
+import Web.PathPieces (PathPiece(..))
+import Web.HttpApiData (ToHttpApiData (..), FromHttpApiData (..), parseUrlPieceMaybe, showTextData, readTextData, parseBoundedTextData)
 import Control.Monad.Trans.Error (Error (..))
 import Data.Typeable (Typeable)
 import Data.Text (Text, pack)
@@ -15,6 +16,7 @@
 import qualified Data.ByteString.Base64 as B64
 import qualified Data.Vector as V
 import Control.Arrow (second)
+import Control.Applicative ((<$>))
 import Data.Time (Day, TimeOfDay, UTCTime)
 import Data.Int (Int64)
 import qualified Data.Text.Read
@@ -82,13 +84,14 @@
                  -- may be any number of 'Inactive' records.
     deriving (Eq, Ord, Read, Show, Enum, Bounded)
 
-instance PathPiece Checkmark where
-    toPathPiece = pack . show
-    fromPathPiece txt =
-      case reads (T.unpack txt) of
-        [(a, "")] -> Just a
-        _         -> Nothing
+instance ToHttpApiData Checkmark where
+    toUrlPiece = showTextData
 
+instance FromHttpApiData Checkmark where
+    parseUrlPiece = parseBoundedTextData
+
+instance PathPiece Checkmark
+
 data IsNullable = Nullable !WhyNullable
                 | NotNullable
                   deriving (Eq, Show)
@@ -301,18 +304,25 @@
     deriving (Show, Read, Eq, Typeable, Ord)
 
 
-instance PathPiece PersistValue where
-    fromPathPiece t =
-        case Data.Text.Read.signed Data.Text.Read.decimal t of
-            Right (i, t')
-                | T.null t' -> Just $ PersistInt64 i
-            _ -> case reads $ T.unpack t of
-                    [(fks, "")] -> Just $ PersistList fks
-                    _ -> Just $ PersistText t
-    toPathPiece x =
-        case fromPersistValueText x of
-            Left e -> error $ T.unpack e
+instance ToHttpApiData PersistValue where
+    toUrlPiece val =
+        case fromPersistValueText val of
+            Left  e -> error $ T.unpack e
             Right y -> y
+
+instance FromHttpApiData PersistValue where
+    parseUrlPiece input =
+          PersistInt64 <$> parseUrlPiece input
+      <!> PersistList  <$> readTextData input
+      <!> PersistText  <$> return input
+      where
+        infixl 3 <!>
+        Left _ <!> y = y
+        x      <!> _ = x
+
+instance PathPiece PersistValue where
+  toPathPiece   = toUrlPiece
+  fromPathPiece = parseUrlPieceMaybe
 
 fromPersistValueText :: PersistValue -> Either Text Text
 fromPersistValueText (PersistText s) = Right s
diff --git a/persistent.cabal b/persistent.cabal
--- a/persistent.cabal
+++ b/persistent.cabal
@@ -1,5 +1,5 @@
 name:            persistent
-version:         2.2.1
+version:         2.2.2
 license:         MIT
 license-file:    LICENSE
 author:          Michael Snoyman <michael@snoyman.com>
@@ -36,6 +36,7 @@
                    , lifted-base              >= 0.1
                    , resource-pool            >= 0.2.2.0
                    , path-pieces              >= 0.1
+                   , http-api-data            >= 0.2       && < 0.3
                    , aeson                    >= 0.5
                    , monad-logger             >= 0.3
                    , transformers-base
@@ -98,6 +99,7 @@
                    , attoparsec
                    , transformers
                    , path-pieces
+                   , http-api-data            >= 0.2       && < 0.3
                    , aeson
                    , resourcet
                    , monad-logger
