NT 2026.007: validate the recipient's registration before issuing an NF-e
Starting November 16, 2026, SEFAZ checks the recipient's CNPJ against the Receita Federal database when authorizing NF-e and NFC-e invoices. A CNPJ that is not registered, or whose registration status is anything other than Active, gets the invoice rejected (rejections 181 and 182). This is what Technical Note (NT) 2026.007 sets out.
This guide summarizes what changes, lists the new rejections and shows how your ERP or invoicing system can check the registration before transmitting, using the CNPJAPI API.
What changes
NT 2026.007 adds validation rules against the LCC-RFB (Centralized Taxpayer List, the CNPJ database that Receita Federal shares with the state tax offices) and against the CCC (Centralized ICMS Taxpayer Registry). The rules apply to every authorizing SEFAZ.
| What is checked | Database | Rejection |
|---|---|---|
| Recipient CNPJ not registered | LCC-RFB | 181 |
| Recipient CNPJ with a status other than Active | LCC-RFB | 182 |
| Issuer CNPJ not registered or irregular | LCC-RFB | 178 and 179 |
| Issuer tax regime (CRT) different from the registry | LCC-RFB | 180 |
| CNPJ of the pickup or delivery location | LCC-RFB | 183 to 186 |
| Delivery location IE not registered, irregular or not active | CCC | 171, 173 and 175 |
| Delivery location IE missing when required | CCC | 176 |
| Delivery location CNPJ with irregular status in the state | CCC | 177 |
| Pickup location IE or CNPJ (same checks as the delivery location) | CCC | 942, 165, 167, 168 and 169 |
| CNPJ of an event author not registered or irregular | LCC-RFB | 187 and 170 |
Rejections 181 and 182 apply to models 55 (NF-e) and 65 (NFC-e) whenever the recipient's CNPJ is provided, as do the issuer and event author rules. The pickup and delivery location rules apply to NF-e (model 55) only. Rejections 181 and 182 replace the old rule 5E17-70 (rejection 246), which was optional for each SEFAZ and only checked the recipient in specific cases.
The same NT also lets taxpayers that only pay IBS/CBS (with no State Registration) issue NF-e through SVRS. That part is not covered in this guide.
When it takes effect
- Testing (homologação): from October 26, 2026.
- Production: November 16, 2026.
Version 1.10 of the NT set production for November 3, 2026. A notice on the NF-e National Portal dated October 5, 2026 postponed rollout to the dates above. Always check the NF-e National Portal.
Recipient status (rejections 181 and 182)
Look up the customer's CNPJ with GET /{cnpj} and read the SituacaoCadastral field. Code 02 is Active (Ativa), the status SEFAZ requires. Any other code (01 Null, 03 Suspended, 04 Unfit, 08 Closed) leads to rejection 182. A 404 means the CNPJ was not found: double-check the number, because that is the rejection 181 scenario.
curl "https://api.cnpjapi.com.br/00776574000156" \
-H "Authorization: Bearer cnpj_your_key"
"SituacaoCadastral": { "Codigo": "02", "Descricao": "Ativa", "Motivo": null, "Data": "17/03/1995" }
In Python, a check to run when registering the customer or before transmitting:
import requests
API_KEY = "cnpj_your_key"
def recipient_can_receive_nfe(cnpj: str) -> tuple[bool, str]:
r = requests.get(
f"https://api.cnpjapi.com.br/{cnpj}",
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=10,
)
if r.status_code == 404:
return False, "CNPJ not found, check the number (risk of rejection 181)"
r.raise_for_status()
status = r.json()["SituacaoCadastral"]
if status["Codigo"] != "02":
return False, f"Status {status['Descricao']} at Receita Federal (rejection 182)"
return True, "Active"
ok, reason = recipient_can_receive_nfe("00776574000156")
print(ok, reason)
In Node.js:
async function recipientCanReceiveNfe(cnpj) {
const r = await fetch(`https://api.cnpjapi.com.br/${cnpj}`, {
headers: { Authorization: "Bearer cnpj_your_key" },
});
if (r.status === 404) {
return { ok: false, reason: "CNPJ not found, check the number (risk of rejection 181)" };
}
if (!r.ok) throw new Error(`HTTP ${r.status}`);
const { SituacaoCadastral: status } = await r.json();
if (status.Codigo !== "02") {
return { ok: false, reason: `Status ${status.Descricao} at Receita Federal (rejection 182)` };
}
return { ok: true, reason: "Active" };
}
Issuer tax regime (rejection 180)
SEFAZ also compares the CRT on the invoice with the issuer's CNPJ regime at Receita Federal. It is worth checking your own company's record (or each company's, if your system issues for several). The response's SimplesNacional field carries OpcaoPeloSimples and OpcaoPeloMEI:
| CRT on the NF-e | What the response should show |
|---|---|
| 1 (Simples Nacional) or 2 (Simples, above the sub-limit) | OpcaoPeloSimples: true and OpcaoPeloMEI: false |
| 3 (Regular regime) | OpcaoPeloSimples: false, or SimplesNacional null |
| 4 (MEI) | OpcaoPeloMEI: true |
An MEI also shows OpcaoPeloSimples: true, because SIMEI is part of Simples Nacional. So check OpcaoPeloMEI first: an MEI issuing with CRT 1 gets rejection 180.
Delivery location IE (rejections 171, 175 and 176)
When the invoice includes a delivery location, SEFAZ checks its State Registration (IE) in the CCC. Look up the IE of the delivery location's CNPJ (which may differ from the recipient's) in the delivery state with GET /consulta/ie/{cnpj}?uf=SP (see the Look up State Registration guide). Treat as an active IE only the items with indicador: 1 and situacao: "habilitado":
- If the IE on the invoice is not among the active ones, there is a risk of rejection: 171 if it does not exist in the registry, 175 if it exists but is not active in the state. To also see closed registrations, use
incluir_baixadas=true. - If the CNPJ has an active IE in the state and the invoice goes out without the delivery location's IE, it may hit 176, when the state requires that IE.
Where it fits in your system
- When registering the customer: look up the CNPJ on create or update, store the status and block (or warn) when it is not Active.
- Across your existing customer base: revalidate active customers before November 16 and periodically after that. For large volumes, use batch lookup.
- At issuing time: show the user a clear message ("customer's CNPJ is unfit at Receita Federal") instead of letting the invoice come back with a SEFAZ rejection code.
Frequently asked questions
What is NT 2026.007? The NF-e and NFC-e Technical Note that adds validation of registrations against the LCC-RFB (Receita's CNPJ database) and the CCC during authorization, and allows NF-e issuing by taxpayers that only pay IBS/CBS.
When does it go live? On November 16, 2026, with testing from October 26, 2026. The November 3, 2026 date in the NT was postponed by a notice on the NF-e National Portal.
What does rejection 182 mean? That the recipient's CNPJ has a registration status other than Active at Receita Federal (suspended, unfit, closed or null).
And rejection 181? That the recipient's CNPJ is not registered in the Receita Federal database.
Does it apply to NFC-e? Yes. Rejections 181 and 182 apply to models 55 and 65 when the recipient's CNPJ is provided.
Next steps
- Look up a CNPJ: every response field.
- Look up State Registration: the IE by state, from the SEFAZ source.
- CNPJ lookup for ERP: customer and supplier records validated at the source.
Create your free account at https://app.cnpjapi.com.br, generate your API key and make your first lookup in minutes.