Your retry loop assumes the first request failed. It probably didn't.
A timeout or crash does not mean your API request was lost.
Your service crashes halfway through a request. The client sees a timeout and retries. You now have two charges. The customer is angry. The database is…