diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
index e5420c74fb..d98f94df2a 100644
--- a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
+++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
@@ -1824,6 +1824,10 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
 			$data['slug'] = $post->post_name;
 		}
 
+		if ( rest_is_field_included( 'old_slug', $fields ) ) {
+			$data['old_slug'] = get_post_meta( $post->ID, '_wp_old_slug', true );
+		}
+
 		if ( rest_is_field_included( 'status', $fields ) ) {
 			$data['status'] = $post->post_status;
 		}
@@ -2319,6 +2323,14 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
 						'sanitize_callback' => array( $this, 'sanitize_slug' ),
 					),
 				),
+				'old_slug'         => array(
+					'description' => __( 'An alphanumeric identifier for the object unique to its type.' ),
+					'type'        => array( 'string', 'null' ),
+					'context'     => array( 'edit' ),
+					'arg_options' => array(
+						'sanitize_callback' => array( $this, 'sanitize_slug' ),
+					),
+				),
 				'status'       => array(
 					'description' => __( 'A named status for the post.' ),
 					'type'        => 'string',
diff --git a/tests/phpunit/tests/rest-api/rest-attachments-controller.php b/tests/phpunit/tests/rest-api/rest-attachments-controller.php
index 737c32b8e1..a6416ddf9e 100644
--- a/tests/phpunit/tests/rest-api/rest-attachments-controller.php
+++ b/tests/phpunit/tests/rest-api/rest-attachments-controller.php
@@ -1644,7 +1644,7 @@ class WP_Test_REST_Attachments_Controller extends WP_Test_REST_Post_Type_Control
 		$response   = rest_get_server()->dispatch( $request );
 		$data       = $response->get_data();
 		$properties = $data['schema']['properties'];
-		$this->assertCount( 29, $properties );
+		$this->assertCount( 30, $properties );
 		$this->assertArrayHasKey( 'author', $properties );
 		$this->assertArrayHasKey( 'alt_text', $properties );
 		$this->assertArrayHasKey( 'caption', $properties );
@@ -1671,6 +1671,7 @@ class WP_Test_REST_Attachments_Controller extends WP_Test_REST_Post_Type_Control
 		$this->assertArrayHasKey( 'permalink_template', $properties );
 		$this->assertArrayHasKey( 'status', $properties );
 		$this->assertArrayHasKey( 'slug', $properties );
+		$this->assertArrayHasKey( 'old_slug', $properties );
 		$this->assertArrayHasKey( 'source_url', $properties );
 		$this->assertArrayHasKey( 'template', $properties );
 		$this->assertArrayHasKey( 'title', $properties );
diff --git a/tests/phpunit/tests/rest-api/rest-pages-controller.php b/tests/phpunit/tests/rest-api/rest-pages-controller.php
index 209229256a..7a57c892a5 100644
--- a/tests/phpunit/tests/rest-api/rest-pages-controller.php
+++ b/tests/phpunit/tests/rest-api/rest-pages-controller.php
@@ -748,7 +748,7 @@ class WP_Test_REST_Pages_Controller extends WP_Test_REST_Post_Type_Controller_Te
 		$response   = rest_get_server()->dispatch( $request );
 		$data       = $response->get_data();
 		$properties = $data['schema']['properties'];
-		$this->assertCount( 25, $properties );
+		$this->assertCount( 26, $properties );
 		$this->assertArrayHasKey( 'author', $properties );
 		$this->assertArrayHasKey( 'comment_status', $properties );
 		$this->assertArrayHasKey( 'content', $properties );
@@ -769,6 +769,7 @@ class WP_Test_REST_Pages_Controller extends WP_Test_REST_Post_Type_Controller_Te
 		$this->assertArrayHasKey( 'permalink_template', $properties );
 		$this->assertArrayHasKey( 'ping_status', $properties );
 		$this->assertArrayHasKey( 'slug', $properties );
+		$this->assertArrayHasKey( 'old_slug', $properties );
 		$this->assertArrayHasKey( 'status', $properties );
 		$this->assertArrayHasKey( 'template', $properties );
 		$this->assertArrayHasKey( 'title', $properties );
diff --git a/tests/phpunit/tests/rest-api/rest-posts-controller.php b/tests/phpunit/tests/rest-api/rest-posts-controller.php
index 8b81b9f648..5a1a4a9ea2 100644
--- a/tests/phpunit/tests/rest-api/rest-posts-controller.php
+++ b/tests/phpunit/tests/rest-api/rest-posts-controller.php
@@ -4362,7 +4362,7 @@ Shankle pork chop prosciutto ribeye ham hock pastrami. T-bone shank brisket baco
 		$response   = rest_get_server()->dispatch( $request );
 		$data       = $response->get_data();
 		$properties = $data['schema']['properties'];
-		$this->assertCount( 27, $properties );
+		$this->assertCount( 28, $properties );
 		$this->assertArrayHasKey( 'author', $properties );
 		$this->assertArrayHasKey( 'comment_status', $properties );
 		$this->assertArrayHasKey( 'content', $properties );
@@ -4473,6 +4473,7 @@ Shankle pork chop prosciutto ribeye ham hock pastrami. T-bone shank brisket baco
 			'meta',
 			'modified',
 			'modified_gmt',
+			'old_slug',
 			'password',
 			'permalink_template',
 			'ping_status',
diff --git a/tests/qunit/fixtures/wp-api-generated.js b/tests/qunit/fixtures/wp-api-generated.js
index a5a2d3622e..1680e54d6d 100644
--- a/tests/qunit/fixtures/wp-api-generated.js
+++ b/tests/qunit/fixtures/wp-api-generated.js
@@ -652,6 +652,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -936,6 +941,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -1375,6 +1385,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -1850,6 +1865,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -2106,6 +2126,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -2517,6 +2542,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -2956,6 +2986,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -3163,6 +3198,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -7107,6 +7147,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -7288,6 +7333,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -7625,6 +7675,11 @@ mockedApiResponse.Schema = {
                             "type": "string",
                             "required": false
                         },
+                        "old_slug": {
+                            "description": "An alphanumeric identifier for the object unique to its type.",
+                            "type": "string",
+                            "required": false
+                        },
                         "status": {
                             "description": "A named status for the post.",
                             "type": "string",
@@ -12294,6 +12349,7 @@ mockedApiResponse.PostsCollection = [
         "modified": "2017-02-14T00:00:00",
         "modified_gmt": "2017-02-14T00:00:00",
         "slug": "restapi-client-fixture-post",
+        "old_slug": "",
         "status": "publish",
         "type": "post",
         "link": "http://example.org/?p=4",
@@ -12403,6 +12459,7 @@ mockedApiResponse.PostModel = {
     "modified": "2017-02-14T00:00:00",
     "modified_gmt": "2017-02-14T00:00:00",
     "slug": "restapi-client-fixture-post",
+    "old_slug": "",
     "status": "publish",
     "type": "post",
     "link": "http://example.org/?p=4",
@@ -12607,6 +12664,7 @@ mockedApiResponse.PagesCollection = [
         "modified": "2017-02-14T00:00:00",
         "modified_gmt": "2017-02-14T00:00:00",
         "slug": "restapi-client-fixture-page",
+        "old_slug": "",
         "status": "publish",
         "type": "page",
         "link": "http://example.org/?page_id=7",
@@ -12698,6 +12756,7 @@ mockedApiResponse.PageModel = {
     "modified": "2017-02-14T00:00:00",
     "modified_gmt": "2017-02-14T00:00:00",
     "slug": "restapi-client-fixture-page",
+    "old_slug": "",
     "status": "publish",
     "type": "page",
     "link": "http://example.org/?page_id=7",
@@ -12896,6 +12955,7 @@ mockedApiResponse.MediaCollection = [
         "modified": "2017-02-14T00:00:00",
         "modified_gmt": "2017-02-14T00:00:00",
         "slug": "restapi-client-fixture-attachment",
+        "old_slug": "",
         "status": "inherit",
         "type": "attachment",
         "link": "http://example.org/?attachment_id=10",
@@ -12965,6 +13025,7 @@ mockedApiResponse.MediaModel = {
     "modified": "2017-02-14T00:00:00",
     "modified_gmt": "2017-02-14T00:00:00",
     "slug": "restapi-client-fixture-attachment",
+    "old_slug": "",
     "status": "inherit",
     "type": "attachment",
     "link": "http://example.org/?attachment_id=10",
