Operações de escrita (POST/PUT/PATCH) que envolvem movimentação financeira exigem uma chave de idempotência para evitar processamento duplicado em caso de retries de rede.
Como funciona
- O cliente gera um identificador único (UUID) para cada operação.
- Envia o valor no cabeçalho
IdempotencyKey.
- A Delfinance armazena a resposta associada a essa chave por 24 horas.
- Qualquer requisição subsequente com a mesma chave retorna a resposta original, sem executar a operação novamente.
- Tipo: UUID v4 recomendado.
- Tamanho: máximo 64 caracteres.
- Escopo: único por operação (não reutilize para requisições diferentes).
Exemplo de uso
curl -X POST https://apisandbox.delbank.com.br/v1/payments \
--cert ./certificado.crt \
--key ./chave-privada.key \
-H "Authorization: Bearer eyJhbGciOi..." \
-H "Content-Type: application/json" \
-H "IdempotencyKey: 550e8400-e29b-41d4-a716-446655440000" \
-d '{
"valor": 100.00,
"destinatario": "12345678900"
}'
import { randomUUID } from 'crypto';
const idempotencyKey = randomUUID();
await axios.post(
'https://apisandbox.delbank.com.br/v1/payments',
{ valor: 100.0, destinatario: '12345678900' },
{
headers: {
Authorization: `Bearer ${accessToken}`,
IdempotencyKey: idempotencyKey,
},
httpsAgent: agent,
}
);
import uuid
idempotency_key = str(uuid.uuid4())
requests.post(
"https://apisandbox.delbank.com.br/v1/payments",
cert=("./certificado.crt", "./chave-privada.key"),
headers={
"Authorization": f"Bearer {access_token}",
"IdempotencyKey": idempotency_key,
},
json={"valor": 100.00, "destinatario": "12345678900"},
)
Comportamento
| Cenário | Comportamento |
|---|
| Primeira requisição com a chave | Executa a operação e armazena a resposta |
| Requisição repetida com payload idêntico | Retorna a resposta armazenada (não reprocessa) |
| Requisição repetida com payload diferente | Retorna erro 409 Conflict |
| Requisição após 24 horas | Chave expirada, operação é executada novamente |
Endpoints que exigem idempotência
POST /v1/payments
POST /v1/transfers
POST /v1/refunds
POST /v1/pix
Endpoints de consulta (GET) são naturalmente idempotentes e não exigem o cabeçalho.
Estratégia de retries
Gere a chave uma única vez
Antes da primeira tentativa, gere e persista a chave.
Reutilize em retries
Em falhas de rede ou timeouts, envie a mesma chave.
Aplique backoff exponencial
Aguarde 1s, 2s, 4s, 8s entre tentativas.
Limite de tentativas
Máximo de 5 retries. Após isso, escale o erro.
Nunca gere uma nova chave de idempotência em retries — isso pode causar duplicação de operações financeiras.
Erros relacionados
| Código | Descrição |
|---|
400 missing_idempotency_key | Cabeçalho ausente em endpoint obrigatório |
409 idempotency_conflict | Chave reutilizada com payload diferente |
422 invalid_idempotency_key | Formato inválido (não UUID) |