diff --git src/wp-includes/rest-api.php src/wp-includes/rest-api.php
index 1e4e23617b..89c4e6bb3a 100644
--- src/wp-includes/rest-api.php
+++ src/wp-includes/rest-api.php
@@ -482,8 +482,9 @@ function rest_get_server() {
  * Ensures request arguments are a request object (for consistency).
  *
  * @since 4.4.0
+ * @since 5.3.0 Accept string argument for the request path.
  *
- * @param array|WP_REST_Request $request Request to check.
+ * @param array|string|WP_REST_Request $request Request to check.
  * @return WP_REST_Request REST request instance.
  */
 function rest_ensure_request( $request ) {
@@ -491,6 +492,10 @@ function rest_ensure_request( $request ) {
 		return $request;
 	}
 
+	if ( is_string( $request ) ) {
+		return new WP_REST_Request( 'GET', $request );
+	}
+
 	return new WP_REST_Request( 'GET', '', $request );
 }
 
diff --git tests/phpunit/tests/rest-api.php tests/phpunit/tests/rest-api.php
index 237fd71ee4..802c57a8f8 100644
--- tests/phpunit/tests/rest-api.php
+++ tests/phpunit/tests/rest-api.php
@@ -744,4 +744,14 @@ class Tests_REST_API extends WP_UnitTestCase {
 
 		$GLOBALS['wp_rest_server'] = $rest_server;
 	}
+
+	/**
+	 * Ensure rest_ensure_response promotes an API path string to a WP_REST_Request.
+	 */
+	function test_rest_ensure_response_accepts_path_string() {
+		$request = rest_ensure_request( '/wp/v2/posts' );
+		$this->assertInstanceOf( 'WP_REST_Request', $request );
+		$this->assertEquals( '/wp/v2/posts', $request->get_route() );
+		$this->assertEquals( 'GET', $request->get_method() );
+	}
 }
