Skip to main content
Esta página cobre dois tipos diferentes de erro que você pode encontrar ao integrar com a API da Spedy: erros HTTP da API (a chamada em si falhou) e rejeições fiscais (a chamada funcionou, mas a SEFAZ ou a prefeitura recusou a nota). Tratá-los como a mesma coisa é a causa mais comum de integrações que fazem retry do jeito errado — veja a diferença logo abaixo.

Erros HTTP da API

Erros HTTP acontecem na própria chamada — a requisição não foi aceita para processamento. A resposta traz uma mensagem de erro no corpo explicando o problema.
O corpo do erro ainda não tem um schema padronizado no OpenAPI — a mensagem descreve o problema, mas o formato exato pode variar por endpoint. Os códigos 401, 404, 422 e 500 também ainda não são padronizados pela API; serão adicionados e documentados aqui conforme forem padronizados. Trate qualquer código fora da lista acima como um erro genérico até a padronização ser publicada. Veja também Erros e respostas.

Rejeições fiscais (SEFAZ/Prefeitura)

Uma rejeição fiscal é diferente de um erro HTTP: a requisição de emissão foi aceita (resposta 2xx, nota criada com status enqueued), mas a autoridade fiscal — SEFAZ ou prefeitura — recusou a nota durante o processamento assíncrono. Isso nunca chega como um erro HTTP; a nota é atualizada para status: "rejected" e o motivo fica em processingDetail.
Confira o resultado por webhook (invoice.rejected ou invoice.status_changed) ou consultando a nota (GET /v1/{modelo}-invoices/{id}). Veja Ciclo de vida da nota para a máquina de estados completa.

O objeto processingDetail

Toda nota traz o resultado do último processamento (emissão, cancelamento, carta de correção etc.) no campo processingDetail: Exemplo de nota rejeitada (o code abaixo é ilustrativo):

Rejeição da SEFAZ vs. rejeição interna da Spedy

O code diz a origem, com o mesmo formato em processingDetail:
  • SEFAZ/Prefeitura — a nota chegou até a autoridade fiscal e foi recusada por ela (schema, regra de negócio, cadastro divergente etc.). O code traz o código da própria autoridade (numérico; ou E9999 para uma rejeição genérica sem código mapeado). A causa e a solução estão no processingDetail.message — a fonte canônica é a tabela oficial de rejeições da SEFAZ da UF/município.
  • Spedy — validações e estados que a Spedy resolve sem transmitir (ou antes de ter o retorno definitivo) usam o prefixo SPD no code. Estão documentados abaixo.

Códigos internos da Spedy (SPD)

Quando o code começa com SPD, a recusa (ou o estado transitório) veio da própria Spedy, não da autoridade fiscal:
SPD998 e SPD999 são erros técnicos, não rejeições da autoridade fiscal — a nota não foi necessariamente recusada. Não reemita por conta própria ao receber esses códigos: a Spedy já reprocessa o que for cabível, e reemitir manualmente pode gerar nota duplicada. Acompanhe o estado final da nota por webhook ou consulta.
Recebeu uma rejeição da autoridade (sem prefixo SPD) que não entendeu? O processingDetail.message traz o texto original da SEFAZ/prefeitura — é a fonte mais confiável. Encaminhe o code e o message ao suporte da Spedy se precisar de ajuda para interpretar.

Veja também