diff --git a/BattlePlace/Util.hs b/BattlePlace/Util.hs
--- a/BattlePlace/Util.hs
+++ b/BattlePlace/Util.hs
@@ -32,4 +32,3 @@
 		'_' -> xs
 		_ -> dropBeforeUnderscore xs
 	[] -> []
-
diff --git a/BattlePlace/WebApi.hs b/BattlePlace/WebApi.hs
--- a/BattlePlace/WebApi.hs
+++ b/BattlePlace/WebApi.hs
@@ -13,7 +13,6 @@
 	, MatchRequest(..)
 	, MatchResponse(..)
 	, MatchStatusResponse(..)
-	, MatchStatusReason(..)
 	, MatchTeam(..)
 	, MatchPlayer(..)
 	, MatchServer(..)
@@ -34,17 +33,18 @@
 
 import BattlePlace.Token.Types
 import BattlePlace.Util
+import BattlePlace.WebApi.Auth
 import BattlePlace.WebApi.Types
 
 type WebApi = "v1a" :>
 	(    "client" :>
 		(    "auth" :> ReqBody '[JSON] ClientAuthRequest :> Post '[JSON] ClientAuthResponse
 		:<|> "match" :>
-			(    ReqBody '[JSON] MatchRequest :> Post '[JSON] MatchResponse
-			:<|> Capture "matchToken" (InternalToken MatchToken) :> Get '[JSON] MatchStatusResponse
+			(    AuthProtect ClientToken :> ReqBody '[JSON] MatchRequest :> Post '[JSON] MatchResponse
+			:<|> AuthProtect ClientToken :> Capture "matchToken" (InternalToken MatchToken) :> Get '[JSON] MatchStatusResponse
 			)
 		:<|> "session" :> Capture "sessionToken" (InternalToken SessionToken) :>
-			(    "result" :> ReqBody '[JSON] SessionResultRequest :> Post '[JSON] ()
+			(    "result" :> AuthProtect ClientToken :> ReqBody '[JSON] SessionResultRequest :> Post '[JSON] ()
 			)
 		)
 	:<|> "server" :>
@@ -82,8 +82,7 @@
 	toEncoding = J.genericToEncoding jsonOptions
 
 data MatchRequest = MatchRequest
-	{ matchRequest_clientToken :: !(InternalToken ClientToken)
-	, matchRequest_teamSizes :: !(VU.Vector MatchTeamSize)
+	{ matchRequest_teamSizes :: !(VU.Vector MatchTeamSize)
 	, matchRequest_maxMatchTime :: {-# UNPACK #-} !Int
 	, matchRequest_matchTag :: !(Maybe MatchTag)
 	, matchRequest_info :: !(Maybe MatchPlayerInfo)
@@ -115,7 +114,7 @@
 		, matchStatusResponse_server :: !(Maybe MatchServer)
 		}
 	| MatchStatusResponse_failed
-		{ matchStatusResponse_reason :: !MatchStatusReason
+		{ matchStatusResponse_reason :: !MatchFailureReason
 		}
 	-- | Match status was cleaned.
 	-- Normallly this status should not be visible to clients, it's here just in case.
@@ -124,21 +123,6 @@
 instance J.FromJSON MatchStatusResponse where
 	parseJSON = J.genericParseJSON jsonOptions
 instance J.ToJSON MatchStatusResponse where
-	toJSON = J.genericToJSON jsonOptions
-	toEncoding = J.genericToEncoding jsonOptions
-
--- | Reason of match failure.
-data MatchStatusReason
-	-- | Failed to make a match in a specified time.
-	= MatchStatusReason_timedOut
-	-- | Match was made, but no server is available (and use of server is mandatory).
-	| MatchStatusReason_noServer
-	-- | Matching was explicitly cancelled by user.
-	| MatchStatusReason_cancelled
-	deriving Generic
-instance J.FromJSON MatchStatusReason where
-	parseJSON = J.genericParseJSON jsonOptions
-instance J.ToJSON MatchStatusReason where
 	toJSON = J.genericToJSON jsonOptions
 	toEncoding = J.genericToEncoding jsonOptions
 
diff --git a/BattlePlace/WebApi/Auth.hs b/BattlePlace/WebApi/Auth.hs
new file mode 100644
--- /dev/null
+++ b/BattlePlace/WebApi/Auth.hs
@@ -0,0 +1,27 @@
+{-|
+Module: BattlePlace.WebApi.Auth
+Description: Web API authentication types.
+License: MIT
+-}
+
+{-# LANGUAGE DeriveGeneric #-}
+
+module BattlePlace.WebApi.Auth
+	( ClientToken(..)
+	) where
+
+import qualified Data.Aeson as J
+import GHC.Generics(Generic)
+
+import BattlePlace.Util
+import BattlePlace.WebApi.Types
+
+data ClientToken = ClientToken
+	{ clientToken_projectId :: {-# UNPACK #-} !ProjectId
+	, clientToken_client :: !Client
+	} deriving Generic
+instance J.FromJSON ClientToken where
+	parseJSON = J.genericParseJSON jsonOptions
+instance J.ToJSON ClientToken where
+	toJSON = J.genericToJSON jsonOptions
+	toEncoding = J.genericToEncoding jsonOptions
diff --git a/BattlePlace/WebApi/Types.hs b/BattlePlace/WebApi/Types.hs
--- a/BattlePlace/WebApi/Types.hs
+++ b/BattlePlace/WebApi/Types.hs
@@ -15,13 +15,13 @@
 	, Client(..)
 	, ClientType(..)
 	, clientTypeOf
-	, ClientToken(..)
 	, ProjectServerId(..)
 	, ProjectServerToken(..)
 	, MatchTeamSize
 	, MatchTag(..)
 	, MatchPlayerInfo(..)
 	, MatchToken(..)
+	, MatchFailureReason(..)
 	, SessionToken(..)
 	, SessionId(..)
 	, ServerSessionToken(..)
@@ -142,16 +142,6 @@
 	Client_steam {} -> ClientType_steam
 	Client_test {} -> ClientType_test
 
-data ClientToken = ClientToken
-	{ clientToken_projectId :: {-# UNPACK #-} !ProjectId
-	, clientToken_client :: !Client
-	} deriving Generic
-instance J.FromJSON ClientToken where
-	parseJSON = J.genericParseJSON jsonOptions
-instance J.ToJSON ClientToken where
-	toJSON = J.genericToJSON jsonOptions
-	toEncoding = J.genericToEncoding jsonOptions
-
 -- | Project's server id.
 newtype ProjectServerId = ProjectServerId Base64Word64 deriving (Eq, Hashable, J.FromJSON, J.FromJSONKey, J.ToJSON, J.ToJSONKey)
 
@@ -169,8 +159,7 @@
 
 -- | Match token.
 data MatchToken = MatchToken
-	{ matchToken_projectId :: {-# UNPACK #-} !ProjectId
-	, matchToken_client :: !Client
+	{
 	} deriving Generic
 instance J.FromJSON MatchToken where
 	parseJSON = J.genericParseJSON jsonOptions
@@ -178,12 +167,26 @@
 	toJSON = J.genericToJSON jsonOptions
 	toEncoding = J.genericToEncoding jsonOptions
 
+-- | Reason of match failure.
+data MatchFailureReason
+	-- | Failed to make a match in a specified time.
+	= MatchFailureReason_timedOut
+	-- | Match was made, but no server is available (and use of server is mandatory).
+	| MatchFailureReason_noServer
+	-- | Matching was explicitly cancelled by user.
+	| MatchFailureReason_cancelled
+	deriving Generic
+instance J.FromJSON MatchFailureReason where
+	parseJSON = J.genericParseJSON jsonOptions
+instance J.ToJSON MatchFailureReason where
+	toJSON = J.genericToJSON jsonOptions
+	toEncoding = J.genericToEncoding jsonOptions
+
 -- | Session token.
 data SessionToken = SessionToken
 	{ sessionToken_sessionId :: !SessionId
 	, sessionToken_teamIndex :: {-# UNPACK #-} !Int
 	, sessionToken_mateIndex :: {-# UNPACK #-} !Int
-	, sessionToken_client :: !Client
 	} deriving Generic
 instance J.FromJSON SessionToken where
 	parseJSON = J.genericParseJSON jsonOptions
diff --git a/battleplace.cabal b/battleplace.cabal
--- a/battleplace.cabal
+++ b/battleplace.cabal
@@ -1,5 +1,5 @@
 name:                battleplace
-version:             0.1.0.1
+version:             0.1.0.2
 synopsis:            Core definitions for BattlePlace.io service
 description:         Core definitions for BattlePlace.io service
 license:             MIT
@@ -19,6 +19,7 @@
     BattlePlace.Skill.Glicko.Types
     BattlePlace.Token.Types
     BattlePlace.WebApi
+    BattlePlace.WebApi.Auth
     BattlePlace.WebApi.Types
   other-modules:
   build-depends:
