Idempotency-Key resolve isso: ele permite refazer uma requisição quantas vezes forem necessárias com a garantia de que o Therius a processará exatamente uma vez.
Como funciona
Todos os endpoints que alteram dados aceitam um cabeçalho de requisiçãoIdempotency-Key:
POST /payment/purchasePOST /payment/authorizationPOST /payment/{id}/capturePOST /payment/{id}/refundPOST /payment/{id}/cancelPOST /payment/{id}/cancel_or_refundPOST /payment/resumePOST /subscriptionPOST /subscription/usage— veja a nota abaixo; a semântica difere um pouco
- Primeira requisição — o Therius reserva a chave, processa o pagamento e armazena a resposta
2xxassociada à chave. - Nova tentativa com a mesma chave — o Therius detecta a duplicata, pula o processamento e retorna a resposta em cache imediatamente.
- Requisição concorrente com a mesma chave — se uma segunda requisição com a mesma chave chega enquanto a primeira ainda está em andamento, o Therius retorna
409 Conflictcom um cabeçalhoRetry-After: 1. Aguarde um segundo e tente novamente. - Endpoint errado, mesma chave — reutilizar uma chave em um endpoint diferente retorna
422 Unprocessable Entity.
Somente respostas
2xx são armazenadas em cache. Se uma requisição falha com um status 4xx ou 5xx, a chave não é armazenada — você pode tentar novamente com uma chave nova (ou a mesma chave, se o erro foi transitório e você quer refazer a mesma operação).POST /subscription/usage também lê o header Idempotency-Key, mas é deduplicado por (meterCode, Idempotency-Key) e nunca expira: uma repetição devolve o evento de uso original com "duplicate": true em vez de uma resposta HTTP em cache. Ali a chave é opcional — se você omitir, cada chamada registra um novo evento.Exemplos de código
Bash / cURL
$IDEM_KEY. O Therius retornará o resultado em cache se a requisição original tiver tido sucesso.
JavaScript
fetch lançar um erro de rede, recupere o UUID armazenado e tente novamente com ele — não gere um novo.
Boas práticas
- Gere a chave antes da requisição, não depois. Armazene-a com o registro do pedido para poder recuperá-la se precisar tentar novamente.
- Um UUID por operação lógica. Uma compra e o reembolso posterior são duas operações distintas — cada uma recebe seu próprio UUID.
- Não reutilize chaves entre endpoints. Uma chave usada para
POST /payment/purchasenão pode ser usada paraPOST /payment/{id}/refund. - Não compartilhe chaves entre clientes ou pedidos. Cada chave deve ser globalmente única para uma única operação.

