Guia de integração · NFC-e
Publicado em 23/09/2026 · atualizado em 23/09/2026

Como emitir NFC-e via API com a FOX NF-e

Para emitir NFC-e pela FOX NF-e, envie POST /api/v1/nfce/emit com os cabeçalhos Authorization: Bearer e X-Tenant-ID e um corpo com destinatario e itens. A resposta 202 devolve invoice_id e indica enfileiramento, não autorização fiscal. Consulte GET /api/v1/nfce/{invoice} até o status authorized com protocolo e chave_acesso preenchidos. Comece em homologação.

Pré-requisitos

O que você precisa antes da primeira chamada

Antes de enviar a primeira NFC-e, confirme conta, credenciais, certificado e ambiente. O cadastro no portal inicia uma avaliação de 14 dias em homologação, e criar a conta não equivale a autorização fiscal. Configure a empresa, o certificado digital A1 e os dados fiscais no portal. Guarde o token apenas no servidor da sua integração, em variável de ambiente ou cofre de segredos, nunca no navegador nem em log.

  • Conta e tenant: o cabeçalho X-Tenant-ID recebe o slug textual do tenant (por exemplo minha-empresa), não um número nem UUID.
  • Token: obtido por POST /api/v1/auth/login (campos email e password) e enviado como Authorization: Bearer <SEU_TOKEN>.
  • Certificado A1: cadastrado e válido para a empresa emitente; a listagem fica em GET /api/v1/certificates e a validação em POST /api/v1/certificates/validate.
  • Ambiente: use homologação durante a integração. A resposta de emissão informa o ambiente aplicado no campo ambiente (valores documentados: homologacao e producao). Documentos de homologação não têm valor fiscal.
# Confirme token e tenant antes de qualquer emissão (somente leitura)
curl -sS "https://www.foxnfe.com.br/api/v1/auth/me" \
  -H "Authorization: Bearer <SEU_TOKEN>" \
  -H "X-Tenant-ID: <SLUG_DO_TENANT>" \
  -H "Accept: application/json"
Passo a passo

Emissão de ponta a ponta

O fluxo é assíncrono: a API aceita o pedido, enfileira o documento e o processamento segue fora da requisição. Por isso a integração precisa guardar o identificador devolvido e consultar o resultado depois. Siga as etapas abaixo na ordem, começando por chamadas de leitura. Diante de timeout ou erro 5xx, consulte o recurso antes de reenviar, para não criar duplicidade.

  1. Confirme a identidade. Chame GET /api/v1/auth/me e verifique se o tenant retornado é o esperado.
  2. Confirme o certificado. Liste com GET /api/v1/certificates e confira se há certificado A1 válido para a empresa emitente.
  3. Monte o corpo. Preencha destinatario (com cpf_cnpj, nome e endereco) e pelo menos um item em itens, conforme a tabela de campos abaixo.
  4. Envie a emissão. Faça POST /api/v1/nfce/emit. Resposta 202 significa documento enfileirado.
  5. Guarde o identificador e confira o ambiente. Salve invoice_id e verifique se ambiente é homologacao durante os testes.
  6. Consulte o resultado. Chame GET /api/v1/nfce/{invoice} até um estado final. Só authorized com protocolo preenchido confirma a autorização.
  7. Baixe XML e DANFE. Com o documento autorizado, use GET /api/v1/nfce/{invoice}/xml e GET /api/v1/nfce/{invoice}/pdf.
  8. Cancele quando necessário. Envie POST /api/v1/nfce/{invoice}/cancel com justificativa de 15 a 255 caracteres; a resposta 202 indica cancelamento enfileirado, não concluído.
Exemplo

Requisição e resposta conforme o OpenAPI

Os blocos abaixo reproduzem o exemplo estrutural publicado no OpenAPI vigente. Todos os valores são fictícios e devem ser trocados por dados válidos do seu ambiente de homologação; o exemplo não comprova aceitação fiscal. Salve o corpo como nfce.json e envie com curl. Nesta versão, o SDK Python oficial não expõe um método dedicado à NFC-e, por isso o exemplo usa apenas HTTP.

Corpo da requisição (nfce.json):

{
  "destinatario": {
    "cpf_cnpj": "EXEMPLO_FICTICIO",
    "nome": "EXEMPLO_FICTICIO",
    "endereco": {
      "logradouro": "EXEMPLO_FICTICIO",
      "numero": "EXEMPLO_FICTICIO",
      "bairro": "EXEMPLO_FICTICIO",
      "municipio": "EXEMPLO_FICTICIO",
      "uf": "EX",
      "cep": "00000000"
    }
  },
  "itens": [
    {
      "produto": "EXEMPLO_FICTICIO",
      "ncm": "00000000",
      "cfop": "0000",
      "unidade": "EXEMPL",
      "quantidade": 1,
      "valor_unitario": 1
    }
  ]
}

Envio:

curl -sS -X POST "https://www.foxnfe.com.br/api/v1/nfce/emit" \
  -H "Authorization: Bearer <SEU_TOKEN>" \
  -H "X-Tenant-ID: <SLUG_DO_TENANT>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  --data @nfce.json

Resposta 202 (exemplo estrutural do OpenAPI; o campo ambiente pode vir como producao ou homologacao, e o status segue o enum da tabela de estados):

{
  "invoice_id": 1,
  "status": "draft",
  "message": "NF-e enfileirada para emissão",
  "ambiente": "producao"
}

Consulta do resultado:

curl -sS "https://www.foxnfe.com.br/api/v1/nfce/<INVOICE_ID>" \
  -H "Authorization: Bearer <SEU_TOKEN>" \
  -H "X-Tenant-ID: <SLUG_DO_TENANT>" \
  -H "Accept: application/json"
Campo do corpoRegra no OpenAPI
destinatario.cpf_cnpj, destinatario.nomeObrigatórios; o servidor aplica validação adicional de domínio (por exemplo dígitos verificadores).
destinatario.enderecoObrigatório: logradouro, numero, bairro, municipio, uf (2 caracteres) e cep (8 dígitos).
itens[]Pelo menos 1 item com produto, ncm (8 dígitos), cfop (4 dígitos), unidade (até 6), quantidade e valor_unitario (mínimo 0,01).
itens[].csosn, itens[].cstOpcionais, até 3 caracteres.
itens[].rtc_resolution_idOpcional (UUID). Quando presente, itens[].codigo passa a ser obrigatório. O campo ibscbs é proibido no item.
pagamentos[]Opcional; se enviado, cada item exige forma (2 dígitos) e valor (mínimo 0).
natureza_operacaoOpcional, até 60 caracteres.
Campo da consultaSignificado
statusEstado do documento (ver tabela a seguir).
chave_acesso, protocoloPreenchidos quando existirem; podem vir nulos.
numero, serie, emitted_atNumeração e data de emissão.
xml_url, pdf_urlEndereços calculados pelo servidor para XML e DANFE.
rejection.code, rejection.reasonCódigo e motivo da rejeição, quando houver.
Estados

Estados do documento e o que fazer

O campo status segue o enum publicado no OpenAPI. Trate como autorizada apenas a NFC-e em authorized com protocolo do autorizador; aceitação HTTP ou enfileiramento não é autorização fiscal. Os estados intermediários pedem nova consulta, nunca reemissão às cegas. A tabela resume a ação recomendada para cada valor, sem presumir comportamento que o contrato público não descreve.

StatusO que significa para a integraçãoO que fazer
draft, pending, processingDocumento aceito pela API e ainda sem resultado final do autorizador.Consulte de novo mais tarde. Não reenvie o mesmo documento.
authorizedÚnico estado que representa autorização, desde que acompanhado de protocolo.Grave chave_acesso e protocolo; baixe XML e DANFE.
rejectedRecusa pelo autorizador.Leia rejection.code e rejection.reason, corrija os dados e só então avalie nova emissão.
deniedResultado negativo registrado; não é autorização.Não entregue como documento válido; consulte o motivo e o seu contador.
contingencySegundo a documentação, NFC-e off-line fica estacionada e sinalizada, sem transmissão.Acompanhe até a regularização; não trate como autorizada.
canceledCancelamento registrado.Atualize o seu sistema; o 202 do pedido de cancelamento sozinho não prova isso.
Erros comuns

Erros confirmados no contrato e na documentação

Os erros abaixo aparecem no OpenAPI ou no portal do desenvolvedor. Nenhum código de rejeição da SEFAZ é listado aqui, porque ele vem no campo rejection da consulta com o texto do autorizador. Se receber uma resposta não descrita nesta página, registre o corpo sem o token, consulte o status do recurso e procure o suporte antes de repetir a chamada.

SintomaCausa provávelCorreção
401 ou 403Token ausente, inválido ou sem permissão.Revalide com GET /api/v1/auth/me; renove o token pelo login.
Tenant não reconhecidoX-Tenant-ID com número ou UUID.Envie o slug textual do tenant.
422 com mapa errorsCampo obrigatório ausente ou fora do formato (por exemplo cep sem 8 dígitos).Ajuste o corpo conforme a tabela de campos.
422 no itemibscbs enviado no item ou rtc_resolution_id sem codigo.Remova ibscbs; informe codigo junto do UUID.
Cancelamento recusado na validaçãojustificativa com menos de 15 ou mais de 255 caracteres.Ajuste o texto.
404 xml_not_availableXML autorizado ainda indisponível.Confira se o status é authorized e tente depois.
Nota duplicada após timeoutReemissão sem consultar o estado.Consulte o recurso antes de reenviar; a idempotência é vinculada ao par payload/tenant.
Limites e cobertura

Limites, cobertura e homologação simulada

A disponibilidade depende de documento, UF, ambiente e configuração da empresa; não presuma suporte a todas as variantes a partir do catálogo. Homologação não tem valor fiscal. A NFC-e off-line fica estacionada e sinalizada, e a contingência SVC documentada vale para o modelo 55. Franquias e condições de cada plano estão no portal, após login.

  • Homologação simulada por modelo: GET /api/v1/nfe/homologacao lista cenários e POST /api/v1/nfe/homologacao/run aceita modelo 55 ou 65. No modo padrão simulated, o protocolo é sintético e nada é transmitido à SEFAZ; serve para testar leitura de XML e DANFE, não para provar autorização.
  • Leiaute oficial: o Portal Nacional da NF-e publica o Manual de Orientação ao Contribuinte (MOC) versão 7.0, que abrange NF-e e NFC-e, e o Manual de Padrões Técnicos do DANFE-NFC-e e QR Code, versão 6.0.
  • IBS e CBS: no cronograma divulgado pela Receita Federal (Ato Conjunto RFB/CGIBS nº 4/2026), a NFC-e está no marco de 3 de agosto de 2026. Veja o resumo em cronograma do IBS e da CBS na nota fiscal.
  • Planos: consulte documentos incluídos e limites em planos e condições no portal FOX NF-e (login necessário).
  • Agentes de IA: a integração por MCP está descrita no guia do servidor MCP da FOX NF-e.
Perguntas frequentes

Perguntas frequentes

Estas respostas resumem o contrato público da API e a documentação do desenvolvedor em 23/09/2026. Elas descrevem o comportamento da integração, não a situação fiscal da sua empresa. Para enquadramento tributário, CFOP, NCM e regime, consulte o seu contador. Para detalhes que mudam com o tempo, confira o portal do desenvolvedor e o OpenAPI vigente antes de publicar a integração.

Qual endpoint emite NFC-e na FOX NF-e?

POST /api/v1/nfce/emit, com os cabeçalhos Authorization: Bearer e X-Tenant-ID e um corpo JSON com destinatario e itens. A resposta 202 traz invoice_id, status e ambiente.

A resposta 202 significa que a NFC-e foi autorizada?

Não. O 202 indica que o documento foi aceito e enfileirado. A autorização só é confirmada quando GET /api/v1/nfce/{invoice} retorna status authorized com protocolo preenchido.

Posso testar sem valor fiscal?

Sim. O cadastro inicia uma avaliação de 14 dias em homologação, e documentos de homologação não têm valor fiscal. Confira o campo ambiente da resposta de emissão. Há também uma homologação simulada por modelo que não transmite nada à SEFAZ.

O que fazer se a requisição der timeout?

Não reemita às cegas. Consulte o estado do recurso antes de reenviar. Segundo a documentação, a idempotência de emissão é vinculada ao par payload e tenant.

Como cancelar uma NFC-e pela API?

Envie POST /api/v1/nfce/{invoice}/cancel com o campo justificativa, de 15 a 255 caracteres. A resposta 202 indica cancelamento enfileirado; confirme o status canceled na consulta.

Autoria e método

Autoria e método

Elaborado pela equipe fiscal e de engenharia da Central Fox Tecnologia LTDA com auxílio de IA a partir do contrato público da API e das fontes oficiais listadas; exemplos conferidos contra o OpenAPI vigente. Conteúdo informativo; não substitui orientação contábil ou jurídica. Atualizado em 23/09/2026.

Fontes consultadas em 23/09/2026:

  1. OpenAPI da FOX NF-e, versão 1.20260923.
  2. Portal do desenvolvedor FOX NF-e: autenticação, estados assíncronos, idempotência e homologação.
  3. Portal Nacional da NF-e: manuais (MOC 7.0 NF-e e NFC-e; DANFE-NFC-e e QR Code 6.0).
  4. Receita Federal: cronograma dos documentos fiscais eletrônicos (Ato Conjunto RFB/CGIBS nº 4/2026).

O contrato completo, com webhooks, SDKs e rejeições explicadas, está no portal do desenvolvedor.

Abrir o portal do desenvolvedor →