Removing a field from a core endpoint, or renaming one, has no registration API — the filter on the prepared response is the only hook, and it runs after everything else.
add_filter( 'rest_prepare_post', function ( $response, $post, $request ) {
$data = $response->get_data();
unset( $data['guid'], $data['ping_status'] );
$response->set_data( $data );
return $response;
}, 10, 3 );
Removing fields from a public API is a breaking change for anything already consuming it, which is the argument for doing this on a namespace you own rather than on wp/v2. Where it is genuinely right — stripping a field that leaks internal structure — the filter runs for every context, so a field removed here disappears from the editor as well.