Index: src/wp-includes/rest-api.php
===================================================================
--- src/wp-includes/rest-api.php	(revision 48802)
+++ src/wp-includes/rest-api.php	(working copy)
@@ -1539,6 +1539,34 @@
 }
 
 /**
+ * Get all valid JSON schema properties.
+ *
+ * @since 5.6.0
+ *
+ * @return string[] All valid JSON schema properties.
+ */
+function rest_get_allowed_schema_keywords() {
+	return array(
+			'type',
+			'format',
+			'enum',
+			'items',
+			'properties',
+			'additionalProperties',
+			'minimum',
+			'maximum',
+			'exclusiveMinimum',
+			'exclusiveMaximum',
+			'minLength',
+			'maxLength',
+			'pattern',
+			'minItems',
+			'maxItems',
+			'uniqueItems',
+	);
+}
+
+/**
  * Validate a value based on a schema.
  *
  * @since 4.7.0
Index: src/wp-includes/rest-api/class-wp-rest-server.php
===================================================================
--- src/wp-includes/rest-api/class-wp-rest-server.php	(revision 48802)
+++ src/wp-includes/rest-api/class-wp-rest-server.php	(working copy)
@@ -1280,6 +1280,7 @@
 			}
 		}
 
+		$allowed_schema_keywords = rest_get_allowed_schema_keywords();
 		$route = preg_replace( '#\(\?P<(\w+?)>.*?\)#', '{$1}', $route );
 
 		foreach ( $callbacks as $callback ) {
@@ -1297,25 +1298,14 @@
 				$endpoint_data['args'] = array();
 
 				foreach ( $callback['args'] as $key => $opts ) {
-					$arg_data = array(
-						'required' => ! empty( $opts['required'] ),
-					);
-					if ( isset( $opts['default'] ) ) {
-						$arg_data['default'] = $opts['default'];
-					}
-					if ( isset( $opts['enum'] ) ) {
-						$arg_data['enum'] = $opts['enum'];
-					}
-					if ( isset( $opts['description'] ) ) {
-						$arg_data['description'] = $opts['description'];
-					}
-					if ( isset( $opts['type'] ) ) {
-						$arg_data['type'] = $opts['type'];
-					}
-					if ( isset( $opts['items'] ) ) {
-						$arg_data['items'] = $opts['items'];
-					}
-					$endpoint_data['args'][ $key ] = $arg_data;
+					$arg_data = array( 'required' => ! empty( $opts['required'] ) );
+
+					// take valid schema properties only
+					foreach ( $allowed_schema_keywords as $allowed_schema_keyword )
+						if ( array_key_exists( $allowed_schema_keyword, $opts ) )
+							$arg_data[$allowed_schema_keyword] = $opts[$allowed_schema_keyword];
+
+					$endpoint_data['args'][$key] = $arg_data;
 				}
 			}
 
Index: src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php
===================================================================
--- src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php	(revision 48802)
+++ src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php	(working copy)
@@ -629,24 +629,7 @@
 		$schema                  = $this->get_item_schema();
 		$schema_properties       = ! empty( $schema['properties'] ) ? $schema['properties'] : array();
 		$endpoint_args           = array();
-		$valid_schema_properties = array(
-			'type',
-			'format',
-			'enum',
-			'items',
-			'properties',
-			'additionalProperties',
-			'minimum',
-			'maximum',
-			'exclusiveMinimum',
-			'exclusiveMaximum',
-			'minLength',
-			'maxLength',
-			'pattern',
-			'minItems',
-			'maxItems',
-			'uniqueItems',
-		);
+		$allowed_schema_keywords = rest_get_allowed_schema_keywords();
 
 		foreach ( $schema_properties as $field_id => $params ) {
 
@@ -672,7 +655,7 @@
 				$endpoint_args[ $field_id ]['required'] = true;
 			}
 
-			foreach ( $valid_schema_properties as $schema_prop ) {
+			foreach ($allowed_schema_keywords as $schema_prop ) {
 				if ( isset( $params[ $schema_prop ] ) ) {
 					$endpoint_args[ $field_id ][ $schema_prop ] = $params[ $schema_prop ];
 				}
