Tu bucle de reintentos asume que la primera petición falló. Probablemente no lo hizo.
Un timeout o un crash no significan que tu petición a la API se haya perdido. Aquí te explicamos cómo las idempotency keys hacen seguros los reintentos, y el patrón de almacenamiento que realmente previene duplicados.