Index: asterisk-22.10.0/res/ari/resource_channels.c
===================================================================
--- asterisk-22.10.0.orig/res/ari/resource_channels.c
+++ asterisk-22.10.0/res/ari/resource_channels.c
@@ -1786,6 +1786,21 @@ void ast_ari_channels_set_channel_var(st
 		return;
 	}
 
+	if (args->bypass_stasis) {
+		struct ast_channel *channel = ast_channel_get_by_name(args->channel_id);
+
+		if (!channel) {
+			ast_ari_response_error(response, 404, "Not Found", "Channel not found");
+			return;
+		}
+
+		pbx_builtin_setvar_helper(channel, args->variable, args->value);
+		ast_channel_unref(channel);
+
+		ast_ari_response_no_content(response);
+		return;
+	}
+
 	control = find_control(response, args->channel_id);
 	if (control == NULL) {
 		/* response filled in by find_control */
Index: asterisk-22.10.0/res/ari/resource_channels.h
===================================================================
--- asterisk-22.10.0.orig/res/ari/resource_channels.h
+++ asterisk-22.10.0/res/ari/resource_channels.h
@@ -708,6 +708,8 @@ struct ast_ari_channels_set_channel_var_
 	const char *value;
 	/*! Whether this variable should be included in channel events. Defaults to false. */
 	int report_events;
+	/*! Set the variable even if the channel is not in Stasis application */
+	int bypass_stasis;
 };
 /*!
  * \brief Body parsing function for /channels/{channelId}/variable.
Index: asterisk-22.10.0/res/res_ari_channels.c
===================================================================
--- asterisk-22.10.0.orig/res/res_ari_channels.c
+++ asterisk-22.10.0/res/res_ari_channels.c
@@ -2488,6 +2488,10 @@ int ast_ari_channels_set_channel_var_par
 	if (field) {
 		args->report_events = ast_json_is_true(field);
 	}
+	field = ast_json_object_get(body, "bypassStasis");
+	if (field) {
+		args->bypass_stasis = ast_json_is_true(field);
+	}
 	return 0;
 }
 
@@ -2522,6 +2526,9 @@ static void ast_ari_channels_set_channel
 		if (strcmp(i->name, "report_events") == 0) {
 			args.report_events = ast_true(i->value);
 		} else
+		if (strcmp(i->name, "bypassStasis") == 0) {
+			args.bypass_stasis = ast_true(i->value);
+		} else
 		{}
 	}
 	for (i = path_vars; i; i = i->next) {
Index: asterisk-22.10.0/rest-api/api-docs/channels.json
===================================================================
--- asterisk-22.10.0.orig/rest-api/api-docs/channels.json
+++ asterisk-22.10.0/rest-api/api-docs/channels.json
@@ -1610,6 +1610,15 @@
 							"allowMultiple": false,
 							"dataType": "boolean",
 							"defaultValue": false
+						},
+						{
+							"name": "bypassStasis",
+							"description": "Set the variable even if the channel is not in Stasis application",
+							"paramType": "query",
+							"required": false,
+							"allowMultiple": false,
+							"dataType": "boolean",
+							"defaultValue": false
 						}
 					],
 					"errorResponses": [
