POST /analyses) ou uma operação de borderô (POST /operations) — é processado de forma assíncrona e passa pela mesma forma de máquina de estados: aguardando → executando → terminal. O que muda é o vocabulário público de cada motor. Esta página explica os estados, o polling e, por motor, o que cada campo do resultado significa.
Os Motores usam a mesma base da API 221b (
https://221b-api.sherlocker.com.br/api/v1), mas autenticam via Authorization: Bearer slhk_… — não via ?token=.Máquina de estados
O campostatus passa por dois estados não-terminais e um terminal, com nomes diferentes em cada motor:
Trate
failed como possível a partir de qualquer estado não-terminal: um run que expira ainda aguardando (sem chegar a executar) também termina em failed.
Respostas terminais (completed/failed) são estáveis — o resultado não muda depois de pronto. O estorno em failed é automático nos dois motores (veja Cobrança).
Polling
Consulte o resultado comGET /analyses/{id} ou GET /operations/{id}. A indicação de intervalo difere por motor:
- CPF/CNPJ: enquanto o run não é terminal, a resposta traz o campo
poll_after_seconds: 2no body e o headerRetry-After: 2. Quando o status é terminal, campo e header deixam de aparecer. - Borderô: não há campo de intervalo nem header
Retry-After— consulte a cada ~2 segundos atécompletedoufailed.
Boas práticas
- Respeite o rate limit: 100 requisições por minuto por IP. Exceder retorna
429. - Use o intervalo indicado (2 segundos) entre consultas, em vez de um valor fixo próprio.
- Pare no estado terminal:
completedefailedsão finais; não há transição depois deles. - Consultar um
idinexistente ou de outro workspace retorna404 not_found— veja Erros.
O resultado de cada motor
- CPF/CNPJ
- Borderô
Verdicts
Overdict resume o resultado da análise. Ele só existe quando a análise termina em completed; em pending, running e failed ele é null.Status de bloco
Cada item deblocks[] traz o resultado de uma verificação individual (ex.: SITUACAO_CADASTRAL_CNPJ, SANCAO_NACIONAL). O catálogo completo está em Blocos.Cada bloco pode trazer
evidence[] com itens no formato {field, value, expected, result} (ex.: result igual a divergent ou match).Coverage
O campocoverage[] mostra, por fonte de dados consultada, se a busca funcionou:Quando os campos deixam de ser null
Enquanto a análise está em pending ou running, verdict, blocks, coverage e finished_at são null. Os campos de resultado são preenchidos de uma vez quando a análise chega a completed — não há resultado parcial. Em failed, verdict, blocks e coverage permanecem null (apenas finished_at é preenchido) e os tokens são reembolsados.Exemplo: em andamento
GET /analyses/{id} com a análise ainda em running retorna 200 com header Retry-After: 2:Exemplo: concluída
tokens_charged e balance aparecem na resposta quando disponíveis.Próximos passos
Cobrança
Débito na criação e estorno automático em failed
Idempotência
Retries seguros e resolução de conflitos 409
Blocos (CPF/CNPJ)
Catálogo dos blocos de verificação e seus grupos
Títulos e NFe (Borderô)
O shape do título na árvore do resultado e o campo nfe_chave