Consulta de Inscrição Estadual via API: Tutorial Completo + Comparativo 2026
Consultar Inscrição Estadual (IE) via API é uma chamada HTTP que retorna em segundos o status cadastral, razão social, CNAE e município de um CNPJ ou CPF de produtor rural em qualquer um dos 27 estados brasileiros. Substitui a consulta manual no SINTEGRA — que exige captcha, sessão por estado e leva 60 a 90 segundos — por uma única requisição programática integrável ao seu ERP, sistema próprio ou pipeline de cadastro.
Este artigo mostra o tutorial completo da API FiscalAPI com exemplos em cURL, Node.js e Python, o tratamento de erros que toda integração precisa, e quando faz sentido migrar do SINTEGRA manual para uma API.
Por que API e não scraping ou SINTEGRA manual#
Scraping direto do SINTEGRA ou dos portais SEFAZ falha por 3 razões estruturais:
- Captcha em todos os 27 portais SEFAZ. Solver de captcha (2captcha, Anticaptcha) custa entre R$ 0,05 e R$ 0,15 por resolução e adiciona segundos de latência.
- Variação entre portais. Cada SEFAZ tem layout, formato de input e fluxo de sessão distintos. Manter 27 scrapers funcionando exige um time inteiro.
- Instabilidade. SP entra em manutenção noturna; alguns estados oscilam aos fins de semana. Você precisa de retry, fallback e monitoramento permanente.
API de provedor especializado resolve tudo: 1 endpoint único, captcha tratado internamente, fallback automático entre canais (SINTEGRA, portais SEFAZ) e cache inteligente que diminui consumo sem perder atualidade.
Tutorial — primeira consulta em 5 minutos#
1. Criar conta + gerar API key#
Acesse fiscalapi.com.br, assine o plano que melhor atende seu volume (a partir de R$ 19,99/mês), e gere a chave em Configurações → API Keys → Nova chave. Os planos disponíveis são:
| Plano | Mensal | Consultas/mês |
|---|---|---|
| Lite | R$ 19,99 | 30 |
| Starter | R$ 50,00 | 500 |
| Pro | R$ 130,00 | 2.000 |
| Enterprise | R$ 250,00 | Ilimitado |
Todos os planos incluem dashboard sem código + API + cobertura nos 27 estados.
2. Endpoint REST#
GET https://api.fiscalapi.com.br/api/consultar?uf={uf}&cnpj={cnpj}
Headers: Authorization: Bearer {API_KEY} Parâmetros:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| uf | string | sim | Sigla da UF (SP, MG, RS, etc.) |
| cnpj | string | um obrigatório | CNPJ sem formatação, 14 dígitos |
| cpf | string | um obrigatório | CPF sem formatação, 11 dígitos (uso: produtor rural) |
| ie | string | um obrigatório | Inscrição Estadual, se quiser consulta por IE direto |
Informe um entre cnpj, cpf ou ie. Enviar mais de um retorna erro PARAMETRO_CONFLITANTE.
3. cURL#
curl -X GET "https://api.fiscalapi.com.br/api/consultar?uf=MT&cpf=12345678900" \
-H "Authorization: Bearer SUA_API_KEY" Resposta:
{
"request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"document": "12345678900",
"document_type": "cpf",
"uf": "MT",
"cached": false,
"results": [
{
"inscricao_estadual": "13.123.456-7",
"razao_social": "JOAO DA SILVA FAZENDA SANTA MARIA",
"situacao_ie": "ATIVA",
"situacao_cadastral": "ATIVA",
"uf_ie": "MT",
"tipo_ie": "PRODUTOR RURAL",
"municipio": "RONDONOPOLIS",
"cnae_codigo": "0111-3/01",
"cnae_descricao": "CULTIVO DE ARROZ",
"cpf_cnpj": "123.456.789-00"
}
]
} 4. Node.js (fetch nativo, Node 22+)#
async function consultarIE({ uf, cnpj, cpf, ie }) {
const url = new URL("https://api.fiscalapi.com.br/api/consultar");
url.searchParams.set("uf", uf);
if (cnpj) url.searchParams.set("cnpj", cnpj);
else if (cpf) url.searchParams.set("cpf", cpf);
else if (ie) url.searchParams.set("ie", ie);
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.FISCALAPI_KEY}` },
});
const data = await res.json();
if (!res.ok) {
throw new Error(`${data.error}: ${data.message}`);
}
return data;
}
const ie = await consultarIE({ uf: "SP", cnpj: "00000000000000" });
const primeiro = ie.results?.[0];
if (!primeiro || primeiro.situacao_ie !== "ATIVA") {
console.warn(`IE irregular: ${primeiro?.situacao_ie ?? "nao localizada"}`);
} 5. Python#
import os
import requests
def consultar_ie(uf: str, *, cnpj: str | None = None, cpf: str | None = None, ie: str | None = None) -> dict:
params = {"uf": uf}
if cnpj:
params["cnpj"] = cnpj
elif cpf:
params["cpf"] = cpf
elif ie:
params["ie"] = ie
r = requests.get(
"https://api.fiscalapi.com.br/api/consultar",
params=params,
headers={"Authorization": f"Bearer {os.environ['FISCALAPI_KEY']}"},
timeout=15,
)
r.raise_for_status()
return r.json()
resp = consultar_ie("MT", cpf="12345678900")
primeiro = resp["results"][0] if resp["results"] else None
if not primeiro or primeiro["situacao_ie"] != "ATIVA":
raise ValueError(f"IE irregular: {primeiro and primeiro['situacao_ie']}") Estratégia de cache#
O campo cached na resposta indica se o resultado veio do cache interno da FiscalAPI. Vantagens:
- Latência menor.
- Não conta — em alguns casos — contra o limite do plano.
- Reduz pressão sobre os portais SEFAZ, que são instáveis.
Boas práticas no seu lado:
| Caso de uso | Estratégia |
|---|---|
| Cliente recorrente em ERP | Aceitar resposta cacheada |
| Fornecedor em due diligence pontual | Aceitar resposta cacheada |
| Pré-emissão de NF-e crítica | Validar pela resposta com cache + revalidar diretamente no portal se mais segurança for necessária |
| Onboarding de marketplace | Aceitar resposta cacheada |
Se você manteve um cache próprio do seu lado, a recomendação é TTL de 7 a 30 dias para CNPJs ativos. Para produtor rural com renovações sazonais e operação intermitente, prefira TTL menor (até 7 dias).
Tratamento de erros#
A API retorna respostas estruturadas em caso de erro, no formato:
{
"request_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"error": "PARAMETRO_AUSENTE",
"message": "Informe cpf, cnpj ou ie"
} Códigos retornados:
| HTTP | error | Significado |
|---|---|---|
| 400 | PARAMETRO_AUSENTE | Faltou cpf, cnpj ou ie |
| 400 | PARAMETRO_CONFLITANTE | Mais de um documento informado |
| 400 | UF_NAO_SUPORTADA | UF inexistente ou não habilitada |
| 400 | DOCUMENTO_INVALIDO | Documento sem dígito verificador válido |
| 401 | (sem corpo) | API key ausente ou inválida |
| 429 | LIMITE_DEMO | Excedeu rate limit demo (3 consultas/minuto por IP) |
| 502 | CAPTCHA_FALHOU | Falha na resolução do captcha do SEFAZ |
| 503 | SITE_INDISPONIVEL | SEFAZ fora do ar |
| 500 | ERRO_INTERNO | Erro inesperado — abrir ticket |
Retry recomendado#
Para 502 e 503 (problemas do SEFAZ), retry com backoff exponencial até 3 tentativas:
async function consultarComRetry(args, tentativas = 3) {
for (let i = 0; i < tentativas; i++) {
try {
return await consultarIE(args);
} catch (err) {
const transient = /502|503/.test(err.message);
if (!transient || i === tentativas - 1) throw err;
const espera = Math.min(2 ** i * 1000 + Math.random() * 500, 10000);
await new Promise(r => setTimeout(r, espera));
}
}
} Para 400 (parâmetro inválido), não tentar de novo — o input está errado.
Quando vale a pena migrar do SINTEGRA manual#
Faz sentido considerar API quando aparece pelo menos um destes:
- Mais de 20-30 consultas/mês — operador manual perde mais tempo do que o plano Lite custa.
- Necessidade de validação em tempo real no momento do cadastro (sistema próprio, ERP, marketplace).
- Operação multi-estado — gerenciar 27 portais com 27 captchas é inviável.
- Compliance recorrente — verificar fornecedores ativos 1x por mês (LGPD, lei anticorrupção, lavagem de dinheiro).
- Validação de NF-e pré-emissão — rejeição NF-e por IE inválida (código 215) custa retrabalho e atraso na entrega da mercadoria.
Os três indicadores comuns de "passou da hora":
- Você tem uma planilha "Excel — IEs a validar" que cresce mais rápido do que a equipe consegue limpar.
- Sua equipe fiscal já reclamou de captcha do SEFAZ.
- Sua área comercial ou crédito já fechou negócio sem validar IE — e o cliente bateu rejeição na primeira NF-e.
Boas práticas de integração#
1. Não armazene API key no front-end. Toda chamada deve ser feita pelo backend. Front-end que chama API direto vaza chave no DevTools.
2. Timeout client-side ≥ 15s. SEFAZ pode demorar. Timeout curto demais gera retries desnecessários.
3. Log estruturado. Salve request_id, cached e timestamp da consulta na sua base — útil para auditoria, troubleshooting e suporte.
4. Validação de input. CNPJ com dígito verificador errado, UF inválida, CPF de 10 dígitos — valide antes de chamar a API, economiza cota.
5. Trate `results` como array. Mesmo quando você espera 1 resultado, alguns CPFs de produtor rural retornam múltiplas IEs (propriedades em municípios diferentes do mesmo estado). Use results[0] defensivamente.
6. Use o dashboard para casos pontuais. Antes de codar a integração, valide o caso de uso no dashboard FiscalAPI — mesma API por trás, zero código.
Perguntas frequentes#
A API funciona para CPF de produtor rural? Sim. Use o parâmetro cpf em vez de cnpj. A resposta indica tipo_ie: "PRODUTOR RURAL" quando o cadastro é dessa categoria.
Qual o limite de requisições por minuto? Usuários autenticados (com API key) seguem o rate limit do plano contratado. Usuários demo (sem API key) podem fazer no máximo 3 consultas por minuto por IP, e recebem dados parcialmente mascarados.
E se eu não souber a UF da empresa? A API exige uf. Para descobrir a UF a partir do CNPJ, faça primeiro uma consulta CNPJ na Receita Federal (ou pelo dashboard FiscalAPI) e use o estado da matriz ou filial relevante.
Existe SDK oficial? A API REST é simples o suficiente para integrar com o cliente HTTP nativo de qualquer linguagem. Os exemplos em Node.js e Python deste artigo são autocontidos.
Como migrar de outro provedor (SINTEGRA-WS, Infosimples, etc.)? A estrutura de query é parecida; o que muda são os nomes dos campos de resposta. Mapear results[0].situacao_ie → o equivalente no outro provedor é geralmente trabalho de 1 dia.
A FiscalAPI revende dados ou usa para outros fins? Não. Dados consultados são exclusivos do cliente que fez a consulta. Para detalhes, ver os termos no site.
Próximo passo#
Conheça os planos da FiscalAPI — a partir de R$ 19,99/mês com dashboard sem código, API integrada para os 27 estados, documentação em PT-BR. Para começar a testar antes de assinar, use o demo público no dashboard (3 consultas/minuto por IP). Documentação técnica em docs.fiscalapi.com.br.
Artigos relacionados#
- Como Consultar Inscrição Estadual em 2026: Guia Definitivo
- Como integrar a API FiscalAPI em 5 minutos
- Situação Cadastral da Inscrição Estadual: o que cada status significa
- Consulta SINTEGRA: como consultar a Inscrição Estadual nos 27 estados
- Por que sua consulta de CNPJ está desatualizada (e como obter o dado ao vivo)
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 →