Pular para o conteúdo
FiscalAPI
NF-e

Cliente é contribuinte do ICMS? Como preencher o indIEDest

Equipe FiscalAPI 5 min de leitura
NF-eSEFAZICMSGuiaPython

Toda NF-e pede o indIEDest, o indicador da IE do destinatário. Quem decide o valor é o cadastro do cliente na UF dele, não o que está gravado no ERP há dois anos.

Errar o indicador ou informar uma IE que não está ativa gera rejeição. Cliente vedado na UF gera denegação. Este guia traz a tabela de decisão e o código para automatizar.

Os três valores do indIEDest#

Do Manual de Orientação do Contribuinte (MOC 7.0), Anexo I, campo E16a:

ValorSignificadoTag dest/IE
1Contribuinte do ICMSObrigatória
2Contribuinte isento de inscrição no cadastro de contribuintesNão informar
9Não contribuinte, que pode ou não ter IENão informar

Regras fixas do leiaute:

  • NFC-e: sempre 9, sem IE (rejeição 789).
  • Operação com o exterior: sempre 9, sem IE (rejeição 790).

O que a consulta de IE responde#

Consulte pelo CNPJ (ou CPF) do cliente, na UF do destinatário:

bash
curl -H "X-API-Key: SUA_CHAVE" \
  "https://api.fiscalapi.com.br/api/consultar?uf=PR&cnpj=12345678000199"

Os campos que decidem:

CampoUso
resultsLista de inscrições na UF. Vazia = nenhuma IE encontrada
inscricao_estadualA IE que vai na nota (só os dígitos)
situacao_ieSituação da inscrição: ativa, suspensa, baixada etc.
situacao_nfeDocumentos que o cliente está habilitado a emitir. Para o indIEDest, é informativo

O texto da situação varia por estado: ATIVA, Habilitado, Não habilitado... Normalize antes de comparar (maiúsculas, sem acento).

Tabela de decisão#

Resultado na UF do destinatárioindIEDestdest/IEAção
Uma IE ativa ou habilitada1A IE retornadaEmitir
IE encontrada, mas suspensa, baixada ou não habilitada——Não emitir no automático. Revisar com o fiscal
Nenhuma IE na UF (results vazio)9Não informarEmitir como não contribuinte (veja 696 e 694 abaixo)
Cliente comprovou ser isento de inscrição2Não informarDecisão do fiscal. Várias UFs não aceitam (805)
Mais de uma IE ativa——Usar a do estabelecimento (ou propriedade rural) que recebe a mercadoria
Consulta com erro ou timeout——Não decidir. Tentar de novo

O valor 2 não sai da consulta. Ele depende de um enquadramento que o cliente precisa comprovar.

Rejeições que a consulta evita#

CódigoMensagemCausa comum
232IE do destinatário não informadaCliente tem IE ativa na UF e a nota saiu sem a IE
233IE do destinatário não cadastradaIE digitada errada ou de outra UF
234IE do destinatário não vinculada ao CNPJIE de outra filial ou de outro cliente
306IE do destinatário não está ativa na UFIE suspensa, baixada ou não habilitada
305Destinatário bloqueado na UFCliente bloqueado no cadastro da UF
302 e 303Uso denegadoCliente vedado de operar na UF
728NF-e sem informação da IE do destinatário1 sem a tag IE
791Destinatário isento de IE com a IE informada2 com a tag IE
805SEFAZ do destinatário não permite contribuinte isento2 em UF que não aceita
696Operação com não contribuinte deve indicar consumidor final9 em saída sem indFinal=1
694Não informado o grupo de ICMS para a UF de destino9 em venda interestadual sem o grupo ICMSUFDest

A denegação (302 e 303) é a pior: a nota não é autorizada e o número fica usado.

805: em operação interestadual, não aceitam o 2 AM, BA, CE, GO, MG, MS, MT, PA, PE, RN, SE e SP. A regra tem exceções, como itens com ICMS-ST e operações isentas ou imunes. Em operação interna, cada UF decide.

696 e 694: venda para empresa sem IE é operação com consumidor final (indFinal=1). Se for interestadual, entra o DIFAL a cargo do remetente (EC 87/2015, regulamentada pela LC 190/2022) e a nota exige o grupo ICMSUFDest. Confirme o tratamento com o fiscal.

A partir de 16/11/2026: CNPJ conferido na Receita#

Com a NT 2026.007, a SEFAZ passa a conferir o CNPJ do destinatário na Receita Federal. Não cadastrado gera a rejeição 181. Situação diferente de Ativa gera a 182. Produção em 16/11/2026 (homologação até 26/10/2026).

A mesma NT permite emitente sem IE (contribuinte só de IBS/CBS). Se o seu cliente estiver nesse caso, ele é não contribuinte do ICMS: indIEDest=9.

Código: decidir o indIEDest em Python#

python
import os
import time
import unicodedata

import requests

API = "https://api.fiscalapi.com.br/api/consultar"
CHAVE = os.environ["FISCALAPI_KEY"]  # nunca no código-fonte
SITUACOES_ATIVAS = {"ATIVA", "ATIVO", "HABILITADA", "HABILITADO"}


def normalizar(texto: str) -> str:
    sem_acento = unicodedata.normalize("NFKD", texto or "")
    return "".join(c for c in sem_acento if not unicodedata.combining(c)).strip().upper()


def consultar_ie(uf: str, cnpj: str, tentativas: int = 3) -> list[dict]:
    for _ in range(tentativas):
        resp = requests.get(
            API,
            headers={"X-API-Key": CHAVE},
            params={"uf": uf, "cnpj": cnpj},
            timeout=90,
        )
        if resp.status_code == 429:  # limite do plano: espere o que a API pedir
            time.sleep(int(resp.headers.get("Retry-After", "60")))
            continue
        resp.raise_for_status()  # erro = não decide
        return resp.json()["results"]
    raise RuntimeError("Limite de requisições atingido. Tente mais tarde.")


def decidir_ind_ie_dest(uf_destinatario: str, cnpj: str) -> dict:
    inscricoes = consultar_ie(uf_destinatario, cnpj)

    if not inscricoes:
        # Não contribuinte: sem tag IE. Em saída, a nota exige indFinal=1 (rejeição 696).
        return {"indIEDest": 9, "IE": None, "acao": "emitir"}

    ativas = [i for i in inscricoes if normalizar(i["situacao_ie"]) in SITUACOES_ATIVAS]

    if len(ativas) == 1:
        ie = "".join(ch for ch in ativas[0]["inscricao_estadual"] if ch.isdigit())
        return {"indIEDest": 1, "IE": ie, "acao": "emitir"}

    # Nenhuma ativa, ou mais de uma: decisão humana.
    return {"indIEDest": None, "IE": None, "acao": "revisar", "inscricoes": inscricoes}


print(decidir_ind_ie_dest("PR", "12345678000199"))

O CNPJ do exemplo é fictício. A chave da API exige um plano ativo ou créditos.

Quando consultar#

  • No cadastro do cliente. Grave a IE, a situação e a data da consulta.
  • Antes de faturar, se a última consulta for antiga. Defina a idade máxima com o fiscal.
  • Em rotina periódica, num job seu. Respeite o limite do plano: 5, 20, 60 ou 120 requisições por minuto. Detalhes em rate limiting.
  • Sem código: suba uma planilha de até 20.000 linhas no painel. Veja a consulta de IE em massa.

Para começar, veja a API de consulta de inscrição estadual.


Perguntas frequentes#

Como saber se o cliente é contribuinte do ICMS? Consulte a inscrição estadual pelo CNPJ na UF do cliente. IE ativa indica contribuinte (indIEDest=1). Nenhuma IE na UF indica não contribuinte (9).

Quando usar o indIEDest 2? Quando o cliente é contribuinte, mas está dispensado de inscrição e comprova isso. A consulta não mostra esse enquadramento. Em operação interestadual, 12 UFs rejeitam o 2 (805).

Cliente com IE suspensa pode receber NF-e? Informar uma IE que não está ativa gera a rejeição 306. Não emita no automático: revise o caso com o fiscal ou o contador.

Posso consultar pelo CPF? Sim, para produtor rural com IE no CPF. Use o parâmetro cpf. A busca por CPF depende do estado: São Paulo, por exemplo, só consulta por CNPJ ou pela IE.


Fontes#

Artigos relacionados#

Compartilhar: WhatsApp LinkedIn Twitter

Consulte dados fiscais via API

Consulte Inscrições Estaduais, CNPJs e Certidões Negativas via API REST. Dados direto da SEFAZ e Receita Federal. Planos a partir de R$ 19,99/mês.

Criar conta →