diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php
index 0bbc6a345c..4795631de7 100644
--- a/src/wp-includes/blocks.php
+++ b/src/wp-includes/blocks.php
@@ -261,4 +261,18 @@ function _recurse_do_blocks( $blocks, $all_blocks ) {
 	$rendered_content = preg_replace( '/<!--\s+\/?wp:.*?-->/m', '', $rendered_content );
 
 	return $rendered_content;
-}
\ No newline at end of file
+}
+
+/**
+ * Returns the current version of the block format that the content string is using.
+ *
+ * If the string doesn't contain blocks, it returns 0.
+ *
+ * @since 5.0.0
+ *
+ * @param string $content Content to test.
+ * @return int The block format version.
+ */
+function block_version( $content ) {
+	return has_blocks( $content ) ? 1 : 0;
+}
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 3fbf169b76..c2b707dfa0 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
@@ -1509,10 +1509,11 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
 
 		if ( in_array( 'content', $fields, true ) ) {
 			$data['content'] = array(
-				'raw'       => $post->post_content,
+				'raw'           => $post->post_content,
 				/** This filter is documented in wp-includes/post-template.php */
-				'rendered'  => post_password_required( $post ) ? '' : apply_filters( 'the_content', $post->post_content ),
-				'protected' => (bool) $post->post_password,
+				'rendered'      => post_password_required( $post ) ? '' : apply_filters( 'the_content', $post->post_content ),
+				'protected'     => (bool) $post->post_password,
+				'block_version' => block_version( $post->post_content ),
 			);
 		}
 
@@ -2062,6 +2063,12 @@ class WP_REST_Posts_Controller extends WP_REST_Controller {
 								'context'     => array( 'view', 'edit' ),
 								'readonly'    => true,
 							),
+							'block_version' => array(
+								'description' => __( 'Version of the content block format used by the object.' ),
+								'type'        => 'integer',
+								'context'     => array( 'edit' ),
+								'readonly'    => true,
+							),
 							'protected'       => array(
 								'description' => __( 'Whether the content is protected with a password.' ),
 								'type'        => 'boolean',
diff --git a/tests/phpunit/tests/blocks/block-type.php b/tests/phpunit/tests/blocks/block-type.php
index 5eed28d0df..ba80ab69a9 100644
--- a/tests/phpunit/tests/blocks/block-type.php
+++ b/tests/phpunit/tests/blocks/block-type.php
@@ -310,4 +310,47 @@ class WP_Test_Block_Type extends WP_UnitTestCase {
 
 		return json_encode( $attributes );
 	}
+
+	/**
+	 * Testing the block version.
+	 *
+	 * @ticket 43887
+	 *
+	 * @dataProvider data_block_version
+	 *
+	 * @param string|null $content  Content.
+	 * @param int         $expected Expected block version.
+	 */
+	public function test_block_version( $content, $expected ) {
+		$this->assertSame( $expected, block_version( $content ) );
+	}
+
+	/**
+	 * Test cases for test_block_version().
+	 *
+	 * @since 5.0.0
+	 *
+	 * @return array {
+	 *     @type array {
+	 *         @type string|null Content.
+	 *         @type int         Expected block version.
+	 *     }
+	 * }
+	 */
+	public function data_block_version() {
+		return array(
+			// Null.
+			array( null, 0 ),
+			// Empty post content.
+			array( '', 0 ),
+			// Post content without blocks.
+			array( '<hr class="wp-block-separator" />', 0 ),
+			// Post content with a block.
+			array( '<!-- wp:core/separator -->', 1 ),
+			// Post content with a fake block.
+			array( '<!-- wp:core/fake --><!-- /wp:core/fake -->', 1 ),
+			// Post content with an invalid block.
+			array( '<!- - wp:core/separator -->', 0 ),
+		);
+	}
 }
diff --git a/tests/phpunit/tests/rest-api/rest-posts-controller.php b/tests/phpunit/tests/rest-api/rest-posts-controller.php
index 7969a84b45..10f6a6eebc 100644
--- a/tests/phpunit/tests/rest-api/rest-posts-controller.php
+++ b/tests/phpunit/tests/rest-api/rest-posts-controller.php
@@ -1332,6 +1332,65 @@ class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te
 		$this->assertTrue( $data['excerpt']['protected'] );
 	}
 
+	/**
+	 * The post response should not have `block_version` when in view context.
+	 *
+	 * @ticket 43887
+	 */
+	public function test_get_post_should_not_have_block_version_when_context_view() {
+		$post_id = $this->factory->post->create(
+			array(
+				'post_content' => '<!-- wp:core/separator -->',
+			)
+		);
+
+		$request  = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) );
+		$response = rest_get_server()->dispatch( $request );
+		$data = $response->get_data();
+		$this->assertFalse( isset( $data['content']['block_version'] ) );
+	}
+
+	/**
+	 * The post response should have `block_version` indicate that block content is present when in edit context.
+	 *
+	 * @ticket 43887
+	 */
+	public function test_get_post_should_have_block_version_indicate_block_content_when_context_edit() {
+		wp_set_current_user( self::$editor_id );
+
+		$post_id = $this->factory->post->create(
+			array(
+				'post_content' => '<!-- wp:core/separator -->',
+			)
+		);
+
+		$request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) );
+		$request->set_param( 'context', 'edit' );
+		$response = rest_get_server()->dispatch( $request );
+		$data = $response->get_data();
+		$this->assertSame( 1, $data['content']['block_version'] );
+	}
+	
+	/**
+	 * The post response should have `block_version` indicate that no block content is present when in edit context.
+	 *
+	 * @ticket 43887
+	 */
+	public function test_get_post_should_have_block_version_indicate_no_block_content_when_context_edit() {
+		wp_set_current_user( self::$editor_id );
+
+		$post_id = $this->factory->post->create(
+			array(
+				'post_content' => '<hr />',
+			)
+		);
+		$request = new WP_REST_Request( 'GET', sprintf( '/wp/v2/posts/%d', $post_id ) );
+		$request->set_param( 'context', 'edit' );
+		$response = rest_get_server()->dispatch( $request );
+		$data = $response->get_data();
+		$this->assertSame( 0, $data['content']['block_version'] );
+	}
+
 	public function test_get_item_read_permission_custom_post_status_not_authenticated() {
 		register_post_status( 'testpubstatus', array( 'public' => true ) );
 		register_post_status( 'testprivtatus', array( 'public' => false ) );
diff --git a/tests/qunit/fixtures/wp-api-generated.js b/tests/qunit/fixtures/wp-api-generated.js
index 42cd329df9..8a236da00d 100644
--- a/tests/qunit/fixtures/wp-api-generated.js
+++ b/tests/qunit/fixtures/wp-api-generated.js
@@ -4342,13 +4342,13 @@ mockedApiResponse.postRevisions = [
         "author": 389,
         "date": "2017-02-14T00:00:00",
         "date_gmt": "2017-02-14T00:00:00",
-        "id": 36707,
+        "id": 36710,
         "modified": "2017-02-14T00:00:00",
         "modified_gmt": "2017-02-14T00:00:00",
-        "parent": 36706,
-        "slug": "36706-revision-v1",
+        "parent": 36709,
+        "slug": "36709-revision-v1",
         "guid": {
-            "rendered": "http://example.org/?p=36707"
+            "rendered": "http://example.org/?p=36710"
         },
         "title": {
             "rendered": "REST API Client Fixture: Post"
@@ -4362,7 +4362,7 @@ mockedApiResponse.postRevisions = [
         "_links": {
             "parent": [
                 {
-                    "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36706"
+                    "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36709"
                 }
             ]
         }
@@ -4397,13 +4397,13 @@ mockedApiResponse.postAutosaves = [
         "author": 389,
         "date": "2017-02-14T00:00:00",
         "date_gmt": "2017-02-14T00:00:00",
-        "id": 36708,
+        "id": 36711,
         "modified": "2017-02-14T00:00:00",
         "modified_gmt": "2017-02-14T00:00:00",
-        "parent": 36706,
-        "slug": "36706-autosave-v1",
+        "parent": 36709,
+        "slug": "36709-autosave-v1",
         "guid": {
-            "rendered": "http://example.org/?p=36708"
+            "rendered": "http://example.org/?p=36711"
         },
         "title": {
             "rendered": ""
@@ -4417,7 +4417,7 @@ mockedApiResponse.postAutosaves = [
         "_links": {
             "parent": [
                 {
-                    "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36706"
+                    "href": "http://example.org/index.php?rest_route=/wp/v2/posts/36709"
                 }
             ]
         }
@@ -4428,13 +4428,13 @@ mockedApiResponse.autosave = {
     "author": 389,
     "date": "2017-02-14T00:00:00",
     "date_gmt": "2017-02-14T00:00:00",
-    "id": 36708,
+    "id": 36711,
     "modified": "2017-02-14T00:00:00",
     "modified_gmt": "2017-02-14T00:00:00",
-    "parent": 36706,
-    "slug": "36706-autosave-v1",
+    "parent": 36709,
+    "slug": "36709-autosave-v1",
     "guid": {
-        "rendered": "http://example.org/?p=36708"
+        "rendered": "http://example.org/?p=36711"
     },
     "title": {
         "rendered": ""
@@ -4602,13 +4602,13 @@ mockedApiResponse.pageRevisions = [
         "author": 389,
         "date": "2017-02-14T00:00:00",
         "date_gmt": "2017-02-14T00:00:00",
-        "id": 36710,
+        "id": 36713,
         "modified": "2017-02-14T00:00:00",
         "modified_gmt": "2017-02-14T00:00:00",
-        "parent": 36709,
-        "slug": "36709-revision-v1",
+        "parent": 36712,
+        "slug": "36712-revision-v1",
         "guid": {
-            "rendered": "http://example.org/?p=36710"
+            "rendered": "http://example.org/?p=36713"
         },
         "title": {
             "rendered": "REST API Client Fixture: Page"
@@ -4622,7 +4622,7 @@ mockedApiResponse.pageRevisions = [
         "_links": {
             "parent": [
                 {
-                    "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36709"
+                    "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36712"
                 }
             ]
         }
@@ -4657,13 +4657,13 @@ mockedApiResponse.pageAutosaves = [
         "author": 389,
         "date": "2017-02-14T00:00:00",
         "date_gmt": "2017-02-14T00:00:00",
-        "id": 36711,
+        "id": 36714,
         "modified": "2017-02-14T00:00:00",
         "modified_gmt": "2017-02-14T00:00:00",
-        "parent": 36709,
-        "slug": "36709-autosave-v1",
+        "parent": 36712,
+        "slug": "36712-autosave-v1",
         "guid": {
-            "rendered": "http://example.org/?p=36711"
+            "rendered": "http://example.org/?p=36714"
         },
         "title": {
             "rendered": ""
@@ -4677,7 +4677,7 @@ mockedApiResponse.pageAutosaves = [
         "_links": {
             "parent": [
                 {
-                    "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36709"
+                    "href": "http://example.org/index.php?rest_route=/wp/v2/pages/36712"
                 }
             ]
         }
@@ -4688,13 +4688,13 @@ mockedApiResponse.pageAutosave = {
     "author": 389,
     "date": "2017-02-14T00:00:00",
     "date_gmt": "2017-02-14T00:00:00",
-    "id": 36711,
+    "id": 36714,
     "modified": "2017-02-14T00:00:00",
     "modified_gmt": "2017-02-14T00:00:00",
-    "parent": 36709,
-    "slug": "36709-autosave-v1",
+    "parent": 36712,
+    "slug": "36712-autosave-v1",
     "guid": {
-        "rendered": "http://example.org/?p=36711"
+        "rendered": "http://example.org/?p=36714"
     },
     "title": {
         "rendered": ""
