We noticed approximately 1 year ago that PATCH requests made to https://groups.roblox.com/v1/groups/${group}/users/${target} (in order to set a user’s rank in a group) will intermittently fail, and instead of returning an error code or success status will instead time out or return an empty response. Repeating the same request will eventually resolve the issue.
Reproducing this requires some form of API that sets user ranks on a semi-frequent basis (we use noblox.js, but have verified this library is not responsible) as it seems to occur only on a subset of requests for a period of time. Our solution was to use a Task Queue to programmatically retry rank requests until successful or a valid exception is thrown.
Expected behavior
Hitting rate limits should return a 429 Too Many Requests status code, and invalid data / other errors should return an HTTP status code other than 200 OK.
I have observed in many cases the API actually does not time out or return any response, but simply leaves the connection open! noblox.js is based on a deprecated request module and for some reason the client timeout implementation does not work, which means requests fail while showing no errors because the connection remains open indefinitely since Roblox does not close it either. I noticed this in my own implementation using axios when I accidentally forgot to set a timeout parameter (oops!), and since there is no default timeout parameter the open requests were piling up until the app crashed and restarted. I started to notice this behavior around the beginning of 2023, but that was only when the bug resulting from this behavior was reported so it could have existed even sooner.
Strangely, when this occurs the API is unreachable for that specific group/user even after retries for over 30 seconds (sometimes even a few minutes) while other requests to the API work fine.