What's the best way to automatically create a future service request?

I understand how to schedule a service request for the future manually, but in this case I'm trying to automate the creation of a future service request (currently using the api, unless there is a better way).

Here's the scenario
User completes a specific service request for access to a system.  In this form, the user can specify if the access should be permanent or temporary.
We then use a condition in the process to say - if temporary, use a process integration with the api to create another service request based on a separate template for "Remove access to xyz system" with a due date of the date specified for removal of access, and the api also indicates the system and the user to remove.
This all works well, but that future removal of access could be months or years in the future, and we don't really want it hanging around affecting metrics and SLAs and such until it's really needed.  We can modify the status of the removal request to "on hold", but then it doesn't fire notifications/reminders or SLA breaches like a normal service request would.  What we'd like is that a few days before it comes due, we'd like a notification sent to the assignee to complete the work, or have it assigned/modified in such a way to trigger standard notifications.  I've noted that while we can create a service request with the API (and have this working), I see no way in the documentation to actually create a scheduled service request via the api, which would solve our problem.  Or maybe there is and I just don't see it or am thinking about it wrong?

Alternatively, we could just have the process include a task for the assignee to go and create the removal request manually themselves, but we're trying to automate as much as possible to reduce the chance of the removal of access getting missed.  Another alternative would be that an outside system tracks this and creates the service request x days in advance as it approaches, but that kind of defeats the purpose as we're trying to accomplish this natively within Service Desk.

Any ideas?