"The time for making this call doesn't matter."
Then why not just let the clients call the API ?
"I want to ensure that the request calls from devices are randomly distributed so as to balance the load on the server."
You cannot randomly distribute calls which has not yet been activated - that would be controlling the future.
From your question I understand you like to
I want to make sure that the request calls from devices are as randomly distributed so as to make the load on the server as even as possible.
So I would start with giving each device the ability to randomly select the time it should contact the server, and not enforcing this on the server side.
You like your ...
You are essentially trying to hash a lot of devices into very few buckets (time slots). You are guaranteed to have some collisions.
I mean, even mathematically: with 50k starting devices and even utilizing the entire 24 hours in a day, you'll get at most 1.728 seconds to service each device.
Also, there are a lot of things that can happen, which will cause a ...