Thanks to the comment by Sally CJ, it turned out that the issue was that the user was not authenticated when invoking admin-post.php via `wp_remote_post`. The simplest solution was to ensure that the wp_remote_post had all the current cookies, as follows: ``` $nonce = wp_create_nonce( 'my-action' ); foreach ( $_COOKIE as $name => $value ) { $cookies[] = "$name=" . urlencode( is_array( $value ) ? serialize( $value ) : $value ); } $url = admin_url( 'admin-post.php' ); $args = [ 'method' => 'POST', 'timeout' => 50, 'redirection' => 5, 'blocking' => true, 'headers' => [] , 'body' => [ 'action' => 'gpc_nightly_job', 'my_nonce' => $nonce ], 'headers' => [ 'cookie' => implode( '; ', $cookies ), ] ]; return wp_remote_post( $url, $args ); ``` EDIT: For increased security, I added a nonce to the request, which is checking in the long-running function via `wp_verify_nonce`.