diff --git src/bp-activity/classes/class-bp-activity-activity.php src/bp-activity/classes/class-bp-activity-activity.php
index e58b84495..1c4714eb5 100644
--- src/bp-activity/classes/class-bp-activity-activity.php
+++ src/bp-activity/classes/class-bp-activity-activity.php
@@ -268,15 +268,35 @@ class BP_Activity_Activity {
 				return false;
 			} else {
 				if ( empty( $this->component ) ) {
-					$this->errors->add( 'bp_activity_missing_component' );
+					$this->errors->add( 'bp_activity_missing_component', __( 'You need to define a component parameter to insert activity.', 'buddypress' ) );
 				} else {
-					$this->errors->add( 'bp_activity_missing_type' );
+					$this->errors->add( 'bp_activity_missing_type', __( 'You need to define a type parameter to insert activity.', 'buddypress' ) );
 				}
 
 				return $this->errors;
 			}
 		}
 
+		/**
+		 * Use this filter to make the content of your activity required.
+		 *
+		 * @since 6.0.0
+		 *
+		 * @param bool   $value True if the content of the activity type is required.
+		 *                      False otherwise.
+		 * @param string $type  The type of the activity we are about to insert.
+		 */
+		$type_requires_content = (bool) apply_filters( 'bp_activity_type_requires_content', $this->type === 'activity_update', $this->type );
+		if ( $type_requires_content && ! $this->content ) {
+			if ( 'bool' === $this->error_type ) {
+				return false;
+			} else {
+				$this->errors->add( 'bp_activity_missing_content', __( 'Please enter some content to post.', 'buddypress' ) );
+
+				return $this->errors;
+			}
+		}
+
 		if ( empty( $this->primary_link ) ) {
 			$this->primary_link = bp_loggedin_user_domain();
 		}
diff --git tests/phpunit/testcases/activity/class.BP_Activity_Activity.php tests/phpunit/testcases/activity/class.BP_Activity_Activity.php
index 6085075c7..7772f6377 100644
--- tests/phpunit/testcases/activity/class.BP_Activity_Activity.php
+++ tests/phpunit/testcases/activity/class.BP_Activity_Activity.php
@@ -785,4 +785,92 @@ class BP_Tests_Activity_Class extends BP_UnitTestCase {
 	public function action_cb( $activity ) {
 		return 'Woo Hoo!';
 	}
+
+	/**
+	 * @ticket BP8236
+	 */
+	public function test_save_activity_requires_component() {
+		$a = bp_activity_add(
+			array(
+				'component'  => '',
+				'content'    => 'Activity without component content %s',
+				'type'       => 'activity_update',
+				'error_type' => 'wp_error',
+			)
+		);
+
+		$this->assertInstanceOf( 'WP_Error', $a );
+		$this->assertEquals( 'bp_activity_missing_component', $a->get_error_code() );
+	}
+
+	/**
+	 * @ticket BP8236
+	 */
+	public function test_save_activity_requires_type() {
+		$a = bp_activity_add(
+			array(
+				'component'  => 'foobar',
+				'content'    => 'Activity without type content %s',
+				'type'       => '',
+				'error_type' => 'wp_error',
+			)
+		);
+
+		$this->assertInstanceOf( 'WP_Error', $a );
+		$this->assertEquals( 'bp_activity_missing_type', $a->get_error_code() );
+	}
+
+	/**
+	 * @ticket BP8236
+	 */
+	public function test_save_activity_requires_content() {
+		$a = bp_activity_add(
+			array(
+				'component'  => buddypress()->activity->id,
+				'content'    => '',
+				'type'       => 'activity_update',
+				'error_type' => 'wp_error',
+			)
+		);
+
+		$this->assertInstanceOf( 'WP_Error', $a );
+		$this->assertEquals( 'bp_activity_missing_content', $a->get_error_code() );
+	}
+
+	/**
+	 * @ticket BP8236
+	 */
+	public function test_save_activity_does_not_require_content() {
+		$a = bp_activity_add(
+			array(
+				'component'  => buddypress()->members->id,
+				'content'    => '',
+				'type'       => 'new_member',
+				'error_type' => 'wp_error',
+			)
+		);
+
+		$this->assertFalse( is_wp_error( $a ) );
+	}
+
+	/**
+	 * @ticket BP8236
+	 */
+	public function test_save_activity_custom_type_requires_content() {
+		add_filter( 'bp_activity_type_requires_content', '__return_true' );
+
+		$a = bp_activity_add(
+			array(
+				'component'  => 'foo',
+				'content'    => '',
+				'type'       => 'bar',
+				'error_type' => 'wp_error',
+			)
+		);
+
+		remove_filter( 'bp_activity_type_requires_content', '__return_true' );
+
+		$this->assertInstanceOf( 'WP_Error', $a );
+		$this->assertEquals( 'bp_activity_missing_content', $a->get_error_code() );
+	}
 }
