A integração inteira cabe em uma requisição
REST com JSON e autenticação por token no header, igual nos dois produtos. Emitir uma NFS-e e enviar uma mensagem de WhatsApp têm o mesmo formato de chamada, a mesma resposta 202 e o mesmo jeito de acompanhar o que entrou em fila.
Uma requisição, quatro linguagens
REST com JSON e autenticação por token no header, igual nos dois produtos. Trocar NFS-e por NFC-e muda o caminho e o corpo, não a forma de integrar — e o mesmo vale para trocar o WhatsApp alternativo pelo canal oficial da Meta.
- Emissão devolve 202 com o id do documento: segue em fila e você consulta até sair de processando
- Envio de mensagem devolve 202 com dbMessageId: você acompanha de pending até delivered
- Idempotência por referencia_externa: reenviar a mesma venda não gera nota dobrada
- XML assinado e PDF (DANFSe, DANFE ou cupom) pela mesma API
- Webhook assinado com HMAC para mensagem recebida e mudança de status
- Token com escopo só de emitir, só de consultar ou de gerenciar
- Arquivo llms.txt da plataforma e um por modalidade de nota, para agentes de IA lerem a documentação
curl -X POST "https://nfe.apifacil.dev/api/v1/emitentes/42/nfse" \
-H "Authorization: seu_token" \
-H "Content-Type: application/json" \
-d '{"referencia_externa":"os-2026-8412",
"tomador":{"documento":"12345678000199","nome":"Cliente Ltda"},
"descricao":"Consultoria em TI",
"valor_servico":1500.00}'
const res = await fetch(
'https://nfe.apifacil.dev/api/v1/emitentes/42/nfse',
{
method: 'POST',
headers: {
Authorization: process.env.APIFACIL_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify({
referencia_externa: 'os-2026-8412',
tomador: { documento: '12345678000199', nome: 'Cliente Ltda' },
descricao: 'Consultoria em TI',
valor_servico: 1500.00,
}),
}
)
// { id: 8412, status: 'processando' }
const { data } = await res.json()
use Illuminate\Support\Facades\Http;
$res = Http::withHeaders([
'Authorization' => config('services.apifacil.token'),
])->post(
'https://nfe.apifacil.dev/api/v1/emitentes/42/nfse',
[
'referencia_externa' => 'os-2026-8412',
'tomador' => [
'documento' => '12345678000199',
'nome' => 'Cliente Ltda',
],
'descricao' => 'Consultoria em TI',
'valor_servico' => 1500.00,
]
);
$res->json('data.id');
import os, requests
res = requests.post(
"https://nfe.apifacil.dev/api/v1/emitentes/42/nfse",
headers={"Authorization": os.environ["APIFACIL_TOKEN"]},
json={
"referencia_externa": "os-2026-8412",
"tomador": {"documento": "12345678000199", "nome": "Cliente Ltda"},
"descricao": "Consultoria em TI",
"valor_servico": 1500.00,
},
timeout=10,
)
res.json()["data"]["id"]
Da conta criada até o primeiro documento autorizado
Quatro passos, na ordem. Nenhum deles depende de reunião, de proposta comercial ou de liberação manual do nosso lado.
- 01 Gere o token No painel, com escopo só de emitir, só de consultar ou de gerenciar. O token vai no header Authorization em toda chamada, e revogar um não derruba os outros.
- 02 Cadastre o emitente ou conecte a instância Para nota, o emitente é o CNPJ com o certificado A1 dele — a assinatura do XML acontece deste lado. Para mensagem, a instância conecta por QR Code, pairing code ou sessão importada; no canal oficial, pelo seu Business Manager.
- 03 Chame em homologação O ambiente de homologação do fisco não custa nada e não consome franquia. Mande sempre a referencia_externa da venda: é ela que impede nota dobrada quando o seu retry disparar.
- 04 Acompanhe pelo id A resposta é 202 com o id, porque emissão vai para fila com limite por emitente. Você consulta o documento até ele sair de processando, e o XML e o PDF saem pela mesma API.
O que costuma travar, dito antes de travar
Três coisas respondem pela maioria das primeiras tentativas que não passam. Nenhuma é bug da API — todas são exigência de quem autoriza o documento.
- Certificado A1 vencido ou com a senha errada O XML é assinado com o certificado do próprio emitente. Sem ele válido, a emissão nem chega ao autorizador — e o erro aparece no documento, não em 500.
- CSC de produção usado em homologação O código de segurança do contribuinte da NFC-e é diferente por ambiente. Em homologação, use o de homologação: trocar os dois é o motivo mais comum de QR Code recusado no cupom.
- Rejeição da SEFAZ tratada como falha nossa Rejeição vem com código e motivo do próprio fisco, e a maioria é dado do cadastro: destinatário sem inscrição estadual, CFOP incompatível com a operação, NCM inexistente. O documento fica consultável com o retorno inteiro.
Receba uma proposta
Preencha e fale com a gente no WhatsApp, sem espera.
Abrindo o WhatsApp.
Falar no WhatsAppComece com 7 dias grátis
Sem cartão, sem reunião comercial e sem contrato. Cria a conta e já sai enviando mensagem — ou cadastra o CNPJ emitente e testa a emissão de nota. Leva menos tempo do que pedir uma proposta ao intermediário que você usa hoje.
- Token da API disponível assim que a conta é criada
- Nota fiscal e WhatsApp no mesmo painel, com o mesmo token
- Conversas cobradas pela Meta, sem markup nosso
- Homologação de nota fiscal liberada sem custo, para integrar antes de assinar
- Suporte por WhatsApp com gente que conhece a API