Skip to main content

O que é idempotência?

Idempotência garante que uma operação produza o mesmo resultado independentemente de quantas vezes seja executada, desde que os mesmos parâmetros sejam usados. Em pagamentos, isso é essencial para evitar cobranças duplicadas em cenários como:
  • Timeouts — a requisição foi enviada mas a resposta não chegou
  • Retries automáticos — o SDK ou seu cliente tentou novamente após um erro
  • Falhas de rede — a conexão caiu antes de receber a confirmação
  • Double-submit — o usuário clicou duas vezes no botão “Pagar”

idempotencyKey como cidadão de primeira classe

No pagamentos.dev, a idempotencyKey é um campo obrigatório em todas as operações de mutação — criar, atualizar e cancelar. Ela é passada diretamente no payload da requisição, junto com valor e metodoPagamento:
A idempotencyKey é repassada ao provedor de pagamento de acordo com o mecanismo suportado por cada um:

Como funciona na prática

Gere a chave antes de chamar a API

A chave deve ser gerada no cliente (frontend ou serviço que inicia a requisição) e armazenada para uso em retentativas:

Em operações de update e cancel

Boas práticas

1. Sempre gere uma chave única por operação

Use crypto.randomUUID() (disponível em Node.js, Bun e navegadores modernos) para gerar chaves. Nunca reutilize a mesma chave para operações diferentes.

2. Armazene a chave para retentativas

Salve a idempotencyKey no seu banco de dados junto com a transação. Se a requisição falhar por timeout, você pode retentar com a mesma chave com segurança.

3. Trate erros de forma idempotente

Em caso de timeout ou erro de rede, retente a operação com a mesma chave. O provedor (Woovi/Mercado Pago) detectará a chave repetida e retornará o resultado original.

Referência

A idempotencyKey está disponível nos seguintes tipos de input:
A idempotencyKey é opcional em todos os tipos, mas fortemente recomendada para operações de criação e atualização. Sem ela, retentativas podem gerar duplicatas.