CNPJ Alfanumérico — Emissões e DF-e
Este guia detalha o comportamento do CNPJ alfanumérico nos produtos de emissão e distribuição. O princípio de versionamento ("as versões atuais nunca veem CNPJ alfa; o novo versionamento é quem entende" — lembrando que cada produto tem o seu próprio versionamento), os contratos JSON, webhooks, códigos de status e o checklist de migração estão na Documentação técnica. Para as APIs de consulta, veja Consultas.
Mudanças por produto
A regra geral é sempre a mesma, mas cada produto tem suas particularidades. Veja a sua abaixo.
API de Empresas (cadastro)
Endpoint base: https://api.nfe.io/v{version}/companies
| Operação | Versão atual (legado) | Novo versionamento (alfa-aware) |
|---|---|---|
POST /companies com CNPJ numérico | 201 Created, response number | 201 Created, response string |
POST /companies com CNPJ alfa | n/a — não pode mandar string com letras (400) | 201 Created, response string |
GET /companies/{id} de empresa numérica | 200 OK, federalTaxNumber: number | 200 OK, federalTaxNumber: string |
GET /companies/{id} de empresa alfa | 400 Bad Request (requer o novo versionamento) | 200 OK, federalTaxNumber: string |
GET /companies?federalTaxNumber=12ABC... | 400 | 200 OK |
Importante: uma empresa alfa cadastrada pelo novo versionamento continua existindo no banco — ela só é invisível para as versões atuais. Se o cliente em uma versão atual tentar consultá-la, recebe
400(mensagem orientando o novo versionamento). Isso não é bug: é exatamente o princípio "as versões atuais nunca veem alfa" em ação.
API de NF-e / NFC-e
Endpoint base: https://api.nfe.io/v{version}/companies/{companyId}/productinvoices
| Cenário | Versão atual | Novo versionamento |
|---|---|---|
Emissão com issuer.federalTaxNumber numérico | ✅ normal | ✅ normal, response string |
Emissão com issuer.federalTaxNumber alfa | rejeitada na versão atual (a empresa alfa não resolve na V2) | ✅ chave de acesso gerada com DV ASCII−48, XML enviado à SEFAZ |
| Consulta de NF-e emitida no novo versionamento (CNPJ alfa) via endpoint de versão atual | 404 | 200 OK, response string |
Alguns pontos que costumam gerar dúvida:
- Chave de acesso (44 chars) — quando o emissor tem letras no CNPJ, a chave passa a usar Módulo 11 com ASCII−48. Você não precisa se preocupar com isso: a NFE.io gera a chave correta automaticamente.
- DANFE (PDF) — foi atualizado para imprimir o barcode da chave alfa. Se você só consome o PDF, não precisa mudar nada.
- GNRE (PE/ES) — sem nenhuma mudança de contrato para o cliente.
API de NFS-e
Endpoint base: https://api.nfe.io/v{version}/companies/{companyId}/serviceinvoices
| Cenário | Versão atual | Novo versionamento |
|---|---|---|
| Emissão de NFS-e com emissor numérico | ✅ normal | ✅ normal, response string |
| Emissão de NFS-e com emissor alfa | 400 Bad Request (orienta o novo versionamento) | ✅ depende da prefeitura aceitar (gate natural) |
| Consulta de NFS-e emitida no novo versionamento (alfa) via versão atual | 404 | 200 OK, response string |
Atenção, prefeituras: a adoção do CNPJ alfa varia bastante de um município para outro. Algumas prefeituras já atualizaram seus webservices; outras ainda não. A NFE.io não filtra essa resposta — manda a nota para a prefeitura e devolve exatamente o que ela responder. Se a prefeitura ainda rejeita, você recebe o erro como ele vem, sem mascaramento.
Distribuição de Documentos Fiscais (recebimento de DF-e)
Endpoint base: https://api.nfe.io/v{version}/dfe/inbound
| Cenário | Versão atual | Novo versionamento |
|---|---|---|
| Nota inbound recebida com CNPJ emissor numérico | ✅ entregue, number | ✅ entregue, string |
| Nota inbound recebida com CNPJ emissor alfa | documento processado; federalTaxNumber tratado como texto | entregue como string |
| Webhook de nota numérica | ✅ disparado, number | ✅ disparado, string |
| Webhook de nota alfa | formato do payload segue a versão da assinatura/webhook | entregue como string |
Vale esclarecer: no fluxo de Distribuição o
federalTaxNumberpassou a ser tratado como texto — a nota com CNPJ alfanumérico é processada normalmente. O formato e a visibilidade do que cada assinante recebe seguem a versão da assinatura/webhook (não há um número de versão fixo para a Distribuição).