Pular para o conteúdo

API do Fiscalo

Emita NFS-e Nacional a partir do seu sistema e receba o imposto já calculado, com o porquê de cada número. REST, JSON, chave por conta e webhooks assinados.

1. Autenticação

Crie a chave no app, em Configurações > API e webhooks (dono ou administrador, com a verificação em duas etapas). Ela aparece uma vez só. Envie em todas as chamadas:

curl https://api.fiscalo.com.br/v1/empresas \
  -H "Authorization: Bearer fsk_test_SUA_CHAVE"

A chave vale para a conta que a criou; não precisa do cabeçalho de organização. Limite: 300 requisições por minuto por chave. Erros voltam como {"erro": "mensagem"}, com o código HTTP correspondente.

2. Rotas principais

MétodoCaminhoO que faz
GET/v1/empresasEmpresas da conta
GET/v1/empresas/{id}/servicosServiços do catálogo (código nacional e NBS)
GET · POST/v1/empresas/{id}/tomadoresClientes (tomadores): listar e cadastrar
POST/v1/empresas/{id}/calcularCalcula o imposto sem criar nota (Simples, ISS, retenções, IBS/CBS)
POST/v1/empresas/{id}/notasCria o rascunho com o cálculo congelado
POST/v1/empresas/{id}/notas/{nota}/emitirAssina e envia a DPS à Sefin Nacional
GET/v1/empresas/{id}/notas/{nota}Situação, número, chave de acesso e cálculo
GET/v1/empresas/{id}/notas/{nota}/pdf · /xmlDANFSe e XML oficial
POST/v1/empresas/{id}/notas/{nota}/cancelarCancelamento (motivo 1, 2 ou 9 e justificativa)
POST/v1/empresas/{id}/notas/{nota}/substituirSubstituição (nota corrigida que cancela a anterior)

3. Emitir uma nota

Crie o rascunho (o cálculo é feito e guardado nesse momento) e depois emita:

curl -X POST https://api.fiscalo.com.br/v1/empresas/{id}/notas \
  -H "Authorization: Bearer fsk_test_SUA_CHAVE" -H "Content-Type: application/json" \
  -d '{"competencia": "2026-11-20", "servicoId": "…", "tomadorId": "…", "valor": "1500.00"}'

curl -X POST https://api.fiscalo.com.br/v1/empresas/{id}/notas/{nota}/emitir \
  -H "Authorization: Bearer fsk_test_SUA_CHAVE"

A resposta traz status: AUTORIZADA (com número e chave de acesso), REJEITADA (com os erros da Sefin) ou PENDENTE_CONFIRMACAO, que se resolve sozinho e chega pelo webhook.

4. Webhooks

Cadastre a URL (https) no app. Enviamos nota.autorizada, nota.rejeitada, nota.cancelada e nota.substituida, com novas tentativas por até 2 dias se a sua URL falhar:

POST https://seu-sistema.com.br/fiscalo
Fiscalo-Evento: nota.autorizada
Fiscalo-Assinatura: t=1793900000,v1=5d41402abc4b2a76…

{"id": "evt_123", "tipo": "nota.autorizada", "criado_em": "2026-11-05T16:40:46Z", "tentativa": 1,
 "dados": {"id": "…", "empresa_id": "…", "status": "AUTORIZADA", "numero": "128",
           "chave_acesso": "3550308…", "competencia": "2026-11-05", "valor": "1500.00"}}

Confira a assinatura antes de confiar no corpo: HMAC-SHA256 de t + "." + corpo com o segredo do webhook (whsec_…), e recuse eventos com mais de 5 minutos.

import { createHmac, timingSafeEqual } from 'node:crypto'

function assinaturaValida(corpo, cabecalho, segredo) {
  const [, t, v1] = cabecalho.match(/^t=(\d+),v1=([0-9a-f]{64})$/) ?? []
  if (!t || Math.abs(Date.now() / 1000 - Number(t)) > 300) return false
  const esperado = createHmac('sha256', segredo).update(`${t}.${corpo}`).digest()
  return timingSafeEqual(esperado, Buffer.from(v1, 'hex'))
}

Responda com qualquer código 2xx em até 10 segundos. Use o id do evento para não processar o mesmo aviso duas vezes.

Perguntas frequentes

A API já emite notas válidas?

Ainda não. Enquanto o Fiscalo opera em homologação, as chaves são de teste (fsk_test_) e as notas saem na produção restrita da Sefin, sem validade jurídica. A homologação (sandbox) é grátis.

Quanto custa?

Sandbox grátis. Em produção: Start R$ 129,00 por mês (300 notas), Pro R$ 349,00 (2.000), Scale R$ 899,00 (10.000); acima disso R$ 0,07 por nota.

Preciso guardar o certificado digital do meu cliente?

Não. O certificado A1 é enviado uma vez pelo app e fica num cofre de chaves (não exportável). A API só pede a nota; quem assina é o cofre.

Comece no sandbox, de graça.

Crie a conta, gere a chave e emita a primeira nota de teste hoje.

Criar conta grátis