Does WordPress provide an API for scheduling posts?

There isn’t really an API for it, because from usage perspective it is quite simple.

If data passed to wp_insert_post() has publish or future value in post_status field and date in the future then it is inserted in database with that date and future in post_status. Effectively it is already considered scheduled.

However something would need to happen to make that post published on that date, so this sets in motion several more pieces of code:

  1. When wp_insert_post() is done it calls wp_transition_post_status().

  2. Which executes several hooks, including "{$new_status}_{$post->post_type}" which unwraps to something like future_post.

  3. When post type is registered by register_post_type() it adds _future_post_hook() function to 'future_' . $post_type hook and so it executes.
  4. That function creates single WP-Cron schedule at the date of post, post’s ID in data and name of publish_future_post.
  5. That schedule name has check_and_publish_future_post() function hooked to it, that on run checks if post by that ID is scheduled and up to be live and if so flips its status to published using wp_publish_post().

So the simplest way to create scheduled post is to just follow native mechanics and create it with wp_insert_post(), while passing future date.