diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+0.3.5
+---
+
+* Minor changes:
+    * Add `LenientData` which always succeeds to parse (see [#45](https://github.com/fizruk/http-api-data/pull/45)).
+
 0.3.4
 ---
 
diff --git a/http-api-data.cabal b/http-api-data.cabal
--- a/http-api-data.cabal
+++ b/http-api-data.cabal
@@ -1,5 +1,5 @@
 name:            http-api-data
-version:         0.3.4
+version:         0.3.5
 license:         BSD3
 license-file:    LICENSE
 author:          Nickolay Kudasov <nickolay.kudasov@gmail.com>
diff --git a/src/Web/HttpApiData.hs b/src/Web/HttpApiData.hs
--- a/src/Web/HttpApiData.hs
+++ b/src/Web/HttpApiData.hs
@@ -35,6 +35,9 @@
   parseBoundedEnumOfI,
   parseBoundedTextData,
 
+  -- * Lenient data
+  LenientData (..),
+
   -- * Other helpers
   showTextData,
   readTextData,
diff --git a/src/Web/Internal/HttpApiData.hs b/src/Web/Internal/HttpApiData.hs
--- a/src/Web/Internal/HttpApiData.hs
+++ b/src/Web/Internal/HttpApiData.hs
@@ -1,5 +1,9 @@
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE DefaultSignatures #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveFunctor #-}
+{-# LANGUAGE DeriveFoldable #-}
+{-# LANGUAGE DeriveTraversable #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE ScopedTypeVariables #-}
@@ -11,6 +15,7 @@
 
 #if __GLASGOW_HASKELL__ < 710
 import Control.Applicative
+import Data.Foldable (Foldable)
 import Data.Traversable (Traversable(traverse))
 #endif
 
@@ -48,6 +53,9 @@
 
 import qualified Data.UUID.Types as UUID
 
+import Data.Typeable (Typeable)
+import Data.Data (Data)
+
 -- $setup
 -- >>> data BasicAuthToken = BasicAuthToken Text deriving (Show)
 -- >>> instance FromHttpApiData BasicAuthToken where parseHeader h = BasicAuthToken <$> parseHeaderWithPrefix "Basic " h; parseQueryParam p = BasicAuthToken <$> parseQueryParam p
@@ -586,3 +594,15 @@
 instance FromHttpApiData UUID.UUID where
     parseUrlPiece = maybe (Left "invalid UUID") Right . UUID.fromText
     parseHeader   = maybe (Left "invalid UUID") Right . UUID.fromASCIIBytes
+
+
+-- | Lenient parameters. 'FromHttpApiData' combinators always return `Right`.
+--
+-- @since 0.3.5
+newtype LenientData a = LenientData { getLenientData :: Either Text a }
+    deriving (Eq, Ord, Show, Read, Typeable, Data, Functor, Foldable, Traversable)
+
+instance FromHttpApiData a => FromHttpApiData (LenientData a) where
+    parseUrlPiece   = Right . LenientData . parseUrlPiece
+    parseHeader     = Right . LenientData . parseHeader
+    parseQueryParam = Right . LenientData . parseQueryParam
