authentication_errorAtualizado em .
Erros e rejeições
A API separa erros de validação, erros operacionais e rejeições fiscais. Quando a SEFAZ devolve uma rejeição conhecida, a camada de tradução tenta devolver uma mensagem mais humana para acelerar o suporte.
{
"ok": false,
"message": "Rejeição SEFAZ 533",
"error": {
"type": "sefaz_rejection",
"details": {
"status": "533",
"reason": "Total da BC ICMS-ST difere do somatório dos itens",
"hint": "Revise a base de cálculo ST item a item e o totalizador final da nota."
}
}
}
Tipos de erro da v1
validation_errorbusiness_rule_errornot_foundinternal_errorrate_limit_exceededRetry-After e reenvie com backoff.environment_mismatchallows_homologation na empresa (veja Empresas).subscription_overduequota_exceededplan_upgrade_requiredErros de payload e cadastro (antes de chegar à SEFAZ)
São a maior parte das falhas reais de integração. A nota nem chega a ser transmitida: a validação
acontece no /build, devolve 422 com validation_error e
não consome numeração nem gera risco de duplicidade. O rascunho continua lá para ser
corrigido e reenviado.
Cadastro da empresa emissora
legal_name, document, state_code, city_code, street, district, city_name e postal_code. Resolução: complete o cadastro em PATCH /v1/companies/{company} e reenvie o mesmo rascunho. O número do endereço fica fora da lista de propósito: endereço rural sem número é válido e vira S/N automaticamente.municipal_registration na empresa, ou remova o CNAE do cadastro se a empresa não tem inscrição municipal.Documento
number. Se você enviar número ou série no topo e dentro do payload, os dois valores precisam ser idênticos — a API não escolhe um deles em silêncio.Venda de mercadorias). Resolução: preencha nature_operation; é campo obrigatório do XML, não um rótulo interno.items ausente ou vazio. Resolução: envie ao menos um item; nota sem item não existe no leiaute.method: "01") que o cubra — caso contrário é erro de preenchimento, e a SEFAZ devolveria a Rejeição 869. Com billing (fatura/duplicata) a soma tem de bater exatamente.method, indicator, amount, description, paid_at, processed_document e card. A mensagem lista os válidos no próprio retorno.payments[].card com os dados da transação. A API bloqueia antes de transmitir justamente para evitar a Rejeição 391.Itens
ncm precisa existir na tabela vigente, senão a SEFAZ devolve a Rejeição 778.quantity e unit_price. unit_value, valor_unitario, price e qtd não são aceitos como apelido — o preço unitário decide a base de cálculo, e adivinhar o campo seria adivinhar imposto.taxes.icms.code com o CSOSN (ex.: 102, 500). Empresa do regime normal usa CST, não CSOSN — o campo é o mesmo, o domínio muda com o regime.purpose: 2) e na nota de ajuste (purpose: 3), onde o complemento pode ser só de imposto. Numa venda, é quase sempre defeito da integração.
Mensagem que não parece uma validação? Retornos como
Undefined array key "..." ou Return value must be of type DOMElement, null returned
não são regra fiscal: são falha interna nossa, e o certo é a API ter devolvido uma mensagem dizendo qual
campo faltou. Se aparecer, abra chamado com o public_id do documento — tratamos como defeito,
não como configuração do seu payload.
Rejeições SEFAZ comuns e como resolver
Consulte nosso Dicionário Interativo de Rejeições SEFAZ & NFS-e Nacional com buscador instantâneo de códigos (865, 869, 778, 539, 204, 610, 388, 805, 972, X800, E0116, E0084) e payloads JSON prontos para autocorreção.
Muitas vezes, a API retorna com sucesso técnico, mas o processamento na SEFAZ resulta em uma rejeição regulatória. Abaixo listamos as rejeições mais recorrentes e como seu sistema deve tratá-las:
numero) ou consulte o rascunho anterior para obter o XML da nota homologada.error.details.dispatch com action: authorize confere isso localmente antes de falar com a SEFAZ e devolve o documento já autorizado na hora (HTTP 200, sem nova tentativa) — veja Resiliência e Idempotência.-03:00).209), não cadastrada na UF (230), não vinculada ao CNPJ (231) ou declarada como ISENTO indevidamente (554). Resolução: confira state_registration no cadastro da empresa contra o Sintegra/Cadastro de Contribuintes da UF. Não reenvie o mesmo payload: nenhuma dessas se resolve por retentativa, e a API bloqueia o reprocessamento delas de propósito.733: o CFOP é de operação interestadual (série 6000), mas o destinatário está na mesma UF do emitente. Resolução: use CFOP da série 5000 para operação dentro da UF e 6000 para fora. A API deriva o idDest da UF do destinatário — o que precisa mudar é o CFOP do item.35 = SP, 33 = RJ). Confira recipient.address.city_code contra recipient.address.state_code.purpose: 4) precisa apontar a nota de origem. Resolução: informe a chave em referenced_documents. Quando a mensagem traz [nItem: N], a UF exige a referência por item, não só no cabeçalho — cada item devolvido carrega a chave da nota original.[nItem:N] indica qual item está errado.method: "01") que cubra o excedente. Pagamento eletrônico acima do total não é troco — é erro de preenchimento. A API já bloqueia a maioria desses casos antes de transmitir.aut_xml com o CNPJ/CPF autorizado. Não havendo escritório, a própria SEFAZ da Bahia orienta usar o CNPJ 13.937.073/0001-56. A API já aplica um padrão por UF quando o campo vem vazio.1115) ou com alíquota inválida para a UF (1026). Resolução: informe taxes.ibscbs no item, com cst de 3 dígitos e a classificação correspondente. As regras valem por data de competência — um payload que passava no mês anterior pode ser recusado depois da virada de vigência.Rejeições do Sistema Nacional da NFS-e
A NFS-e pelo padrão nacional tem códigos próprios, no formato E0nnn, devolvidos pelo
Sefin Nacional e não pela SEFAZ. Os mais recorrentes na integração:
E138. Resolução: o contribuinte precisa solicitar à prefeitura a liberação de acesso ao webservice de NFS-e para o CNPJ. Estar com o cadastro municipal ativo não concede esse acesso — no padrão Tinus ele é um pedido separado. Nenhuma alteração no payload contorna.settings.municipal_registration como string, preservando os zeros à esquerda — em Currais Novos são 7 dígitos (0070483, não 70483), e o cadastro costuma exibi-la sem eles. E141 é a inscrição não informada.aderenteEmissorNacional; aderenteAmbienteNacional em 1 diz apenas que ele recebe as notas, não que emite.service.national_tax_code tem 6 dígitos, mas não consta na lista nacional de serviços. Resolução: o código nacional não é o municipal sem os pontos — 14.01 corresponde a 140101, não a 140100. Use o código da lista nacional, com item, subitem e desdobramento.service.municipal_tax_code com 3 dígitos ou configurar settings.nfse_municipal_tax_code_default. Confirme o código municipal correto; ele não pode ser deduzido do nacional.mei declara Optante MEI, simples declara Optante ME/EPP, os demais Não Optante) ou fixe a situação em settings.nfse_simples_nacional_option com 1, 2 ou 3.service.total_tax_rate_sn no payload ou settings.nfse_total_tax_rate_sn no cadastro. Não é a alíquota de ISS: é a carga total da faixa do Simples na competência.service.approximate_tax_percentages com federal, state e municipal, de 0 a 100 e com ao menos um valor positivo. A plataforma gera o grupo pTotTrib e bloqueia a inconsistência antes do provedor.settings.nfse_municipal_registration_in_cnc = false no cadastro da empresa — ou, se a rejeição vier só de produção, settings.nfse_municipal_registration_in_cnc_producao = false, que preserva a homologação. O CNC é carregado por ambiente pelo município, e é comum o registro existir na produção restrita antes de existir em produção.settings.municipal_registration como string exatamente igual ao cadastro, preservando zeros à esquerda. A presença da tag de IM, sozinha, não garante a correspondência.tpEmit=1), o Sistema Nacional recupera nome e endereço do cadastro fiscal e não aceita que sejam enviados no documento. Resolução: não acrescente um bloco de emitente/prestador ao payload; a plataforma usa o cadastro da empresa e omite automaticamente os campos vedados.E0188), CPF inválido (E0206) ou CPF não encontrado no cadastro da Receita (E0207). Resolução: valide taker.document antes do envio.Rejeições de NFS-e com leiaute municipal próprio
Alguns municípios não usam o padrão nacional e mantêm webservice e códigos próprios. Aqui a origem da rejeição é a prefeitura, não o Sefin Nacional — e cada uma tem vocabulário diferente para a mesma ideia.
service.municipal_tax_code com o CTISS completo (ex.: 1401001, do código 1401-0/01). O item no formato 14.01 ou 1401 não substitui esse campo. Salvador também exige service.nbs_code, com 9 dígitos.taker.address.postal_code com 8 dígitos, só números, e confira se o CEP existe. CEP genérico de cidade costuma ser recusado.service.iss_withheld (ou defina como false) para esse enquadramento. A regra citada na mensagem — no caso, a IN 8/2013 — indica qual dispositivo municipal bloqueou.cTribNac exigindo [0-9]{6} — 01.05 é recusado, o correto é 010500 sem pontuação — e cTribMun exigindo [0-9]{3}, onde 0104 tem um dígito a mais. Envie só dígitos, no comprimento exato.Quando reenviar e quando não reenviar
A pergunta mais cara do suporte é sempre a mesma. O critério é a natureza da falha, não a pressa:
108, 109, X999, falha de conexão)209, 230, 231, 554, 805)422, validation_error)204, 539)Validação preventiva de parâmetros fiscais
A API valida parâmetros fiscais antes do envio sempre que a incompatibilidade puder ser identificada com segurança. Dados que alteram a identidade fiscal do documento não são reescritos silenciosamente.
- Série informada pelo integrador: A série recebida é preservada. Na NF-e normal, as faixas 890–899 e 900–999 são rejeitadas antes da criação do rascunho.
-
Modelo e emissão:
nfeexige modelo 55,nfceexige modelo 65 e a API pública atual aceita apenastpEmis=1. - Campos duplicados: se série ou número forem enviados no topo e no payload, os valores devem ser idênticos; a API não escolhe silenciosamente um deles.
- Sem garantia artificial: Validação e transmissão não garantem autorização; a decisão final e as regras fiscais pertencem à SEFAZ ou prefeitura responsável.
- Rastreabilidade: Rejeições e falhas ficam disponíveis no status, histórico de tentativas e eventos do documento.
Leitura prática
- Erros 4xx tendem a indicar payload inválido ou regra de negócio não atendida.
- Rejeições fiscais exigem revisão tributária ou estrutural do documento.
- Falhas transitórias devem ser tratadas pelo fluxo assíncrono e pelos webhooks.
Roteiro rápido para suporte e integração
- Validar se o token, a empresa e o certificado estao corretos.
- Checar
status,processing_statuserequested_action. - Ler
last_error_codeelast_error_message. - Se houver retorno SEFAZ, revisar o código e a tradução amigavel.
- Conferir tentativas, eventos e webhooks no painel da conta.
- So reenviar quando a causa estiver entendida.