Emissão de NF-e
Método: POST
Endpoint: https://api.emitix.com.br/nfe/emitir
Descrição Geral
Esta rota permite a emissão de uma Nota Fiscal Eletrônica (NF-e) diretamente para a SEFAZ, enviando todas as informações fiscais e tributárias necessárias para a criação do documento fiscal válido.
O sistema processa o XML da NF-e, realiza a assinatura digital utilizando o certificado do emitente, e envia para a SEFAZ o pedido de autorização. A resposta indica se a nota foi autorizada, rejeitada ou se houve alguma pendência.
Função da Rota
A rota tem como função principal:
- Receber os dados da NF-e no formato estruturado conforme o layout exigido pela SEFAZ, em JSON (campo
nfe) ou como o próprio XML da nota (campoxml); - Realizar a assinatura digital do XML usando o certificado enviado;
- Enviar a NF-e para autorização na SEFAZ;
- Retornar o protocolo e a situação da NF-e após o processamento.
Situações de Uso
Use esta rota quando:
- For necessário emitir uma nova NF-e para uma venda ou prestação de serviço;
- Precisar garantir que a NF-e seja assinada digitalmente e enviada para a SEFAZ com segurança;
- Integrar sistemas de faturamento e ERP com a SEFAZ para emissão automática de notas fiscais.
Campos da Requisição (Payload)
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
nfe | array | ✅ (ou xml) | Lista com os objetos NF-e a serem emitidos (normalmente apenas 1 por requisição). Mutuamente exclusivo com xml. |
xml | string | ✅ (ou nfe) | XML completo da NF-e (ou lote enviNFe), como texto. Mutuamente exclusivo com nfe. Veja Emissão enviando o XML. |
nfe[].ide | object | ✅ | Identificação da NF-e, contendo informações como UF, natureza da operação, série, etc. |
nfe[].emit | object | ✅ | Dados do emitente da NF-e (CNPJ, nome, endereço, inscrição estadual, CRT). |
nfe[].dest | object | ✅ | Dados do destinatário da NF-e (CNPJ, nome, endereço, inscrição estadual, etc). |
nfe[].det | array | ✅ | Lista de detalhes dos produtos/serviços da NF-e, incluindo tributação. |
nfe[].total | object | ✅ | Valores totais da NF-e (produtos, impostos, valor da nota, etc). |
nfe[].transp | object | ✅ | Informações sobre transporte e modalidade de frete. |
nfe[].pag | object | ✅ | Dados de pagamento da NF-e. |
indSinc | string | ✅ | Indicador de envio síncrono (1) ou assíncrono (0). |
certificate | string | ✅ | Certificado digital em Base64 para assinatura da NF-e. |
pass_certificate | string | ✅ | Senha do certificado digital. |
Observação: Para mais detalhes dos campos internos e as possibilidades de emissão, consulte o layout da NF-e disponibilizado na nossa documentação do Swagger: https://api.emitix.com.br/api.
Exemplo de Payload
{
"nfe": [
{
"ide": {
"cUF": "35",
"natOp": "Venda de mercadoria",
"mod": "55",
"serie": "4",
"dhEmi": "2025-11-03T08:00:00-03:00",
"tpNF": "1",
"idDest": "1",
"cMunFG": "3550308",
"tpImp": "1",
"tpEmis": "1",
"tpAmb": "2",
"finNFe": "1",
"indFinal": "1",
"indPres": "1",
"procEmi": "0",
"verProc": "1.0"
},
"emit": {
"CNPJ": "74363615000119",
"xNome": "NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL",
"enderEmit": {
"xLgr": "Rua Exemplo",
"nro": "100",
"xBairro": "Centro",
"cMun": "3550308",
"xMun": "São Paulo",
"UF": "SP",
"CEP": "01000000",
"cPais": "1058",
"xPais": "Brasil",
"fone": "1130000000"
},
"IE": "391036600111",
"CRT": "1"
},
"dest": {
"CNPJ": "74363615000119",
"xNome": "NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL",
"enderDest": {
"xLgr": "Rua do Cliente",
"nro": "200",
"xBairro": "Bairro Cliente",
"cMun": "3550308",
"xMun": "São Paulo",
"UF": "SP",
"CEP": "01000001",
"cPais": "1058",
"xPais": "Brasil",
"fone": "11999999999"
},
"IE": "391036600111",
"indIEDest": "1"
},
"det": [
{
"prod": {
"cProd": "008",
"cEAN": "SEM GTIN",
"xProd": "Monitor Gamer Mancer 165Hz",
"NCM": "84716053",
"CFOP": "5102",
"uCom": "UN",
"qCom": "1.0000",
"vUnCom": "1500.00",
"vProd": "1500.00",
"cEANTrib": "SEM GTIN",
"uTrib": "UN",
"qTrib": "1.0000",
"vUnTrib": "1500.00",
"indTot": "1"
},
"imposto": {
"ICMS": {
"ICMSSN102": {
"orig": "0",
"CSOSN": "102"
}
},
"PIS": {
"PISAliq": {
"CST": "01",
"vBC": "1500.00",
"pPIS": "0.65",
"vPIS": "9.75"
}
},
"COFINS": {
"COFINSAliq": {
"CST": "01",
"vBC": "1500.00",
"pCOFINS": "3.00",
"vCOFINS": "45.00"
}
}
}
}
],
"total": {
"ICMSTot": {
"vBC": "0.00",
"vICMS": "0.00",
"vICMSDeson": "0.00",
"vFCP": "0.00",
"vBCST": "0.00",
"vST": "0.00",
"vFCPST": "0.00",
"vFCPSTRet": "0.00",
"vProd": "1500.00",
"vFrete": "0.00",
"vSeg": "0.00",
"vDesc": "0.00",
"vII": "0.00",
"vIPI": "0.00",
"vIPIDevol": "0.00",
"vPIS": "9.75",
"vCOFINS": "45.00",
"vOutro": "0.00",
"vNF": "1500.00"
}
},
"transp": {
"modFrete": "0"
},
"pag": {
"detPag": [
{
"indPag": "0",
"tPag": "01",
"vPag": "1500.00"
}
]
}
}
],
"indSinc": "1",
"certificate": "HASH_DO_CERTIFICADO",
"pass_certificate": "SENHA_DO_CERTIFICADO"
}
Exemplo de Requisição Completa
curl -X POST https://api.emitix.com.br/nfe/emitir \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "api-key: SUA_API_KEY_AQUI" \
-d '{Payload}'
Exemplo de Resposta
[
{
"message": "NFe emitida com sucesso",
"statusCode": 201,
"isContingency": false,
"success": true,
"chaveAcesso": "352511743636...",
"DANFE": "https://storage.googleapis.com/emitix-9ec66.firebasestorage.app/NFE%2F_CHAVE_DE_ACESSO.pdf",
"sefazResponse": {
"tpAmb": "2",
"verAplic": "SP_NFE_PL009_V4",
"chNFe": "352511743636...",
"dhRecbto": "2025-11-03T10:39:45-03:00",
"nProt": "135250008202365",
"digVal": "29t75jX4hLw5Fl1xI9txQkWt1u0=",
"cStat": "100",
"xMotivo": "Autorizado o uso da NF-e"
},
"xml": [
"<NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\">...</NFe>"
]
}
]
Emissão enviando o XML
Em vez do array nfe em JSON, a rota aceita o XML da NF-e no campo xml. É indicado para ERPs e sistemas de faturamento que já geram o XML nativo da nota e não querem convertê-lo para o JSON do Emitix.
O Emitix lê os dados do XML, segue o mesmo fluxo da emissão em JSON (identificação do emitente, regras de negócio, cota de emissão), gera e assina um novo XML com o certificado do emitente e transmite para a SEFAZ. A resposta é idêntica à da emissão em JSON.
nfe ou xml: escolha um
O corpo aceita um dos dois campos, nunca os dois e nunca nenhum.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
xml | string | ✅ (se não enviar nfe) | XML completo da NF-e, como texto. |
indSinc | string | ✅ | Indicador de envio síncrono ("1") ou assíncrono ("0"). |
certificate | string | ⚙️ Opcional | Certificado A1 em Base64. Se não enviado, usa o cadastrado no emitente. |
pass_certificate | string | ⚙️ Opcional | Senha do certificado A1. |
Formatos de XML aceitos
| Raiz do XML | Descrição |
|---|---|
<NFe> | XML padrão da nota. |
<enviNFe> | Envelope de lote, com uma ou mais <NFe>. A resposta traz um item por nota, na mesma ordem. |
<nfeProc> ou <procNFe> | XML já processado, com protocolo de autorização. |
<infNFe> | Apenas o nó de dados da nota, sem o envelope <NFe>. |
Namespaces e prefixos como nfe: são aceitos. A nota precisa ter os grupos ide, emit e det, e a tag mod deve ser 55.
O XML é lido, não reenviado
A assinatura (<Signature>) e os atributos Id e versao do XML enviado são descartados, pois o Emitix gera e assina o documento. Todos os valores são lidos como texto, preservando zeros à esquerda (CNPJ, CEP, CST, CFOP).
Exemplo de XML
Equivalente ao payload JSON acima (ambiente de homologação, dados fictícios). Salve em nota.xml:
<?xml version="1.0" encoding="UTF-8"?>
<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
<infNFe versao="4.00">
<ide>
<cUF>35</cUF>
<natOp>Venda de mercadoria</natOp>
<mod>55</mod>
<serie>4</serie>
<dhEmi>2025-11-03T08:00:00-03:00</dhEmi>
<tpNF>1</tpNF>
<idDest>1</idDest>
<cMunFG>3550308</cMunFG>
<tpImp>1</tpImp>
<tpEmis>1</tpEmis>
<tpAmb>2</tpAmb>
<finNFe>1</finNFe>
<indFinal>1</indFinal>
<indPres>1</indPres>
<procEmi>0</procEmi>
<verProc>1.0</verProc>
</ide>
<emit>
<CNPJ>74363615000119</CNPJ>
<xNome>NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL</xNome>
<enderEmit>
<xLgr>Rua Exemplo</xLgr>
<nro>100</nro>
<xBairro>Centro</xBairro>
<cMun>3550308</cMun>
<xMun>São Paulo</xMun>
<UF>SP</UF>
<CEP>01000000</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>1130000000</fone>
</enderEmit>
<IE>391036600111</IE>
<CRT>1</CRT>
</emit>
<dest>
<CNPJ>74363615000119</CNPJ>
<xNome>NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL</xNome>
<enderDest>
<xLgr>Rua do Cliente</xLgr>
<nro>200</nro>
<xBairro>Bairro Cliente</xBairro>
<cMun>3550308</cMun>
<xMun>São Paulo</xMun>
<UF>SP</UF>
<CEP>01000001</CEP>
<cPais>1058</cPais>
<xPais>Brasil</xPais>
<fone>11999999999</fone>
</enderDest>
<indIEDest>1</indIEDest>
<IE>391036600111</IE>
</dest>
<det nItem="1">
<prod>
<cProd>008</cProd>
<cEAN>SEM GTIN</cEAN>
<xProd>Monitor Gamer Mancer 165Hz</xProd>
<NCM>84716053</NCM>
<CFOP>5102</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>1500.00</vUnCom>
<vProd>1500.00</vProd>
<cEANTrib>SEM GTIN</cEANTrib>
<uTrib>UN</uTrib>
<qTrib>1.0000</qTrib>
<vUnTrib>1500.00</vUnTrib>
<indTot>1</indTot>
</prod>
<imposto>
<ICMS>
<ICMSSN102>
<orig>0</orig>
<CSOSN>102</CSOSN>
</ICMSSN102>
</ICMS>
<PIS>
<PISAliq>
<CST>01</CST>
<vBC>1500.00</vBC>
<pPIS>0.65</pPIS>
<vPIS>9.75</vPIS>
</PISAliq>
</PIS>
<COFINS>
<COFINSAliq>
<CST>01</CST>
<vBC>1500.00</vBC>
<pCOFINS>3.00</pCOFINS>
<vCOFINS>45.00</vCOFINS>
</COFINSAliq>
</COFINS>
</imposto>
</det>
<total>
<ICMSTot>
<vBC>0.00</vBC>
<vICMS>0.00</vICMS>
<vICMSDeson>0.00</vICMSDeson>
<vFCP>0.00</vFCP>
<vBCST>0.00</vBCST>
<vST>0.00</vST>
<vFCPST>0.00</vFCPST>
<vFCPSTRet>0.00</vFCPSTRet>
<vProd>1500.00</vProd>
<vFrete>0.00</vFrete>
<vSeg>0.00</vSeg>
<vDesc>0.00</vDesc>
<vII>0.00</vII>
<vIPI>0.00</vIPI>
<vIPIDevol>0.00</vIPIDevol>
<vPIS>9.75</vPIS>
<vCOFINS>45.00</vCOFINS>
<vOutro>0.00</vOutro>
<vNF>1500.00</vNF>
</ICMSTot>
</total>
<transp>
<modFrete>0</modFrete>
</transp>
<pag>
<detPag>
<indPag>0</indPag>
<tPag>01</tPag>
<vPag>1500.00</vPag>
</detPag>
</pag>
</infNFe>
</NFe>
O XML precisa ir como uma string dentro do JSON (aspas escapadas). Para não escapar manualmente, deixe o jq montar o corpo a partir do arquivo:
curl -X POST https://api.emitix.com.br/nfe/emitir \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-H "api-key: SUA_API_KEY_AQUI" \
-d "$(jq -n --rawfile xml nota.xml '{xml: $xml, indSinc: "1"}')"
Para enviar um lote, use a raiz <enviNFe> com várias notas:
<enviNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00">
<NFe><infNFe versao="4.00">...</infNFe></NFe>
<NFe><infNFe versao="4.00">...</infNFe></NFe>
</enviNFe>
Erros específicos do envio por XML
Todos retornam 400 Bad Request.
| Mensagem | Causa |
|---|---|
Não é permitido informar os campos 'nfe' e 'xml' simultaneamente. | Os dois campos foram enviados. |
É obrigatório informar o campo 'nfe' ou 'xml'. | Nenhum dos dois foi enviado. |
XML não pode ser vazio. | O campo xml está em branco. |
XML inválido ou malformado: ... | Erro de sintaxe no XML (tag não fechada, por exemplo). |
XML inválido: não foi possível identificar a tag infNFe. | Nenhum dos formatos aceitos foi encontrado. |
XML inválido: tags obrigatórias "ide" ou "emit" não encontradas na nota N. | Faltam os grupos ide ou emit na nota de posição N. |
XML inválido: tag "det" (itens) não encontrada na nota N. | A nota de posição N não tem itens. |
Apenas NF-e podem ser enviadas para esta rota. | mod diferente de 55. Para NFC-e (65), use /nfce/emitir. |