Conceitos

Conta, chave de API e empresas

Conceito O que é
Conta o seu sistema (o ERP) como cliente da API. Uma conta tem chaves de API e empresas
Chave de API credencial nfe_... da conta. Pode haver várias (uma por ambiente, por sistema...) e cada uma pode ser revogada sozinha
Empresa um CNPJ emitente, com regime tributário, endereço, inscrição estadual e certificado digital A1 próprios. Uma conta pode ter várias

Uma chave só enxerga as empresas da própria conta. Se o seu ERP atende várias lojas (ou vários CNPJs), cadastre cada CNPJ como uma empresa e diga qual emite em cada chamada com cnpj_emitente. Quem tem uma única empresa pode omitir o campo.

Ambiente: homologação e produção

Cada empresa está em um de dois ambientes:

  • Homologação: a SEFAZ de teste. As notas não têm valor fiscal, têm numeração própria e levam o texto obrigatório de homologação. É onde toda empresa nasce.
  • Produção: notas reais, com valor jurídico. A troca é por PUT /empresas/{cnpj}/ambiente e só libera com certificado válido, inscrição estadual e as tabelas fiscais da plataforma validadas (detalhes).

As notas ficam presas ao ambiente em que foram emitidas. Ao passar para produção você pode reaproveitar as mesmas ref: na produção elas começam do zero. As consultas olham sempre o ambiente atual da empresa.

A ref: identificador da nota e proteção contra duplicidade

Toda emissão leva uma ref na URL (POST /nfe?ref=PEDIDO-1001). É um texto seu, de 1 a 60 caracteres (letras, números, ponto, hífen e sublinhado), único por empresa e ambiente. Use o identificador da venda no seu sistema.

A ref faz três coisas:

  1. Idempotência. Se a rede cair e você repetir o POST com a mesma ref e o mesmo conteúdo, recebe o estado da nota que já existe, sem emitir outra. É seguro repetir à vontade.
  2. Consulta. Você acompanha e opera a nota por ela: GET /nfe/{ref}, DELETE /nfe/{ref}...
  3. Correção. Uma nota rejeitada pela SEFAZ aceita o reenvio corrigido na mesma ref, com o mesmo número fiscal.

Detalhes das regras de reenvio em Emitir NF-e.

Estados da nota

O campo status da nota é um destes:

status Significa É final?
processando_autorizacao aceita pela API e na fila, ou enviada e aguardando a SEFAZ não
autorizado a SEFAZ autorizou: a nota existe e vale sim (aceita eventos)
erro_autorizacao a SEFAZ rejeitou. status_sefaz, mensagem_sefaz e mensagem dizem por quê. Corrija e reenvie na mesma ref não (reenviável)
erro_validacao parou por uma pendência de cálculo ou cadastro, antes de chegar à SEFAZ. mensagem diz o que corrigir. Reenvie na mesma ref não (reenviável)
denegado a SEFAZ denegou o uso (problema fiscal do emitente ou do destinatário): o número foi consumido e a nota não vale sim
cancelado o cancelamento foi registrado sim
inutilizado o número da nota foi inutilizado: ela nunca existiu na SEFAZ sim
                 ┌─────────────── erro_autorizacao ◄──────┐
                 │               erro_validacao           │ (reenvio corrigido, mesma ref)
 POST /nfe ─► processando_autorizacao ─► autorizado ─► cancelado
                 │                                   (DELETE /nfe/{ref})
                 └─────────────► denegado

O que é síncrono e o que não é

A API valida na hora tudo o que dá para validar sem a SEFAZ e responde 422 antes de gastar um número da série: formato, campos que faltam, tributos que o motor não consegue calcular, totais que não fecham, certificado vencido, produção bloqueada. Quando o POST /nfe responde 202, a nota foi aceita e já tem número reservado.

Daí em diante tudo o que depende da SEFAZ é assíncrono: emitir, cancelar, corrigir e inutilizar respondem 202 e o resultado chega depois. Você escolhe como saber dele:

  • Webhook (recomendado): a plataforma chama o seu endereço a cada mudança de estado. Veja Webhooks.
  • Consulta (polling): GET /nfe/{ref} até o status ficar final. Comece a cada 2 segundos e aumente o intervalo.
  • Os dois juntos: webhook para reagir rápido e uma consulta periódica das notas pendentes como rede de segurança. É o que recomendamos em produção.

O que a plataforma calcula por você

Você informa a venda (destinatário, itens, valores, pagamento). A plataforma:

  • calcula ICMS, DIFAL, FCP, PIS, COFINS, IPI e IBS/CBS conforme o regime da empresa e a operação, e define o CFOP;
  • monta o XML no leiaute oficial, assina com o certificado da empresa e valida contra o XSD;
  • reserva o número da NF-e em sequência, sem buracos nem duplicidade, mesmo com várias lojas emitindo ao mesmo tempo;
  • envia, trata as respostas da SEFAZ (inclusive timeouts: antes de reenviar ela consulta a chave, para nunca emitir uma nota duplicada) e gera o DANFE.

Se o seu ERP já calcula os tributos, você pode informá-los por item (CFOP, situação tributária, alíquotas) e a plataforma passa a usar o que você mandou: é o modo híbrido. Os valores de imposto (base de cálculo, valor do ICMS...) são sempre calculados pela API.

Responsabilidade fiscal: os parâmetros que você informa valem mais que as regras da plataforma, e a responsabilidade por eles é sua. Cenários que o motor ainda não cobre (por exemplo ICMS-ST como substituto) são recusados com 422 validacao_fiscal, em vez de a plataforma "chutar".

Vem do Focus NFe?

A API segue o mesmo estilo (chave por HTTP Basic ou Bearer, ref na query, items[], nomes como nome_destinatario e codigo_ncm, cnpj_emitente, DELETE /nfe/{ref} com justificativa, POST /nfe/inutilizacao), então boa parte de um cliente já escrito para ele pode ser reaproveitada. Mas não é um clone: confira estas diferenças antes.

Assunto Aqui
Cancelar e inutilizar assíncronos: respondem 202 e o estado muda depois (GET /nfe/{ref} ou webhook). Não esperam a SEFAZ
Cancelar exige "confirmo": true (afirma que a mercadoria não saiu)
Campo desconhecido recusado com 422 e o caminho do campo. Nunca ignorado em silêncio
Valores de imposto (icms_valor, pis_valor...) recusados: a API calcula os valores a partir dos parâmetros que você informa (modo híbrido)
valor_total opcional, mas se vier a nota só sai se o total calculado fechar com ele
Campos centrais conferem com o estilo do Focus. Os demais (pagamentos, intermediador, parâmetros fiscais além da situação tributária) são desta API, no mesmo estilo: use Emitir NF-e como contrato, não a documentação de outro serviço
Estados e códigos status e codigo de erro são os desta documentação (estados, erros)