diff --git a/res/res_stasis_http_asterisk.c b/res/res_stasis_http_asterisk.c
index c0ff660cdf50c3ed0495af5cd87e0cff14b390cc..3c035652d10d348dcb2cc00182db341a26d89345 100644
--- a/res/res_stasis_http_asterisk.c
+++ b/res/res_stasis_http_asterisk.c
@@ -106,9 +106,14 @@ static void stasis_http_get_asterisk_info_cb(
  * \param[out] response Response to the HTTP request.
  */
 static void stasis_http_get_global_var_cb(
-    struct ast_variable *get_params, struct ast_variable *path_vars,
-    struct ast_variable *headers, struct stasis_http_response *response)
+	struct ast_variable *get_params, struct ast_variable *path_vars,
+	struct ast_variable *headers, struct stasis_http_response *response)
 {
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
+
 	struct ast_get_global_var_args args = {};
 	struct ast_variable *i;
 
@@ -119,6 +124,29 @@ static void stasis_http_get_global_var_cb(
 		{}
 	}
 	stasis_http_get_global_var(headers, &args, response);
+#if defined(AST_DEVMODE)
+	code = response->response_code;
+
+	switch (code) {
+	case 500: /* Internal server error */
+		is_valid = 1;
+		break;
+	default:
+		if (200 <= code && code <= 299) {
+			is_valid = ari_validate_variable(
+				response->message);
+		} else {
+			ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/variable\n", code);
+			is_valid = 0;
+		}
+	}
+
+	if (!is_valid) {
+		ast_log(LOG_ERROR, "Response validation failed for /asterisk/variable\n");
+		stasis_http_response_error(response, 500,
+			"Internal Server Error", "Response validation failed");
+	}
+#endif /* AST_DEVMODE */
 }
 /*!
  * \brief Parameter parsing callback for /asterisk/variable.
@@ -128,9 +156,14 @@ static void stasis_http_get_global_var_cb(
  * \param[out] response Response to the HTTP request.
  */
 static void stasis_http_set_global_var_cb(
-    struct ast_variable *get_params, struct ast_variable *path_vars,
-    struct ast_variable *headers, struct stasis_http_response *response)
+	struct ast_variable *get_params, struct ast_variable *path_vars,
+	struct ast_variable *headers, struct stasis_http_response *response)
 {
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
+
 	struct ast_set_global_var_args args = {};
 	struct ast_variable *i;
 
@@ -144,6 +177,29 @@ static void stasis_http_set_global_var_cb(
 		{}
 	}
 	stasis_http_set_global_var(headers, &args, response);
+#if defined(AST_DEVMODE)
+	code = response->response_code;
+
+	switch (code) {
+	case 500: /* Internal server error */
+		is_valid = 1;
+		break;
+	default:
+		if (200 <= code && code <= 299) {
+			is_valid = ari_validate_void(
+				response->message);
+		} else {
+			ast_log(LOG_ERROR, "Invalid error response %d for /asterisk/variable\n", code);
+			is_valid = 0;
+		}
+	}
+
+	if (!is_valid) {
+		ast_log(LOG_ERROR, "Response validation failed for /asterisk/variable\n");
+		stasis_http_response_error(response, 500,
+			"Internal Server Error", "Response validation failed");
+	}
+#endif /* AST_DEVMODE */
 }
 
 /*! \brief REST handler for /api-docs/asterisk.{format} */
diff --git a/res/res_stasis_http_channels.c b/res/res_stasis_http_channels.c
index a3d2932a27632c46fb722ac55b3bd6adf7f4abed..5c150dffb9e5943c5519c024371ab3a408341f51 100644
--- a/res/res_stasis_http_channels.c
+++ b/res/res_stasis_http_channels.c
@@ -818,9 +818,14 @@ static void stasis_http_record_channel_cb(
  * \param[out] response Response to the HTTP request.
  */
 static void stasis_http_get_channel_var_cb(
-    struct ast_variable *get_params, struct ast_variable *path_vars,
-    struct ast_variable *headers, struct stasis_http_response *response)
+	struct ast_variable *get_params, struct ast_variable *path_vars,
+	struct ast_variable *headers, struct stasis_http_response *response)
 {
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
+
 	struct ast_get_channel_var_args args = {};
 	struct ast_variable *i;
 
@@ -837,6 +842,31 @@ static void stasis_http_get_channel_var_cb(
 		{}
 	}
 	stasis_http_get_channel_var(headers, &args, response);
+#if defined(AST_DEVMODE)
+	code = response->response_code;
+
+	switch (code) {
+	case 500: /* Internal server error */
+	case 404: /* Channel not found */
+	case 409: /* Channel not in a Stasis application */
+		is_valid = 1;
+		break;
+	default:
+		if (200 <= code && code <= 299) {
+			is_valid = ari_validate_variable(
+				response->message);
+		} else {
+			ast_log(LOG_ERROR, "Invalid error response %d for /channels/{channelId}/variable\n", code);
+			is_valid = 0;
+		}
+	}
+
+	if (!is_valid) {
+		ast_log(LOG_ERROR, "Response validation failed for /channels/{channelId}/variable\n");
+		stasis_http_response_error(response, 500,
+			"Internal Server Error", "Response validation failed");
+	}
+#endif /* AST_DEVMODE */
 }
 /*!
  * \brief Parameter parsing callback for /channels/{channelId}/variable.
@@ -846,9 +876,14 @@ static void stasis_http_get_channel_var_cb(
  * \param[out] response Response to the HTTP request.
  */
 static void stasis_http_set_channel_var_cb(
-    struct ast_variable *get_params, struct ast_variable *path_vars,
-    struct ast_variable *headers, struct stasis_http_response *response)
+	struct ast_variable *get_params, struct ast_variable *path_vars,
+	struct ast_variable *headers, struct stasis_http_response *response)
 {
+#if defined(AST_DEVMODE)
+	int is_valid;
+	int code;
+#endif /* AST_DEVMODE */
+
 	struct ast_set_channel_var_args args = {};
 	struct ast_variable *i;
 
@@ -868,6 +903,31 @@ static void stasis_http_set_channel_var_cb(
 		{}
 	}
 	stasis_http_set_channel_var(headers, &args, response);
+#if defined(AST_DEVMODE)
+	code = response->response_code;
+
+	switch (code) {
+	case 500: /* Internal server error */
+	case 404: /* Channel not found */
+	case 409: /* Channel not in a Stasis application */
+		is_valid = 1;
+		break;
+	default:
+		if (200 <= code && code <= 299) {
+			is_valid = ari_validate_void(
+				response->message);
+		} else {
+			ast_log(LOG_ERROR, "Invalid error response %d for /channels/{channelId}/variable\n", code);
+			is_valid = 0;
+		}
+	}
+
+	if (!is_valid) {
+		ast_log(LOG_ERROR, "Response validation failed for /channels/{channelId}/variable\n");
+		stasis_http_response_error(response, 500,
+			"Internal Server Error", "Response validation failed");
+	}
+#endif /* AST_DEVMODE */
 }
 
 /*! \brief REST handler for /api-docs/channels.{format} */
diff --git a/res/stasis_http/ari_model_validators.c b/res/stasis_http/ari_model_validators.c
index 14b5d6974737ea4a943c6c0b0da451c8b7487ad4..bf3c0e7d0a6abba98d152e475d133d60d24aa0fa 100644
--- a/res/stasis_http/ari_model_validators.c
+++ b/res/stasis_http/ari_model_validators.c
@@ -57,6 +57,44 @@ ari_validator ari_validate_asterisk_info_fn(void)
 	return ari_validate_asterisk_info;
 }
 
+int ari_validate_variable(struct ast_json *json)
+{
+	int res = 1;
+	struct ast_json_iter *iter;
+	int has_value = 0;
+
+	for (iter = ast_json_object_iter(json); iter; iter = ast_json_object_iter_next(json, iter)) {
+		if (strcmp("value", ast_json_object_iter_key(iter)) == 0) {
+			int prop_is_valid;
+			has_value = 1;
+			prop_is_valid = ari_validate_string(
+				ast_json_object_iter_value(iter));
+			if (!prop_is_valid) {
+				ast_log(LOG_ERROR, "ARI Variable field value failed validation\n");
+				res = 0;
+			}
+		} else
+		{
+			ast_log(LOG_ERROR,
+				"ARI Variable has undocumented field %s\n",
+				ast_json_object_iter_key(iter));
+			res = 0;
+		}
+	}
+
+	if (!has_value) {
+		ast_log(LOG_ERROR, "ARI Variable missing required field value\n");
+		res = 0;
+	}
+
+	return res;
+}
+
+ari_validator ari_validate_variable_fn(void)
+{
+	return ari_validate_variable;
+}
+
 int ari_validate_endpoint(struct ast_json *json)
 {
 	int res = 1;
diff --git a/res/stasis_http/ari_model_validators.h b/res/stasis_http/ari_model_validators.h
index ee3d09308ba9a194ba541d6352c9c3b6b53092a7..2f6418657ddb14f9f0fc111ba9bf2cafafcd5aa2 100644
--- a/res/stasis_http/ari_model_validators.h
+++ b/res/stasis_http/ari_model_validators.h
@@ -161,6 +161,24 @@ int ari_validate_asterisk_info(struct ast_json *json);
  */
 ari_validator ari_validate_asterisk_info_fn(void);
 
+/*!
+ * \brief Validator for Variable.
+ *
+ * The value of a channel variable
+ *
+ * \param json JSON object to validate.
+ * \returns True (non-zero) if valid.
+ * \returns False (zero) if invalid.
+ */
+int ari_validate_variable(struct ast_json *json);
+
+/*!
+ * \brief Function pointer to ari_validate_variable().
+ *
+ * See \ref ari_model_validators.h for more details.
+ */
+ari_validator ari_validate_variable_fn(void);
+
 /*!
  * \brief Validator for Endpoint.
  *
@@ -767,6 +785,8 @@ ari_validator ari_validate_stasis_start_fn(void);
  * JSON models
  *
  * AsteriskInfo
+ * Variable
+ * - value: string (required)
  * Endpoint
  * - channel_ids: List[string] (required)
  * - resource: string (required)
diff --git a/rest-api/api-docs/asterisk.json b/rest-api/api-docs/asterisk.json
index 8c404a075e3f383e1a04dd3d9a3275b84ef77726..8bc8874857087e3e56a03138247b6264586fc9b5 100644
--- a/rest-api/api-docs/asterisk.json
+++ b/rest-api/api-docs/asterisk.json
@@ -92,8 +92,9 @@
 		},
 		"Variable": {
 			"id": "Variable",
+			"description": "The value of a channel variable",
 			"properties": {
-				"variable": {
+				"value": {
 					"required": true,
 					"type": "string",
 					"description": "The value of the variable requested"
diff --git a/rest-api/api-docs/channels.json b/rest-api/api-docs/channels.json
index a97f225669d52396d6ec4baf5a5e2469713a85a0..c442d8eb3dd02b7872df90d7667aa9aa6d14dbca 100644
--- a/rest-api/api-docs/channels.json
+++ b/rest-api/api-docs/channels.json
@@ -654,7 +654,7 @@
 					"httpMethod": "GET",
 					"summary": "Get the value of a channel variable or function.",
 					"nickname": "getChannelVar",
-					"responseClass": "ChannelVariable",
+					"responseClass": "Variable",
 					"parameters": [
 						{
 							"name": "channelId",
@@ -827,16 +827,6 @@
 					"description": "Timestamp when channel was created"
 				}
 			}
-		},
-		"Variable": {
-			"id": "Variable",
-			"properties": {
-				"variable": {
-					"required": true,
-					"type": "string",
-					"description": "The value of the variable requested"
-				}
-			}
 		}
 	}
 }