Manual da API
Integre o seu sistema ao NFácil
Com a API, o seu sistema (ERP, loja virtual, sistema de gestão) emite notas fiscais de serviço, gera boletos e Pix e acompanha tudo, sem ninguém precisar abrir o painel.
Início rápido
Em cinco minutos você faz a primeira chamada. Os exemplos usam curl, mas qualquer linguagem que faça requisições HTTPS funciona.
- Crie a credencial. No NFácil, um administrador abre Conta → Integrações → Incluir credencial, escolhe as permissões e as empresas e confirma. A chave (começa com
nfk_) aparece uma única vez: guarde-a no cofre de senhas do seu sistema. - Descubra o código da conta. Ele aparece no endereço do painel (
/contas/acc_...) e também na tela da credencial. - Guarde a chave numa variável de ambiente do servidor que vai chamar a API (nunca no código):
export NFACIL_API_KEY=.... Os exemplos deste manual usam essa variável. - Faça a primeira chamada. Liste as empresas que a credencial enxerga:
curl https://app.nfacil.com.br/api/v1/accounts/acc_EXEMPLO123/companies \
-H "Authorization: Bearer $NFACIL_API_KEY"
A resposta traz cada empresa com o código co_..., que você usa nas próximas chamadas.
{
"items": [
{ "id": "co_EXEMPLO456", "legalName": "EMPRESA EXEMPLO SERVIÇOS LTDA", "cnpj": "12345678000190", ... }
],
"nextCursor": null
}
Credenciais e permissões
Toda chamada leva a chave no cabeçalho Authorization:
Authorization: Bearer $NFACIL_API_KEY
- Permissões (escopos). Na criação, você escolhe o que a credencial pode fazer. Uma credencial só de leitura não emite nem cobra.
- Empresas. A credencial pode ser limitada a algumas empresas (CNPJs) da conta. Fora delas, as chamadas respondem como se a empresa não existisse.
- Segurança. Use HTTPS sempre, guarde a chave num cofre de senhas e nunca a coloque no código-fonte, em aplicativos de celular ou no navegador do cliente.
- Troca e revogação. Em Integrações, gire a chave quando alguém que a conhecia sair da equipe, e revogue a credencial que não for mais usada.
| Permissão | Para que serve |
|---|---|
account:read | Ver a conta, as empresas e os modelos de e-mail. |
issuers:read / issuers:write | Ver e atualizar os dados das empresas, os contatos e o catálogo de serviços. |
recipients:read / recipients:write | Ver e manter os tomadores (clientes) e os contatos deles. |
nfse:read / nfse:write | Consultar e emitir notas, cancelar, baixar documentos e manter agendamentos e rascunhos. |
charges:read / charges:write | Consultar e criar cobranças, alterar e cancelar. |
Conceitos importantes
Endereço base
Todas as rotas começam com https://app.nfacil.com.br/api/v1 e ficam dentro da conta: /accounts/{accountId}/.... As rotas de uma empresa ficam em /accounts/{accountId}/companies/{companyId}/....
Valores e datas
- Dinheiro sempre como texto, com ponto decimal e até duas casas:
"1500.00". Nunca envie número com vírgula flutuante. - Datas no formato
AAAA-MM-DD; data e hora no padrão ISO 8601 (2026-11-04T10:30:00-03:00). - Competência da nota no formato
AAAA-MM. Se não enviar, vale o mês corrente.
Emissão assíncrona
Pedir a emissão não espera a prefeitura: a API responde 202 Accepted com o pedido e a situação inicial. A nota segue sozinha até o fim. Acompanhe pela consulta do pedido:
Situação (state) | O que significa |
|---|---|
queued, submitted, processing | Em andamento. Consulte de novo em alguns segundos. |
authorized | Autorizada. PDF e XML disponíveis. |
rejected | Recusada. O motivo vem no pedido; corrija e peça uma nova emissão. |
verification_required | Não se sabe ainda se a prefeitura recebeu. O NFácil consulta sozinho e nunca reenvia: não peça de novo. |
cancel_requested, cancelled | Cancelamento pedido ou concluído. |
Idempotência (evita nota em dobro)
Ao emitir uma nota, envie o cabeçalho Idempotency-Key com um UUID novo por pedido. Se a rede cair e você repetir a mesma chamada com a mesma chave, o NFácil devolve o mesmo pedido em vez de criar outro. A chave vale por 24 horas; a mesma chave com um corpo diferente responde 409.
Referência externa
Envie o código do pedido no seu sistema em externalReference (ex.: PED-2026-0001). Ele é único por empresa e permite recuperar a nota ou a cobrança depois, pela rota .../by-reference/{externalReference}, mesmo sem ter guardado o código do NFácil.
Listas e paginação
Listas devolvem items e nextCursor. Para a próxima página, repita a chamada com cursor={nextCursor}. Use limit para o tamanho da página. Quando nextCursor vier null, acabou.
Erros
Toda resposta de erro tem o mesmo formato:
{
"code": "validation_error",
"message": "Informe o valor do serviço.",
"field": "values.amount",
"requestId": "req_EXEMPLO789"
}
| HTTP | Quando acontece | O que fazer |
|---|---|---|
| 401 | Chave ausente, errada ou revogada. | Confira o cabeçalho Authorization e a credencial. |
| 403 | A credencial não tem a permissão necessária. | Peça a um administrador para ajustar as permissões. |
| 404 | Recurso não existe ou está fora das empresas da credencial. | Confira os códigos da conta e da empresa. |
| 409 | Conflito: mesma chave de idempotência com outro corpo, ou referência externa repetida. | Gere uma chave nova ou consulte pela referência. |
| 422 | Dados inválidos ou empresa ainda não pronta para emitir. | Leia message e field, corrija e envie de novo. |
| 429 | Muitas chamadas em pouco tempo. | Espere alguns segundos e tente de novo, aumentando o intervalo a cada tentativa. |
| 503 | Prefeitura ou provedor de cobrança fora do ar. | Tente mais tarde. Para notas, use a mesma Idempotency-Key. |
requestId. Ele identifica a sua chamada sem expor dados.Empresas
As empresas (emitentes) são cadastradas pelo painel. Pela API, você consulta os dados e confere se a empresa está pronta para emitir.
GET/accounts/{accountId}/companiesEmpresas que a credencial enxerga.
GET/accounts/{accountId}/companies/{companyId}Dados da empresa.
GET/accounts/{accountId}/companies/{companyId}/readinessO que falta para emitir (certificado, cadastro, série).
Tomadores (clientes)
O tomador é quem recebe o serviço e a nota. Você pode cadastrá-lo antes ou mandar os dados direto no pedido de emissão.
GET.../companies/{companyId}/recipientsLista, com busca por nome ou documento.
POST.../companies/{companyId}/recipientsCadastra um tomador (CPF, CNPJ ou estrangeiro).
GET.../recipients/{recipientId}Consulta um tomador.
PATCH.../recipients/{recipientId}Atualiza (o tipo e o documento não mudam).
POST.../recipients/{recipientId}/contactsInclui um contato que recebe notas ou boletos por e-mail.
curl -X POST https://app.nfacil.com.br/api/v1/accounts/acc_EXEMPLO123/companies/co_EXEMPLO456/recipients \
-H "Authorization: Bearer $NFACIL_API_KEY" -H "Content-Type: application/json" \
-d '{
"kind": "pj",
"document": "98.765.432/0001-10",
"name": "CLIENTE EXEMPLO COMÉRCIO LTDA",
"email": "[email protected]",
"cep": "77000000", "street": "Avenida Exemplo", "number": "100", "district": "Centro",
"cityIbge": "1721000", "uf": "TO"
}'
Serviços (catálogo)
O catálogo guarda a descrição, o código de tributação e a alíquota de cada serviço. Na emissão, basta informar o serviceItemId.
GET.../companies/{companyId}/servicesCatálogo da empresa.
POST.../companies/{companyId}/servicesCadastra um serviço.
PATCH.../services/{serviceId}Atualiza.
Notas fiscais (NFS-e)
POST.../companies/{companyId}/nfsePede a emissão (exige Idempotency-Key).
GET.../companies/{companyId}/nfse/{nfseId}Pedido com a situação e a linha do tempo.
GET.../nfse/by-reference/{externalReference}Recupera pela sua referência.
GET.../nfse/{nfseId}/documents/pdf · xmlBaixa o PDF (DANFSe) ou o XML da nota autorizada.
GET/accounts/{accountId}/nfseNotas da conta, com filtros e ordenação.
GET.../nfse/{nfseId}/cancellation-optionsPrazo e formas de cancelamento da nota.
POST.../nfse/{nfseId}/cancellationPede o cancelamento, com o motivo.
Pedir a emissão
curl -X POST https://app.nfacil.com.br/api/v1/accounts/acc_EXEMPLO123/companies/co_EXEMPLO456/nfse \
-H "Authorization: Bearer $NFACIL_API_KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"recipient": { "id": "rcp_EXEMPLO001" },
"service": { "serviceItemId": "svc_EXEMPLO002" },
"values": { "amount": "1500.00", "issWithheld": false },
"competence": "2026-11",
"externalReference": "PED-2026-0001"
}'
Resposta 202: o pedido com "state": "queued". Consulte o pedido até chegar em authorized ou rejected.
{"id": ...}, envie os dados do tomador em recipient (os mesmos campos do cadastro) e, se quiser guardá-lo, "save": true.Acompanhar até autorizar
Consulte a cada 5 a 10 segundos nos primeiros minutos e, depois, com intervalos maiores. Não há necessidade de consultar sem parar: a maioria das notas sai em poucos segundos, mas algumas prefeituras demoram mais.
Cobranças
A cobrança gera boleto com Pix ou só Pix na conta de recebimento configurada na empresa. O dinheiro cai direto na conta da empresa.
POST.../companies/{companyId}/chargesCria a cobrança (parcela única).
GET.../charges/{chargeId}Situação, link de pagamento e linha do tempo.
GET.../charges/by-reference/{externalReference}Recupera pela sua referência.
GET.../charges/{chargeId}/pixPix copia e cola e QR Code.
GET.../charges/{chargeId}/boleto.pdfBoleto em PDF.
PATCH.../charges/{chargeId}Altera valor e/ou vencimento (quando o provedor permite).
POST.../charges/{chargeId}/cancellationPede o cancelamento de cobrança não paga.
GET/accounts/{accountId}/chargesCobranças da conta.
curl -X POST https://app.nfacil.com.br/api/v1/accounts/acc_EXEMPLO123/companies/co_EXEMPLO456/charges \
-H "Authorization: Bearer $NFACIL_API_KEY" -H "Content-Type: application/json" \
-d '{
"nfseId": "nfse_EXEMPLO003",
"amount": "1500.00",
"dueDate": "2026-11-20",
"method": "boleto_pix",
"externalReference": "FAT-2026-0001"
}'
- Com
nfseId, o tomador da nota vira o pagador e a cobrança fica ligada à nota. Para cobrança avulsa, informerecipientId. method:boleto_pix(boleto com Pix) oupix(só Pix).- Multa e juros: em branco, valem a preferência do tomador ou o padrão da empresa.
- O pagamento é confirmado pelo provedor e aparece na situação da cobrança (
paid).
Agendamentos
Agende uma nota única numa data ou notas recorrentes (semanal, mensal, bimestral, trimestral ou anual). O NFácil emite sozinho nas datas.
POST.../companies/{companyId}/nfse-schedules/previewMostra as próximas datas da regra, sem gravar.
POST.../companies/{companyId}/nfse-schedulesCria o agendamento.
GET.../nfse-schedules/{scheduleId}Próximas datas, histórico e notas emitidas.
PATCH.../nfse-schedules/{scheduleId}Altera descrição, valor, horário e cobrança.
POST.../nfse-schedules/{scheduleId}/pausePausa (as datas da pausa são puladas).
Receitas completas
Vender um serviço e cobrar
- Procure o cliente em
GET .../recipients?q=documento; se não existir, cadastre comPOST .../recipients. - Peça a nota com
POST .../nfse, usando umaIdempotency-Keynova e aexternalReferencedo seu pedido. - Consulte
GET .../nfse/{nfseId}atéauthorized. - Crie a cobrança com
POST .../chargesinformando onfseId. - Envie ao cliente o link de pagamento da cobrança, ou deixe o NFácil mandar a nota e o boleto por e-mail (configurado no painel).
Mensalidade automática
- Confira as datas com
POST .../nfse-schedules/preview. - Crie o agendamento mensal com a cobrança junto, se quiser.
- Acompanhe as notas emitidas pela consulta do agendamento ou pela lista de notas.
Boas práticas
- Teste tudo em homologação antes de emitir em produção.
- Use sempre
Idempotency-Keynas emissões e guarde a suaexternalReference. - Nunca repita uma emissão que está em
verification_required: espere a consulta resolver. - Trate os erros pelo
code, não pelo texto damessage, que pode mudar. - Respeite o
429: espere e tente de novo com intervalo crescente. - Guarde a chave num cofre de senhas e use uma credencial por sistema, com só as permissões necessárias.
- Registre o
requestIddos erros no seu sistema para facilitar o suporte.