You are using name in your terms. In default, try to use the existing term id ( in your case, cat ID and tag ID ).
If you see https://plugins.trac.wordpress.org/browser/rest-api/trunk/lib/endpoints/class-wp-rest-posts-controller.php#L918 they will handle your term with sanitize them into non-negative integer using absint
. I hope this help.
Here example code to hook rest_insert_{$this->post_type}
to create terms ( tags and categories ) and set into post after post ID created by wp_insert_post
. Note: tags and category request are in name array as OP sample code.
add_action( 'rest_insert_post', 'wpse220930_rest_insert_post', 1, 3 );
function wpse220930_rest_insert_post( $post, $request, $update = true )
{
if ( ! empty( $request['tags'] ) )
wp_set_object_terms( $post->ID, $request['tags'], 'post_tag', $update );
if ( ! empty( $request['categories'] ) )
wp_set_object_terms( $post->ID, $request['categories'], 'category', $update );
}