NF-e rejection 180: check the issuer's tax regime (CRT)

Starting November 16, 2026, SEFAZ compares the CRT (tax regime code) on NF-e and NFC-e invoices with the regime of the issuer's CNPJ in the Receita Federal database (LCC-RFB, which Receita shares with the SEFAZ). If they do not match, the invoice comes back with rejection 180. The rule comes from Technical Note (NT) 2026.007, the same one behind the recipient rejections 181 and 182.

The CRT is in the invoice XML, but it comes from the issuer's record in your ERP or invoicing system: usually the company changed its tax regime and the record still has the old CRT. This guide shows what to do, which CRT matches each situation and how to check the regime through the CNPJAPI API before issuing.

Got a 180 rejection? What to do

  1. Look up the CNPJ of the issuing company and check the SimplesNacional block in the response.
  2. Compare it with the CRT set up in your invoicing system, using the table below.
  3. Fix the CRT in the issuer's record (in your ERP or invoicing system) and transmit again.

The most common cases are an MEI that lost its MEI status and still issues with CRT 4, and a company excluded from Simples Nacional that still uses CRT 1. If you are unsure about the right regime, check with your accountant before changing the record. If the company should be in Simples Nacional and the lookup shows it is not, the fix is to sort out its status with your accountant, not to change the CRT.

Which CRT to use

CRT on the NF-e Regime What the lookup should show
1 Simples Nacional OpcaoPeloSimples: true and OpcaoPeloMEI: false
2 Simples Nacional, above the gross revenue sublimit OpcaoPeloSimples: true and OpcaoPeloMEI: false
3 Regular regime (Regime Normal) OpcaoPeloSimples: false, or SimplesNacional null
4 Simples Nacional, 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 also gets rejection 180.

The response also includes the dates (DataOpcaoSimples, DataExclusaoSimples, DataOpcaoMEI and DataExclusaoMEI). Each exclusion date refers to its own regime: when the option is false, it shows when the company left. When the option is still true and the exclusion date is in the future, the exit is already scheduled and the CRT must change on that date.

Check it via API

Look up the issuer's CNPJ with GET /{cnpj}. To try it without an account, use the public test key with the fictitious sample 99999999000191, which is a Simples Nacional company (see Authentication):

curl "https://api.cnpjapi.com.br/99999999000191" \
  -H "Authorization: Bearer cnpj_teste_exemplos"
"SimplesNacional": {
  "OpcaoPeloSimples": true,
  "DataOpcaoSimples": "15/08/2019",
  "DataExclusaoSimples": "",
  "OpcaoPeloMEI": false,
  "DataOpcaoMEI": "",
  "DataExclusaoMEI": ""
}

For a company outside Simples Nacional, SimplesNacional comes back null (that is the case of the other test key sample, 98765432000198).

In Python, a check to run when registering the issuer or before transmitting:

import requests

API_KEY = "cnpj_teste_exemplos"  # replace with your key


def crt_esperado(cnpj: str) -> set[int]:
    r = requests.get(
        f"https://api.cnpjapi.com.br/{cnpj}",
        headers={"Authorization": f"Bearer {API_KEY}"},
        timeout=10,
    )
    r.raise_for_status()

    simples = r.json()["SimplesNacional"]
    if simples and simples["OpcaoPeloMEI"]:
        return {4}  # MEI
    if simples and simples["OpcaoPeloSimples"]:
        return {1, 2}  # Simples Nacional
    return {3}  # Regime Normal


crt_da_nota = 1
if crt_da_nota not in crt_esperado("99999999000191"):  # replace with the issuer's CNPJ
    print("CRT does not match the regime at Receita: risk of rejection 180")

In Node.js:

async function crtEsperado(cnpj) {
  const r = await fetch(`https://api.cnpjapi.com.br/${cnpj}`, {
    headers: { Authorization: "Bearer cnpj_your_key" },
  });
  if (!r.ok) throw new Error(`HTTP ${r.status}`);

  const { SimplesNacional: simples } = await r.json();
  if (simples?.OpcaoPeloMEI) return [4]; // MEI
  if (simples?.OpcaoPeloSimples) return [1, 2]; // Simples Nacional
  return [3]; // Regime Normal
}

Where it fits in your system

  1. When registering the issuer: when you add the company to your ERP or invoicing system, look up the CNPJ and suggest the CRT from the table above.
  2. Periodic revalidation: the regime changes (exclusion from Simples, loss of MEI status). Revalidate issuing companies before November 16 and monthly after that. If you issue for many companies, as accounting firms do, use batch lookup.
  3. At issuing time: if the configured CRT is not among the expected ones, warn the user with a clear message ("this company's regime at Receita is Simples Nacional, MEI") instead of letting the invoice come back rejected.

Rejection 180 and rejection 481

Both are about the issuer's CRT, but they compare it against different databases. 481 compares it with the state SEFAZ registry and already existed. 180 is new and compares it with the Receita Federal database. If your invoices started getting 180, check the regime at Receita. If they get 481, the state registry also needs updating.

Frequently asked questions

What is NF-e rejection 180? It is the rejection issued when the CRT (tax regime code) on the invoice does not match the regime of the issuer's CNPJ in the Receita Federal database. It was created by NT 2026.007.

How do I fix rejection 180? Look up the issuing company's CNPJ, check whether it is a Simples Nacional company or an MEI and fix the CRT in your invoicing system: 1 or 2 for Simples Nacional, 3 for the regular regime and 4 for an MEI.

When does rejection 180 take effect? In production, from November 16, 2026, with testing since October 26, 2026, together with the other NT 2026.007 rules. The dates have been postponed more than once: check the NF-e National Portal.

What is the difference between rejection 180 and 481? 481 compares the CRT with the state SEFAZ registry. 180 compares it with the Receita Federal database.

Does it apply to NFC-e? Yes. The issuer rule applies to NF-e (model 55) and NFC-e (model 65), when the issuer is identified by CNPJ.

Next steps