O débito acontece na criação — e é fail-closed
Os tokens são debitados no momento doPOST, antes de o motor rodar. A confirmação varia por motor:
- CPF/CNPJ (
POST /analyses): a resposta202 Acceptedconfirma o débito com os campostokens_charged(quanto foi debitado) ebalance(saldo após o débito), informados em melhor esforço — se a consulta de saldo falhar no momento da resposta, os campos podem estar ausentes, o que não altera a cobrança em si. - Borderô (
POST /operations): a cobrança acontece normalmente na criação, mas não aparece no payload — a resposta 202 traz apenasoperation_id,statusecreated_at. Acompanhe débitos e estornos no extrato de tokens do workspace, no app Sherlocker.
POST falha com 402 insufficient_tokens e nada é cobrado nem executado — o erro traz os campos required e balance para você saber quanto falta. Requisições rejeitadas com qualquer erro (400, 401, 402, 403, 409, 422) nunca cobram.
Quanto custa em cada motor
- CPF/CNPJ
- Borderô
Cada
Uma análise que termina
POST /analyses debita o preço de uma análise:completed cobra sempre, inclusive verdict incompleto
Uma análise que termina completed é cobrada sempre, mesmo quando o verdict é incompleto. O motivo: o motor executou o trabalho (rodou todos os blocos da engine) e incompleto significa apenas que uma ou mais fontes de dados externas ficaram indisponíveis durante a execução.Nesse caso, use o campo coverage da resposta do GET /analyses/{id} para ver exatamente quais fontes falharam (coverage[].status: "failed") e quais foram consultadas. Veja Ciclo de vida.Estorno automático em failed
Nos dois motores: se o processamento terminar com status: "failed" (falha interna do motor), os tokens debitados na criação são estornados automaticamente. O estorno é assíncrono — ele não aparece no body do GET, mas fica registrado no extrato de tokens do workspace no app Sherlocker.
Replay idempotente não cobra
Reenviar oPOST com a mesma Idempotency-Key e o mesmo conteúdo dentro da janela de 24 horas retorna 200 OK com o body original da 202 — sem nova cobrança. É por isso que, em retries de timeout ou erro de rede, você deve reusar a mesma key. Veja Idempotência.
Resumo: cenário × cobrança
Saldo e recarga
O saldo de tokens e a recarga (top-up) são gerenciados no app Sherlocker: a API/v1 compartilha o mesmo pool de tokens do workspace. O extrato do workspace no app mostra os débitos por análise/operação e os estornos de runs failed.
Próximos passos
Idempotência
Retry seguro sem risco de cobrança dupla
Ciclo de vida
Status, verdicts e o campo coverage
Erros
Formato RFC 7807 e o erro insufficient_tokens