diff --git src/wp-includes/functions.php src/wp-includes/functions.php
index 0e720ee..a88e9bd 100644
--- src/wp-includes/functions.php
+++ src/wp-includes/functions.php
@@ -3031,12 +3031,17 @@ function _wp_json_prepare_data( $data ) {
  * Send a JSON response back to an Ajax request.
  *
  * @since 3.5.0
+ * @since 4.6.0 If provided, sets the header status to `$response['status_code']`
  *
  * @param mixed $response Variable (usually an array or object) to encode as JSON,
  *                        then print and die.
  */
 function wp_send_json( $response ) {
 	@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
+	if ( isset( $response['status_code'] ) ) {
+		status_header( (int) $response['status_code'] );
+		unset( $response['status_code'] );
+	}
 	echo wp_json_encode( $response );
 	if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
 		wp_die();
@@ -3048,11 +3053,12 @@ function wp_send_json( $response ) {
  * Send a JSON response back to an Ajax request, indicating success.
  *
  * @since 3.5.0
+ * @since 4.6.0 The `$status_code` parameter was added
  *
  * @param mixed $data Data to encode as JSON, then print and die.
  */
-function wp_send_json_success( $data = null ) {
-	$response = array( 'success' => true );
+function wp_send_json_success( $data = null, $status_code = 200 ) {
+	$response = array( 'success' => true, 'status_code' => (int) $status_code );
 
 	if ( isset( $data ) )
 		$response['data'] = $data;
@@ -3071,11 +3077,13 @@ function wp_send_json_success( $data = null ) {
  * @since 3.5.0
  * @since 4.1.0 The `$data` parameter is now processed if a {@see WP_Error}
  *              object is passed in.
+ * @since 4.6.0 The `$status_code` parameter was added
  *
- * @param mixed $data Data to encode as JSON, then print and die.
+ * @param mixed $data        Data to encode as JSON, then print and die.
+ * @param int   $status_code HTTP status code.
  */
-function wp_send_json_error( $data = null ) {
-	$response = array( 'success' => false );
+function wp_send_json_error( $data = null, $status_code = 200 ) {
+	$response = array( 'success' => false, 'status_code' => (int) $status_code );
 
 	if ( isset( $data ) ) {
 		if ( is_wp_error( $data ) ) {
