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.
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-IDrecebe o slug textual do tenant (por exemplominha-empresa), não um número nem UUID. - Token: obtido por
POST /api/v1/auth/login(camposemailepassword) e enviado comoAuthorization: Bearer <SEU_TOKEN>. - Certificado A1: cadastrado e válido para a empresa emitente; a listagem fica em
GET /api/v1/certificatese a validação emPOST /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:homologacaoeproducao). 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"
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.
- Confirme a identidade. Chame
GET /api/v1/auth/mee verifique se o tenant retornado é o esperado. - Confirme o certificado. Liste com
GET /api/v1/certificatese confira se há certificado A1 válido para a empresa emitente. - Monte o corpo. Preencha
destinatario(comcpf_cnpj,nomeeendereco) e pelo menos um item emitens, conforme a tabela de campos abaixo. - Envie a emissão. Faça
POST /api/v1/nfce/emit. Resposta 202 significa documento enfileirado. - Guarde o identificador e confira o ambiente. Salve
invoice_ide verifique seambienteéhomologacaodurante os testes. - Consulte o resultado. Chame
GET /api/v1/nfce/{invoice}até um estado final. Sóauthorizedcomprotocolopreenchido confirma a autorização. - Baixe XML e DANFE. Com o documento autorizado, use
GET /api/v1/nfce/{invoice}/xmleGET /api/v1/nfce/{invoice}/pdf. - Cancele quando necessário. Envie
POST /api/v1/nfce/{invoice}/cancelcomjustificativade 15 a 255 caracteres; a resposta 202 indica cancelamento enfileirado, não concluído.
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 corpo | Regra no OpenAPI |
|---|---|
destinatario.cpf_cnpj, destinatario.nome | Obrigatórios; o servidor aplica validação adicional de domínio (por exemplo dígitos verificadores). |
destinatario.endereco | Obrigató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[].cst | Opcionais, até 3 caracteres. |
itens[].rtc_resolution_id | Opcional (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_operacao | Opcional, até 60 caracteres. |
| Campo da consulta | Significado |
|---|---|
status | Estado do documento (ver tabela a seguir). |
chave_acesso, protocolo | Preenchidos quando existirem; podem vir nulos. |
numero, serie, emitted_at | Numeração e data de emissão. |
xml_url, pdf_url | Endereços calculados pelo servidor para XML e DANFE. |
rejection.code, rejection.reason | Código e motivo da rejeição, quando houver. |
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.
| Status | O que significa para a integração | O que fazer |
|---|---|---|
draft, pending, processing | Documento 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. |
rejected | Recusa pelo autorizador. | Leia rejection.code e rejection.reason, corrija os dados e só então avalie nova emissão. |
denied | Resultado negativo registrado; não é autorização. | Não entregue como documento válido; consulte o motivo e o seu contador. |
contingency | Segundo a documentação, NFC-e off-line fica estacionada e sinalizada, sem transmissão. | Acompanhe até a regularização; não trate como autorizada. |
canceled | Cancelamento registrado. | Atualize o seu sistema; o 202 do pedido de cancelamento sozinho não prova isso. |
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.
| Sintoma | Causa provável | Correção |
|---|---|---|
| 401 ou 403 | Token ausente, inválido ou sem permissão. | Revalide com GET /api/v1/auth/me; renove o token pelo login. |
| Tenant não reconhecido | X-Tenant-ID com número ou UUID. | Envie o slug textual do tenant. |
422 com mapa errors | Campo obrigatório ausente ou fora do formato (por exemplo cep sem 8 dígitos). | Ajuste o corpo conforme a tabela de campos. |
| 422 no item | ibscbs enviado no item ou rtc_resolution_id sem codigo. | Remova ibscbs; informe codigo junto do UUID. |
| Cancelamento recusado na validação | justificativa com menos de 15 ou mais de 255 caracteres. | Ajuste o texto. |
404 xml_not_available | XML autorizado ainda indisponível. | Confira se o status é authorized e tente depois. |
| Nota duplicada após timeout | Reemissão sem consultar o estado. | Consulte o recurso antes de reenviar; a idempotência é vinculada ao par payload/tenant. |
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/homologacaolista cenários ePOST /api/v1/nfe/homologacao/runaceitamodelo55 ou 65. No modo padrãosimulated, 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
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
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:
- OpenAPI da FOX NF-e, versão 1.20260923.
- Portal do desenvolvedor FOX NF-e: autenticação, estados assíncronos, idempotência e homologação.
- Portal Nacional da NF-e: manuais (MOC 7.0 NF-e e NFC-e; DANFE-NFC-e e QR Code 6.0).
- 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 →