2026-09-12
v0.23.3 — Sua chave de idempotência agora manda
A trava contra cobrança repetida existe desde a v0.21.1 e funciona: se a mesma pessoa, no mesmo produto, pelo mesmo meio e no mesmo valor aparece duas vezes em 60 segundos, a segunda não vira uma cobrança nova.
Só que ela estava ignorando um sinal seu.
Quem integra pela API pode mandar o cabeçalho X-Idempotency-Key em cada
cobrança. Ele serve justamente para dizer o que é a mesma operação e o que não é:
repetir a chave significa "é a mesma compra, não cobre de novo"; mandar uma chave
nova significa "esta é outra compra".
A trava não estava olhando para isso. Se você mandasse uma chave nova e diferente — dizendo com todas as letras que era outra venda — e por acaso fosse o mesmo cliente, no mesmo produto, no mesmo valor, dentro de 60 segundos, a API respondia 200 com a cobrança anterior.
Não é um erro que aparece. Você recebia sucesso, só que a segunda venda nunca existiu. Quem vende duas vagas no mesmo curso para a mesma pessoa, ou dois meses do mesmo plano em sequência, fechava o dia com uma cobrança a menos do que a conciliação dizia — e sem nada no log apontando para isso.
Quando você manda uma chave de idempotência, ela passa a fazer parte da identidade da cobrança. Na prática:
Se você já manda X-Idempotency-Key derivado de algo estável do seu lado — o id
do pedido, o id da reserva — não precisa fazer nada: passou a funcionar como você
já esperava.
Se você ainda não manda, vale passar a mandar. É o que torna uma repetição de chamada segura, e agora também é como você diz que duas vendas parecidas são mesmo duas vendas.
X-Idempotency-Key: pedido:4472:cobranca
Um aviso que vale repetir: a chave só protege se a mesma chave voltar na repetição. Chave sorteada a cada chamada não protege de nada — foi exatamente isso que causou a cobrança tripla de setembro. Nossos SDKs não fazem mais isso.