O payload não seria igual, pois é necessário ter um ID distinto para cada transação. Veja na documentação da Stripe, por exemplo, o “idempotencyKey”. Esse identificador é gerado sempre que uma nova transação ocorre. Se você enviar uma request e ela falhar, por exemplo, devido a um timeout, ao tentar novamente, esse ID não será alterado. No entanto, se você mudar esse ID, uma nova operação será criada. O cliente é responsável por enviar a chave, pois é ele quem realiza o retry.
const stripe = Stripe('sk_test_Ho24N7La5CVDtbmpjc377lJI');
const customer = await stripe.customers.create(
{
description: 'My First Test Customer (created for API docs at https://docs.stripe.com/api)',
},
{
idempotencyKey: 'KG5LxwFBepaKHyUD',
}
);