Idempotência
A idempotência evita que uma mesma intenção de operação seja processada mais de uma vez quando a requisição precisa ser reenviada.
Na prática, isso significa que você pode repetir uma chamada de criação com a mesma idempotencyKey sem gerar uma nova operação duplicada.
Para que serve
Use idempotência sempre que houver chance de a mesma requisição ser enviada novamente por motivo técnico, como:
- timeout na resposta
- falha momentânea de rede
- retry automático do cliente HTTP
- reenvio manual da mesma chamada
Esse comportamento é especialmente importante em operações financeiras, porque evita que o integrador crie duas transações, dois depósitos ou dois saques por acidente.
Como usar
O fluxo recomendado é simples:
- gere uma
idempotencyKeyúnica para a operação - envie essa chave junto com a requisição de criação
- se a mesma operação precisar ser reenviada, reutilize a mesma chave
- se for uma operação nova, gere uma nova chave
Se a intenção de negócio é a mesma, reutilize a mesma idempotencyKey.
Se a intenção mudou, crie uma chave nova.
O que a plataforma faz
Do ponto de vista de quem integra, a plataforma reconhece que a mesma chave representa a mesma operação dentro do mesmo contexto da integração.
Isso permite que um retry não vire uma nova operação por engano.
Se a primeira tentativa ainda estiver em processamento, a segunda chamada pode aguardar o resultado da operação original antes de responder.
idempotencyKey vs externalCode
Esses dois campos têm papéis diferentes:
idempotencyKey: identifica uma tentativa única de operação e protege contra duplicidade técnicaexternalCode: é a sua referência de negócio para localizar a operação no seu sistema
Eles podem ser usados juntos, mas um não substitui o outro.
Quando gerar uma nova chave
Gere uma nova idempotencyKey quando:
- o pedido mudou
- o valor mudou
- o destinatário mudou
- a operação é outra, mesmo que pareça parecida
Não reutilize a mesma chave para intenções diferentes.
Exemplo prático
Primeira tentativa
{
"amount": 500,
"paymentMethod": "PIX",
"externalCode": "PEDIDO-123",
"idempotencyKey": "b7f9c2d8-8f59-4a55-8c3c-8a6a4f9d1f2d"
}
Retry da mesma operação
Se a chamada anterior não teve resposta clara, reenviando o mesmo payload com a mesma idempotencyKey a plataforma deve tratar isso como a mesma operação.
{
"amount": 500,
"paymentMethod": "PIX",
"externalCode": "PEDIDO-123",
"idempotencyKey": "b7f9c2d8-8f59-4a55-8c3c-8a6a4f9d1f2d"
}
Boas práticas
- use a
idempotencyKeynosPOSTde criação - mantenha a mesma chave enquanto estiver tentando concluir a mesma operação
- gere uma chave nova para cada nova intenção de negócio
- não use a chave como substituta de
externalCode - trate timeout e retry do seu cliente como cenários esperados
Onde isso é aplicado
Na nossa API, esse conceito aparece principalmente nos endpoints de criação:
Em resumo
Idempotência é o que permite reexecutar a mesma intenção sem criar duplicidade.
Para o integrador, a regra principal é:
- mesma operação, mesma
idempotencyKey - operação nova, nova
idempotencyKey