Download OpenAPI specification:
API REST que permite que sistemas externos (softwares de parceiros/clientes) emitam NF-e (modelo 55) ou NFC-e (modelo 65) em nome de um estabelecimento cliente do EmiteFácil, sem que o operador precise acessar o EmiteFácil manualmente.
Por padrão a API emite NFC-e (modelo 65). Para emitir NF-e (modelo 55), envie
"modelo": 55 no POST /emit.
A API não cadastra nem altera produtos — o cadastro continua sendo feito em
Cadastros → Produtos e Serviços. Use GET /items para obter o código do produto.
Todas as operações da API exigem uma API key no header X-API-Key.
No EmiteFácil, acesse Parâmetros Gerais → Integração via API.
Gere uma nova chave, informe uma descrição que identifique o sistema integrador e copie a chave no momento da criação. Por segurança, o valor completo não é exibido novamente.
Envie a chave em todas as requisições:
X-API-Key: SUA_CHAVE_AQUI
Accept: application/json
Exemplo para confirmar a autenticação consultando os produtos disponíveis:
curl --request GET \
--url 'https://api.emitenfe.com.br/nfe/items?page=1' \
--header 'Accept: application/json' \
--header 'X-API-Key: SUA_CHAVE_AQUI'
A API key já está vinculada a um único grupo e estabelecimento. Não envie códigos de grupo
ou estabelecimento no payload. Resposta 401 indica chave ausente, inválida ou inativa.
Armazene a chave como segredo no servidor integrador; não exponha em navegador, aplicativo,
repositório ou log. Em caso de vazamento, desative a chave e gere outra.
Use as seções Produtos, Clientes e Formas de pagamento para obter os códigos válidos
do estabelecimento antes de montar o POST /emit.
O parceiro não envia campos de IBS ou CBS no payload. Para cada item, o EmiteFácil resolve automaticamente os tributos usando grupo, produto, CFOP, valor da operação e tabelas tributárias configuradas no cadastro do produto.
Os dados resolvidos incluem:
cClassTrib);Quando não existe tabela específica para o produto/CFOP, o fluxo atual utiliza os valores
transitórios de 2026: CST 000, classificação tributária 000001, IBS UF 0,1%, IBS
municipal 0% e CBS 0,9%, calculados sobre o valor total do item.
Imposto Seletivo (IS) não é aceito no payload nem montado por este fluxo da API. Caso a operação exija IS, contate o suporte antes de integrar.
Os demais dados fiscais — CFOP, CST/CSOSN, ICMS, PIS, COFINS e IPI — também são resolvidos automaticamente a partir do cadastro fiscal do produto e do regime tributário.
NF-e (modelo 55) exige identificação completa do destinatário (CPF/CNPJ, nome e
endereço) quando não é referenciado um cliente já cadastrado via cod_terceiro — a SEFAZ
rejeita NF-e sem destinatário identificado. NFC-e (modelo 65, padrão) continua aceitando
consumidor não identificado.
Envie sempre Accept: application/json. Sem ele, erros de validação podem ser respondidos
com redirecionamento (HTTP 302) em vez de JSON.
{ "sucesso": true|false, "msg": "..." } mais os dados do recurso.{ "message": "...", "errors": { "campo": ["..."] } }.retry_url: a venda foi gravada, mas a SEFAZ rejeitou a nota. Não chame
POST /emit de novo (duplicaria a venda); use retry_url.retry_url
depois de configurar).idDest (interna/interestadual) é calculado pela UF do cliente.Só é possível cancelar notas com status AU. O prazo legal costuma ser de 30 minutos para
NFC-e e 24 horas para NF-e, podendo variar conforme o estado. O cancelamento reverte o estoque.
Atenção:
POST /emitcria uma venda e pode transmitir a nota para a SEFAZ. Antes de executar exemplos, confirme com o suporte se a chave e o estabelecimento estão configurados para homologação ou produção.
Autor: Tiago Oliveira — Última atualização: 30/09/2026
Se a venda for criada mas a emissão falhar (SEFAZ fora do ar, rejeição, etc.), a
resposta traz venda.codigo e retry_url — usar POST /sale/{codigo}/emit para
tentar novamente sem duplicar a venda.
| modelo | integer Default: 65 Enum: 55 65 55 = NF-e · 65 = NFC-e. Omitido, assume 65 (NFC-e). | ||||||||
| consumidor_final required | boolean | ||||||||
| cod_terceiro | integer or null Código de um cliente já cadastrado — alternativa a | ||||||||
object Ignorado se | |||||||||
| |||||||||
required | Array of objects non-empty | ||||||||
Array (non-empty)
| |||||||||
object or null Uma única forma de pagamento — alternativa a | |||||||||
| |||||||||
Array of objects or null non-empty Múltiplas formas de pagamento — alternativa a | |||||||||
Array (non-empty)
| |||||||||
| informacoes_complementares | string or null Texto livre — vai para o campo de informações complementares da NF-e/NFC-e. | ||||||||
{- "consumidor_final": true,
- "itens": [
- {
- "produto_cod": 456,
- "quantidade": 2,
- "valor_unitario": 29.9,
- "desconto": 0
}
], - "forma_pagamento": {
- "codigo": 1,
- "valor": 59.8
}
}{- "sucesso": true,
- "msg": "NF-e emitida com sucesso",
- "venda": {
- "codigo": 0,
- "valor_total": 0
}, - "nfe": {
- "serie": 0,
- "numero": 0,
- "chave_acesso": "string",
- "protocolo": "string",
- "status": "AU",
- "cstat": "100",
- "motivo": "string"
}, - "url_danfe": "string"
}Usar após um POST /emit que criou a venda mas não conseguiu emitir (resposta 422 com
retry_url). Opcionalmente substitui a forma de pagamento antes de reenviar.
| codigo required | integer Código do lançamento (venda), retornado em |
object or null Substitui a forma de pagamento da venda por esta única. | |||||
| |||||
Array of objects or null Substitui a(s) forma(s) de pagamento da venda por estas. | |||||
Array
| |||||
{- "forma_pagamento": {
- "codigo": 0,
- "valor": 0
}, - "formas_pagamento": [
- {
- "codigo": 0,
- "valor": 0
}
]
}{- "sucesso": true,
- "msg": "NF-e emitida com sucesso",
- "venda": {
- "codigo": 0,
- "valor_total": 0
}, - "nfe": {
- "serie": 0,
- "numero": 0,
- "chave_acesso": "string",
- "protocolo": "string",
- "status": "AU",
- "cstat": "100",
- "motivo": "string"
}, - "url_danfe": "string"
}| codigo required | integer Código do lançamento (venda), retornado em |
| motivo required | string [ 15 .. 255 ] characters |
{- "motivo": "Erro na quantidade de itens informada na nota"
}{- "sucesso": true,
- "msg": "NFC-e cancelada com sucesso.",
- "venda": {
- "codigo": 0
}, - "nfe": {
- "chave_acesso": "string",
- "status": "CA",
- "cstat": 135,
- "protocolo": "string"
}
}| codigo required | integer Código do lançamento (venda), retornado em |
{- "sucesso": true,
- "venda": {
- "codigo": 0,
- "valor_total": 0
}, - "nfe": {
- "serie": 0,
- "numero": 0,
- "chave_acesso": "string",
- "protocolo": "string",
- "status": "string",
- "cstat": "string",
- "motivo": "string"
}
}A nota precisa estar com status AU (autorizada) para o PDF ser gerado.
| codigo required | integer Código do lançamento (venda), retornado em |
{- "sucesso": false,
- "msg": "API key inválida ou inativa."
}Somente leitura — não cria nem altera produtos. Retorna os códigos aceitos em itens[].produto_cod, paginados (30 por página; use ultima_pagina para saber quando parar). O preço vem da tabela de preços 1 (padrão). Consulte este endpoint antes de emitir para não informar um produto inexistente.
| search | string Filtra por nome (sem acento) ou referência do produto. |
| page | integer Default: 1 |
{- "sucesso": true,
- "pagina": 0,
- "itens_por_pagina": 30,
- "ultima_pagina": true,
- "itens": [
- {
- "codigo": 0,
- "nome": "string",
- "unidade": "UN",
- "valor_venda": 0,
- "ncm": "string"
}
]
}Retorna até 50 clientes, aceitos em cod_terceiro. Para NF-e modelo 55, referenciar um cliente cadastrado evita reenviar seus dados completos no payload.
| search | string Filtra por razão social, nome fantasia ou CPF/CNPJ. |
{- "sucesso": true,
- "clientes": [
- {
- "codigo": 0,
- "cnpj_cpf": "string",
- "tipo_pessoa": "F",
- "razaosocial": "string",
- "nomefantasia": "string"
}
]
}Retorna as formas de pagamento ativas. Use o campo codigo (não t_pag) em forma_pagamento.codigo e formas_pagamento[].codigo. A soma dos pagamentos deve fechar com o total dos itens.
{- "sucesso": true,
- "formas_pagamento": [
- {
- "codigo": 0,
- "descricao": "string",
- "t_pag": "string"
}
]
}