diff --git a/colorless.cabal b/colorless.cabal
--- a/colorless.cabal
+++ b/colorless.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           colorless
-version:        2.2.19
+version:        2.2.20
 synopsis:       Colorless | The Programmatic IDL
 description:    Colorless | The Programmatic IDL
 category:       Web
diff --git a/library/Colorless/Client/Exchange.hs b/library/Colorless/Client/Exchange.hs
--- a/library/Colorless/Client/Exchange.hs
+++ b/library/Colorless/Client/Exchange.hs
@@ -8,7 +8,7 @@
 import Data.Aeson (Value(..), FromJSON(..), ToJSON(..), object, (.=), (.:))
 import Data.Text (Text)
 
-import Colorless.Types (RuntimeError, HasType(..), Version(..))
+import Colorless.Types (RuntimeError, HasType(..), Version(..), Limits)
 import Colorless.Ast (ToAst(..))
 import Colorless.Val (ToVal(..), FromVal(..))
 import Colorless.Client.Expr (Expr, exprJSON)
@@ -53,7 +53,7 @@
 
 data Response err a
   = Response'Error (ResponseError err)
-  | Response'Success a
+  | Response'Success a Limits
   deriving (Show, Eq)
 
 instance (FromVal err, HasType err, FromVal a, HasType a) => FromJSON (Response err a) where
@@ -64,11 +64,11 @@
         m <- o .: "success"
         case fromVal m of
           Nothing -> mzero
-          Just v -> return $ Response'Success v
+          Just v -> Response'Success v <$> o .: "limits"
       "Error" -> Response'Error <$> o .: "error"
       _ -> mzero
   parseJSON _ = mzero
 
 instance (ToVal err, HasType err, ToVal a, HasType a) => ToJSON (Response err a) where
   toJSON (Response'Error m) = object [ "tag" .= String "Error", "error" .= m ]
-  toJSON (Response'Success m) = object [ "tag" .= String "Success", "success" .= toVal m ]
+  toJSON (Response'Success m limits) = object [ "tag" .= String "Success", "success" .= toVal m, "limits" .= limits]
diff --git a/library/Colorless/Server/Exchange.hs b/library/Colorless/Server/Exchange.hs
--- a/library/Colorless/Server/Exchange.hs
+++ b/library/Colorless/Server/Exchange.hs
@@ -7,7 +7,7 @@
 import Control.Monad (mzero)
 import Data.Aeson (Value(..), FromJSON(..), ToJSON(..), object, (.=), (.:))
 
-import Colorless.Types (RuntimeError)
+import Colorless.Types (RuntimeError, Limits)
 
 data Request = Request
   { meta :: Value
@@ -35,9 +35,9 @@
 
 data Response
   = Response'Error ResponseError
-  | Response'Success Value
+  | Response'Success Value Limits
   deriving (Show, Eq)
 
 instance ToJSON Response where
   toJSON (Response'Error m) = object [ "tag" .= String "Error", "error" .= m ]
-  toJSON (Response'Success m) = object [ "tag" .= String "Success", "success" .= m ]
+  toJSON (Response'Success m limits) = object [ "tag" .= String "Success", "success" .= m, "limits" .= limits ]
diff --git a/library/Colorless/Server/Expr.hs b/library/Colorless/Server/Expr.hs
--- a/library/Colorless/Server/Expr.hs
+++ b/library/Colorless/Server/Expr.hs
@@ -94,13 +94,13 @@
         else liftIO $ writeIORef ref (count + 1)
 
 tickServiceCall :: (MonadIO m, RuntimeThrower m) => Eval m ()
-tickServiceCall = tick serviceCallLimit langServiceCallCount RuntimeError'LangServiceCallLimit
+tickServiceCall = tick serviceCalls langServiceCallCount RuntimeError'LangServiceCallLimit
 
 tickLambda :: (MonadIO m, RuntimeThrower m) => Eval m ()
-tickLambda = tick lambdaLimit langLambdaCount RuntimeError'LangLambdaLimit
+tickLambda = tick lambdas langLambdaCount RuntimeError'LangLambdaLimit
 
 tickExpr :: (MonadIO m, RuntimeThrower m) => Eval m ()
-tickExpr = tick exprLimit langExprCount RuntimeError'LangExprLimit
+tickExpr = tick expressions langExprCount RuntimeError'LangExprLimit
 
 type Env m = Map Symbol (IORef (Expr m))
 
@@ -313,7 +313,7 @@
 addVarToScope envRef var expr = do
   env <- liftIO $ readIORef envRef
   ref <- liftIO $ newIORef expr
-  limit <- variableLimit <$> asks limits
+  limit <- variables <$> asks limits
   addVarToEnv limit envRef var ref env
 
 varLookup :: (MonadIO m, RuntimeThrower m) => Map Symbol (IORef a) -> Symbol -> m a
@@ -504,7 +504,7 @@
         else RuntimeError'TooFewArguments
       else do
         args' <- liftIO $ mapM newIORef (Map.fromList args)
-        limit <- variableLimit <$> asks limits
+        limit <- variables <$> asks limits
         envRef' <- addEnvToEnv limit args' envRef
         eval expr envRef'
 
diff --git a/library/Colorless/Types.hs b/library/Colorless/Types.hs
--- a/library/Colorless/Types.hs
+++ b/library/Colorless/Types.hs
@@ -149,18 +149,21 @@
   parseJSON _ = mzero
 
 data Limits = Limits
-  { variableLimit :: Maybe Int
-  , serviceCallLimit :: Maybe Int
-  , lambdaLimit :: Maybe Int
-  , exprLimit :: Maybe Int
-  } deriving (Show, Eq)
+  { variables :: Maybe Int
+  , serviceCalls :: Maybe Int
+  , lambdas :: Maybe Int
+  , expressions :: Maybe Int
+  } deriving (Show, Eq, Generic)
 
+instance ToJSON Limits
+instance FromJSON Limits
+
 defLimits :: Limits
 defLimits = Limits
-  { variableLimit = Just 50
-  , serviceCallLimit = Just 50
-  , lambdaLimit = Just 10
-  , exprLimit = Just 100
+  { variables = Just 50
+  , serviceCalls = Just 50
+  , lambdas = Just 10
+  , expressions = Just 100
   }
 
 data Hooks m meta meta' = Hooks
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: colorless
-version: '2.2.19'
+version: '2.2.20'
 category: Web
 synopsis: Colorless | The Programmatic IDL
 description: Colorless | The Programmatic IDL
