Pular para conteúdo

FocusNFE

O adaptador FocusNFE reproduz o contrato do provedor: os mesmos caminhos, os mesmos corpos e os mesmos códigos. Migrar é trocar o endereço base e a credencial.

Estas páginas cobrem apenas o que muda. Tudo o que é idêntico continua descrito na documentação do próprio FocusNFE, e não reescrevemos nada disso de propósito. O texto duplicado divergiria do original com o tempo, e você teria duas fontes que discordam sobre a mesma rota.

  • Guia de migração — para onde apontar, como autenticar e um curl ponta a ponta: emissão, consulta e cancelamento.
  • Compatibilidade — o que o adaptador aceita, o que ele recusa e onde ele diverge do provedor, item a item.
  • Referência — contrato completo, gerado a partir do código.

Superfície atendida

Rota O que faz
POST /v2/nfce?ref= Emite um documento
GET /v2/nfce/{ref} Consulta, com completa=1 opcional
DELETE /v2/nfce/{ref} Cancela
POST /v2/nfce/{ref}/email Envia o documento por e-mail
POST /v2/nfce/inutilizacao Inutiliza uma faixa de numeração
GET /v2/nfce/inutilizacoes Lista inutilizações
POST /v2/hooks · GET /v2/hooks · GET/DELETE /v2/hooks/{id} Gatilhos (webhooks)
GET /arquivos/… · GET /notas_fiscais_consumidor/… Arquivos, sob o mesmo formato de caminho do provedor

O que não está nesta lista não está implementado nesta versão. ECONF, os endpoints do produto "NFC-e local", a API de empresas e a superfície de NF-e 55 estão na página de compatibilidade, com o motivo.

Diferenças que mais afetam código existente

  1. caminho_danfe serve um PDF. O caminho mantém a terminação .html do provedor, mas o conteúdo é o DANFCe em PDF (content-type: application/pdf). Se o seu código interpreta o HTML do DANFCe, ele quebra. Se ele apenas repassa o arquivo, funciona.
  2. IBS/CBS obrigatório. Todo item precisa dos campos da reforma tributária. Sem eles, a SEFAZ rejeita. Ver Validação.
  3. Numeração pela API é o padrão, igual ao provedor. O adaptador recusa numero e codigo_unico por padrão. Ele aceita numero só em credenciais na faixa de numeração pelo cliente, e nunca aceita codigo_unico.
  4. forma_emissao=offline não é aceito. A contingência aqui é automática: quando a SEFAZ não responde, nós emitimos offline sozinhos e a resposta já vem com contingencia_offline. Ver Contingência.
  5. Subconjunto estrito. O adaptador recusa com 422 qualquer campo fora do subconjunto suportado, em vez de ignorá-lo.