diff --git a/includes/admin/class-wc-stripe-rest-upe-flag-toggle-controller.php b/includes/admin/class-wc-stripe-rest-upe-flag-toggle-controller.php
new file mode 100644
index 0000000..68c652a
--- /dev/null
+++ b/includes/admin/class-wc-stripe-rest-upe-flag-toggle-controller.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Class WC_Stripe_REST_UPE_Flag_Toggle_Controller
+ */
+
+defined( 'ABSPATH' ) || exit;
+
+/**
+ * REST controller for UPE feature flag.
+ */
+class WC_Stripe_REST_UPE_Flag_Toggle_Controller extends WC_Stripe_REST_Base_Controller {
+	/**
+	 * Endpoint path.
+	 *
+	 * @var string
+	 */
+	protected $rest_base = 'wc_stripe/upe_flag_toggle';
+
+	/**
+	 * Configure REST API routes.
+	 */
+	public function register_routes() {
+		register_rest_route(
+			$this->namespace,
+			'/' . $this->rest_base,
+			[
+				'methods'             => WP_REST_Server::READABLE,
+				'callback'            => [ $this, 'get_flag' ],
+				'permission_callback' => [ $this, 'check_permission' ],
+			]
+		);
+		register_rest_route(
+			$this->namespace,
+			'/' . $this->rest_base,
+			[
+				'methods'             => WP_REST_Server::EDITABLE,
+				'callback'            => [ $this, 'set_flag' ],
+				'permission_callback' => [ $this, 'check_permission' ],
+				'args'                => [
+					'is_upe_enabled' => [
+						'description'       => __( 'Determines if the UPE feature flag is enabled.', 'woocommerce-gateway-stripe' ),
+						'type'              => 'boolean',
+						'validate_callback' => 'rest_validate_request_arg',
+					],
+				],
+			]
+		);
+	}
+
+	/**
+	 * Retrieve flag status.
+	 *
+	 * @return WP_REST_Response
+	 */
+	public function get_flag() {
+		return new WP_REST_Response(
+			[
+				'is_upe_enabled' => WC_Stripe_Feature_Flags::is_upe_checkout_enabled(),
+			]
+		);
+	}
+
+	/**
+	 * Update the data.
+	 *
+	 * @param WP_REST_Request $request Full data about the request.
+	 */
+	public function set_flag( WP_REST_Request $request ) {
+		$is_upe_enabled = $request->get_param( 'is_upe_enabled' );
+
+		if ( null === $is_upe_enabled ) {
+			return new WP_REST_Response( [ 'result' => 'bad_request' ], 400 );
+		}
+
+		$settings = get_option( 'woocommerce_stripe_settings', [] );
+		$settings[ WC_Stripe_Feature_Flags::UPE_CHECKOUT_FEATURE_ATTRIBUTE_NAME ] = $is_upe_enabled ? 'yes' : 'disabled';
+
+		update_option( 'woocommerce_stripe_settings', $settings );
+
+		// including the class again because otherwise it's not present.
+		if ( WC_Stripe_Inbox_Notes::are_inbox_notes_supported() ) {
+			require_once WC_STRIPE_PLUGIN_PATH . '/includes/notes/class-wc-stripe-upe-availability-note.php';
+			WC_Stripe_UPE_Availability_Note::possibly_delete_note();
+
+			require_once WC_STRIPE_PLUGIN_PATH . '/includes/notes/class-wc-stripe-upe-stripelink-note.php';
+			WC_Stripe_UPE_StripeLink_Note::possibly_delete_note();
+		}
+
+		return new WP_REST_Response( [ 'result' => 'success' ], 200 );
+	}
+}
