Início / Blog / Artigo

NFS-e Nacional: O Guia Definitivo para Desenvolvedores Integrarem o Padrão ADN do Gov.br

· 8 min de leitura ·

TL;DR

A NFS-e Nacional (ADN/gov.br) unificou a emissão de notas fiscais de serviço em todo o Brasil. Este guia cobre o que mudou, a arquitetura técnica (DPS, mTLS, webhooks), os pontos de dor e código funcional para emitir sua primeira nota em minutos.

1. O Cenário Antes do Padrão Nacional

Se você já integrou NFS-e municipal, sabe do que estou falando:

  • Cada município, um XML diferente — alguns usavam ABRASF 2.01, outros 2.02, 2.03, ou padrão próprio
  • SOAP municipal — sim, SOAP em pleno 202X
  • Timeout síncrono — requests que travavam o ERP por minutos
  • Homologação por CPF — precisava de CPF do contador pra testar
  • Sem webhook — o famoso "deu erro? tenta de novo daqui 5 minutos"

E o pior: se você atendia clientes em múltiplos municípios, precisava manter N integrações diferentes.

2. O Padrão Nacional (ADN/gov.br)

A partir da Resolução do Comitê Gestor do Simples Nacional (CGSN), a NFS-e Nacional unificou o processo:

AspectoAntesAgora (ADN)
FormatoABRASF (várias versões)DPS v1.01 (XML único)
TransporteSOAP municipalREST + mTLS
AutenticaçãoCertificado A1/A3 municipalCertificado A1 por CNPJ
RespostaSíncrona (timeout 30s)Assíncrona (HTTP 202 + webhook)
HomologaçãoPor municípioAmbiente único por tenant
CancelamentoSíncronoAssíncrono com eventos

2.1 O que é a DPS?

A DPS (Documento de Prestação de Serviço) é o XML que substituiu os antigos RPS municipais. Ela segue o XSD oficial v1.01 e contém:

<DPS xmlns="http://www.sped.fazenda.gov.br/nfse" versao="1.01">
  <infDPS Id="DPS202606...">
    <tpAmb>1</tpAmb>           <!-- 1 = produção, 2 = homologação -->
    <dhEmi>2026-06-15T14:30:00-03:00</dhEmi>
    <serie>00001</serie>
    <nDPS>1042</nDPS>
    <cLocEmi>3550308</cLocEmi>

    <!-- Prestador (CNPJ do emitente) -->
    <prest>
      <CNPJ>26361810000167</CNPJ>
      <IM>12345</IM>
    </prest>

    <!-- Tomador -->
    <toma>
      <CNPJ>12345678000195</CNPJ>
      <xNome>Cliente Exemplo LTDA</xNome>
    </toma>

    <!-- Serviço -->
    <serv>
      <cServ>01.03.02</cServ>
      <vServ>15000.00</vServ>
      <vIss>150.00</vIss>
    </serv>
  </infDPS>
</DPS>

2.2 Por que mTLS?

O gov.br exige autenticação mútua via TLS (mTLS). Isso significa que:

  • O servidor (SEFIN) se apresenta com um certificado válido
  • Você também precisa se apresentar com seu certificado A1
  • A conexão é criptografada e mutuamente autenticada

Na prática, você precisa de um certificado A1 (arquivo .pfx) por CNPJ estabelecimento.

3. Arquitetura de uma Integração Robusta

┌─────────────┐     POST /nfse      ┌──────────────┐    mTLS     ┌──────────┐
│   Seu ERP   │  ──────────────────►│  API NFS-e   │────────────►│  SEFIN   │
│  (sistema)  │                     │   (Blit)     │◄────────────│ (gov.br) │
└──────┬──────┘                     └──────┬───────┘    mTLS     └──────────┘
       │                                   │
       │  202 Accepted + id da nota        │
       │◄──────────────────────────────────│
       │                                   │
       │  Webhook: issued / cancelled      │
       │◄──────────────────────────────────│
       │                                   │
       │  GET /nfse/{id} (polling)         │
       │◄──────────────────────────────────│

3.1 Por que assíncrono é melhor?

O fluxo síncrono municipal era um pesadelo:

  • Se o município demorasse 15s pra responder, seu request travava
  • Se desse timeout, você não sabia se a nota foi emitida ou não
  • Você precisava de curl com timeout alto e retry manual

O fluxo assíncrono resolve isso:

  1. Você POST /nfse e recebe HTTP 202 + o id da nota
  2. A emissão vai pra fila e é processada em background
  3. Você recebe um webhook assinado quando a nota é emitida (ou rejeitada)
  4. Opcionalmente, faz polling em GET /nfse/{id}

3.2 Idempotência é obrigatória

Seu ERP pode tentar emitir a mesma nota duas vezes (retry por timeout de rede). Sem idempotência, você emite a nota em dobro.

POST /api/v1/nfse
Idempotency-Key: erp-pedido-991
Content-Type: application/json

{
  "taker_cnpj": "12345678000195",
  "service_amount": 150.00,
  "service_code": "01.03.02",
  "emit_now": true
}

Se você repetir a mesma Idempotency-Key, a API retorna a mesma nota — sem duplicar.

4. Pontos de Dor Comuns e Como Evitá-los

❌ Certificado expirado

O certificado A1 tem validade de 12 meses. Se expirar, suas notas param de ser emitidas.

Solução: Monitore a validade e renove antes do vencimento. Uma boa API de NFS-e avisa com antecedência.

❌ Cota estourada

Se você usa um plano com limite de notas, emitir além da cota pode bloquear novas emissões.

Solução: Prefira planos com overage (notas adicionais pagas por uso). Assim você nunca para de emitir.

❌ Rejeição por validação da DPS

O SEFIN valida a DPS contra o XSD oficial. Um campo fora do formato gera rejeição.

Solução: Use uma API que faça validação prévia antes de enviar ao gov.br.

❌ Contador sem os dados

No fim do mês, o contador precisa de todas as notas — organizadas por CNPJ.

Solução: Automatize o fechamento mensal. ZIP completo (XML + PDF + CSV) por e-mail todo dia 1º.

5. Mão na Massa: Emitindo sua Primeira Nota

# 1. Crie sua conta grátis (5 notas/mês)
#    → https://nfe.blit.app.br/register
#
# 2. Suba seu certificado A1 no painel
#
# 3. Gere um token de API (scope: emit)
#
# 4. Emita sua primeira nota:

curl -X POST https://api.nfe.blit.app.br/api/v1/nfse \
  -H "Authorization: Bearer nft_se…aqui" \
  -H "Idempotency-Key: minha-primeira-nota-001" \
  -H "Content-Type: application/json" \
  -d '{
    "taker_cnpj": "12345678000195",
    "taker_razao": "Cliente Exemplo LTDA",
    "service_code": "01.03.02",
    "service_amount": 1500.00,
    "service_description": "Desenvolvimento de módulo fiscal",
    "emit_now": true
  }'

# Resposta: HTTP 202
# {
#   "async": true,
#   "data": { "id": 42, "status": "pending" }
# }

Em segundos, você recebe o webhook issued com o XML autorizado e o PDF da DANFSe.

6. Checklist para Escolher uma API de NFS-e

RequisitoPrioridadePor quê?
API REST (não SOAP)✅ EssencialLatência, debuggabilidade
Webhooks assinados✅ EssencialSaber em tempo real
Idempotência✅ EssencialEvitar notas duplicadas
Overage✅ EssencialNunca parar de emitir
Fechamento ao contador⚠️ QuaseEconomiza horas todo mês
Ambiente de testes✅ EssencialHomologação separada
OpenAPI/Swagger✅ EssencialGerar cliente automaticamente
Multi-CNPJ⚠️ DependeSe atende mais de um CNPJ
MCP Server🆕 BônusIntegração com IAs

7. Conclusão

O padrão NFS-e Nacional (ADN/gov.br) veio pra simplificar — mas ainda tem complexidade técnica que uma boa API resolve: certificado A1, mTLS, DPS, webhooks, idempotência.

Se você está construindo um sistema que precisa emitir notas fiscais de serviço, não faz sentido implementar tudo isso do zero. Use uma API especializada e foque no que importa: seu produto.

Pronto para testar?

Crie sua conta grátis (5 notas/mês com API completa) e emita sua primeira nota em minutos.

Criar conta grátis → Ver documentação

Publicado por Blit Softwares e Tecnologia Digital LTDA · CNPJ 26.361.810/0001-67