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:
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
Usecrypto.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 aidempotencyKey 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
AidempotencyKey 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.