Como consultar NFS-e pela chave de acesso via API
Consulte uma NFS-e do padrão nacional só com a chave de acesso de 50 dígitos, sem certificado digital. Dados da nota em JSON e, se quiser, o PDF do DANFSe.
Atualizado em
Para consultar uma NFS-e pela chave de acesso, chame GET /api/consultar-nfse?chave=<50 dígitos> com a sua chave de API: a FiscalAPI devolve a nota em JSON (emitente, tomador, serviço, ISSQN, tributos federais e tipo de geração) e, com danfse=true, o PDF do DANFSe. Não precisa de certificado digital, e quem consulta não precisa ser o emitente nem o tomador.
- Custo por nota entregue: de R$ 0,05 (Enterprise) a R$ 2,01 (Lite). Chave inválida, nota não encontrada e falha não são cobradas.
- Uso típico: o contas a pagar confere a nota de serviço recebida (valores, retenções e ISS) sem pedir PDF ou XML ao prestador.
- Comece: crie a conta e a chave de API. A consulta sai pela API ou no painel da FiscalAPI, sem programar.
Resumo
| Item | Valor |
|---|---|
| Endpoint | GET https://api.fiscalapi.com.br/api/consultar-nfse |
| Você envia | chave (50 dígitos) e, opcional, danfse=true |
| Volta | Dados da NFS-e em JSON e, opcional, o PDF do DANFSe em base64 |
| Quais notas | NFS-e do padrão nacional (cobertura) |
| Notas por requisição | 1 |
| Tempo | 30 a 60 s em geral, até cerca de 90 s (detalhes) |
| Precisa de certificado? | Não |
| XML da NFS-e? | Não. A resposta é JSON (e o PDF, se pedido). |
Quanto custa cada chamada
| Chamada | Lite | Starter | Pro | Enterprise |
|---|---|---|---|---|
NFS-e entregue (200), na franquia do plano | R$ 2,01 (3 consultas) | R$ 0,30 (3 consultas) | R$ 0,195 (3 consultas) | R$ 0,05 (2 consultas) |
NFS-e entregue (200), na recarga | — | R$ 0,36 | R$ 0,21 | R$ 0,05 |
Chave inválida, nota não encontrada, limite ou falha (4xx, 5xx) | Não cobra | Não cobra | Não cobra | Não cobra |
É o mesmo preço do XML de NF-e sem certificado. O plano Lite não tem recarga. Veja Planos e limites.
Cobrança
- Só a resposta
200é cobrada, com ou sem o PDF do DANFSe. Pedir o PDF não muda o preço. - Pela API, a resposta do cache também cobra (
cached: true). O resultado de cada chave fica guardado por até 24 horas, e qualquer consulta à mesma chave nesse período volta na hora e é cobrada pelo mesmo preço. - No painel, repetir a mesma chave em até 24 horas na mesma conta não cobra de novo.
- Não cobra: chave inválida (
400), nota não encontrada (404), saldo, termos ou limite (402,409,429) e falha (500,502,503,504). - A chave é validada antes de qualquer cobrança: tamanho, só números e dígito verificador.
- Pela API, pede plano ou saldo. Sem eles, a resposta é
402. As 10 consultas grátis do mês valem só no painel.
Limites e tempo
- Uma chave por requisição. Para várias notas, faça uma requisição por chave.
- Até 2 consultas de NFS-e em andamento por conta ao mesmo tempo. A terceira recebe
429 CONSULTAS_SIMULTANEAS(Retry-After: 5). - Por minuto: 5 no Lite, 20 no Starter e 30 no Pro e no Enterprise, contados à parte das outras rotas.
- Tempo: em geral, 30 a 60 s numa nota ainda não consultada; com nova tentativa, até cerca de 90 s. Configure o timeout do seu cliente HTTP para pelo menos 100 segundos: a consulta é encerrada em 95.
- Cache: a mesma chave consultada de novo em até 24 horas volta na hora, com
cached: true(veja Cobrança). Uma chave que deu404volta404na hora por 6 horas. - PDF depois: se a primeira consulta foi sem o PDF, pedir de novo com
danfse=truetambém é rápido.
Autenticação
Envie sua chave no header X-API-Key. Veja Autenticação para detalhes.
Parâmetros de consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
chave | string | Sim | Chave de acesso da NFS-e, 50 dígitos. Espaços, pontos, traços e barras são ignorados, e o prefixo NFS (do atributo Id do XML) é removido. |
danfse | boolean | Não | true inclui o PDF do DANFSe em base64 no campo danfse_pdf_base64. Padrão: false. |
Exemplos
Os exemplos usam uma chave fictícia, com dígito verificador válido: 35503082211222333000181000000000012326100000045676. Troque pela chave da sua nota.
Consultar a NFS-e pela chave
curl --max-time 100 \
"https://api.fiscalapi.com.br/api/consultar-nfse?chave=35503082211222333000181000000000012326100000045676" \
-H "X-API-Key: fapi_sua_chave_aqui"// Node.js 18+ (fetch nativo)
const params = new URLSearchParams({
chave: "35503082211222333000181000000000012326100000045676",
});
const response = await fetch(
`https://api.fiscalapi.com.br/api/consultar-nfse?${params}`,
{
headers: { "X-API-Key": "fapi_sua_chave_aqui" },
signal: AbortSignal.timeout(100_000),
}
);
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const nota = await response.json();
console.log(nota.situacao?.descricao, nota.tributacao_municipal?.valor_issqn);import requests
response = requests.get(
"https://api.fiscalapi.com.br/api/consultar-nfse",
headers={"X-API-Key": "fapi_sua_chave_aqui"},
params={"chave": "35503082211222333000181000000000012326100000045676"},
timeout=100,
)
response.raise_for_status()
nota = response.json()
print((nota.get("situacao") or {}).get("descricao"))
print((nota.get("tributacao_municipal") or {}).get("valor_issqn"))<?php
$url = 'https://api.fiscalapi.com.br/api/consultar-nfse?' . http_build_query([
'chave' => '35503082211222333000181000000000012326100000045676',
]);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['X-API-Key: fapi_sua_chave_aqui'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 100,
]);
$corpo = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
throw new RuntimeException("FiscalAPI respondeu HTTP $status: $corpo");
}
$nota = json_decode($corpo, true);
echo $nota['situacao']['descricao'] ?? '';Consultar e salvar o PDF do DANFSe
# Precisa do jq para extrair o campo do JSON
curl --max-time 100 -s \
"https://api.fiscalapi.com.br/api/consultar-nfse?chave=35503082211222333000181000000000012326100000045676&danfse=true" \
-H "X-API-Key: fapi_sua_chave_aqui" \
| jq -r '.danfse_pdf_base64 // empty' | base64 --decode > danfse.pdfimport { writeFile } from "node:fs/promises";
const params = new URLSearchParams({
chave: "35503082211222333000181000000000012326100000045676",
danfse: "true",
});
const response = await fetch(
`https://api.fiscalapi.com.br/api/consultar-nfse?${params}`,
{
headers: { "X-API-Key": "fapi_sua_chave_aqui" },
signal: AbortSignal.timeout(100_000),
}
);
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const nota = await response.json();
if (nota.danfse_pdf_base64) {
await writeFile("danfse.pdf", Buffer.from(nota.danfse_pdf_base64, "base64"));
} else {
console.log(nota.aviso);
}import base64
import requests
response = requests.get(
"https://api.fiscalapi.com.br/api/consultar-nfse",
headers={"X-API-Key": "fapi_sua_chave_aqui"},
params={
"chave": "35503082211222333000181000000000012326100000045676",
"danfse": "true",
},
timeout=100,
)
response.raise_for_status()
nota = response.json()
if nota.get("danfse_pdf_base64"):
with open("danfse.pdf", "wb") as f:
f.write(base64.b64decode(nota["danfse_pdf_base64"]))
else:
print(nota.get("aviso"))<?php
$url = 'https://api.fiscalapi.com.br/api/consultar-nfse?' . http_build_query([
'chave' => '35503082211222333000181000000000012326100000045676',
'danfse' => 'true',
]);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['X-API-Key: fapi_sua_chave_aqui'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 100,
]);
$corpo = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
throw new RuntimeException("FiscalAPI respondeu HTTP $status: $corpo");
}
$nota = json_decode($corpo, true);
if (!empty($nota['danfse_pdf_base64'])) {
file_put_contents('danfse.pdf', base64_decode($nota['danfse_pdf_base64']));
} else {
echo $nota['aviso'] ?? '';
}Resposta
Campo que não aparece na nota volta null. Valores em reais e alíquotas são números (aliquota: 2.0 = 2%). Datas vêm em ISO 8601, com o fuso (2026-10-15T14:32:10-03:00), quando o formato é reconhecido; senão, como constam na nota.
Campos de nível superior
| Campo | Tipo | Descrição |
|---|---|---|
request_id | string | Identificador único da requisição. |
chave | string | Chave de acesso consultada, já normalizada (50 dígitos). |
numero_nfse | string | Número da NFS-e. |
codigo_municipio_emissor | string | Código IBGE do município emissor (7 dígitos). |
data_geracao | string | Data e hora de geração da NFS-e. |
versao | string | Versão do leiaute da NFS-e. |
dps | object | Declaração de Prestação de Serviço que originou a nota: numero, serie, data_emissao. |
situacao | object | Tipo de geração da nota: codigo e descricao. 100 gerada, 101 de substituição, 102 por decisão judicial, 103 avulsa. O campo situacao não indica cancelamento: cancelamento é um evento registrado à parte. |
emitente | object | Prestador do serviço. Veja abaixo. |
tomador | object | null | Tomador do serviço: cpf_cnpj, inscricao_municipal, nome. |
intermediario | object | null | Intermediário, quando houver (mesmos campos do tomador). |
servico | object | Serviço prestado. Veja abaixo. |
tributacao_municipal | object | ISSQN. Veja abaixo. |
tributacao_federal | object | PIS, COFINS e retenções federais. Veja abaixo. |
total_tributos | array | Totais aproximados de tributos informados na nota: lista de { "descricao", "valor" }. A descricao diz se o valor é em reais ou percentual. |
informacoes_complementares | string | null | Texto livre do emitente. |
ambiente_gerador | string | Ambiente que gerou a nota. |
cached | boolean | true quando a resposta veio do cache (a mesma chave já consultada nas últimas 24 horas). Veja Cobrança. |
danfse_pdf_base64 | string | null | PDF do DANFSe em base64. Só com danfse=true. |
aviso | string | null | Preenchido quando o PDF foi pedido mas não pôde ser gerado naquele momento. Os dados da nota vêm normalmente; tente o PDF de novo em instantes. |
emitente
| Campo | Tipo | Descrição |
|---|---|---|
razao_social | string | Nome ou razão social do prestador. |
cpf_cnpj | string | CPF ou CNPJ, só números. |
inscricao_municipal | string | null | Inscrição municipal. |
situacao_simples_nacional | string | null | Situação no Simples Nacional informada na nota. |
regime_especial_tributacao | string | null | Regime especial de tributação do ISSQN. |
endereco | object | null | logradouro, numero, complemento, bairro, cep, municipio, uf. |
servico
| Campo | Tipo | Descrição |
|---|---|---|
pais | string | null | País da prestação. |
municipio | string | null | Município da prestação. |
codigo_tributacao_nacional | string | null | Código de tributação nacional do serviço. |
descricao_codigo | string | null | Descrição do código de tributação. |
item_nbs | string | null | Item da NBS, quando informado. |
descricao | string | null | Descrição do serviço escrita pelo emitente. |
tributacao_municipal
| Campo | Tipo | Descrição |
|---|---|---|
tributacao_issqn | string | null | Tipo de tributação do ISSQN (ex.: 1 - Operação Tributável). |
municipio_incidencia | string | null | Município onde o ISSQN incide. |
valor_servico | number | null | Valor do serviço, em reais. |
desconto_incondicionado | number | null | Desconto incondicionado, em reais. |
deducoes | number | null | Deduções e reduções, em reais. |
beneficio_municipal | number | null | Benefício municipal, em reais. |
base_calculo | number | null | Base de cálculo do ISSQN, em reais. |
aliquota | number | null | Alíquota do ISSQN em percentual (2.0 = 2%). |
valor_issqn | number | null | Valor do ISSQN, em reais. |
retencao | string | null | Se o ISSQN foi retido (ex.: 1 - Não Retido). |
tributacao_federal
| Campo | Tipo | Descrição |
|---|---|---|
situacao_pis_cofins | string | null | Situação tributária do PIS/COFINS. |
base_calculo_pis_cofins | number | null | Base de cálculo do PIS/COFINS, em reais. |
aliquota_pis, aliquota_cofins | number | null | Alíquotas em percentual. |
valor_pis, valor_cofins | number | null | Valores em reais. |
irrf | number | null | IRRF retido, em reais. |
contribuicoes_sociais_retidas | number | null | Contribuições sociais retidas, em reais. |
contribuicao_previdenciaria_retida | number | null | Contribuição previdenciária retida, em reais. |
Exemplo de resposta
Dados fictícios. Os textos (como tributacao_issqn e retencao) vêm como estão na nota e podem variar de uma nota para outra.
{
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"chave": "35503082211222333000181000000000012326100000045676",
"numero_nfse": "123",
"codigo_municipio_emissor": "3550308",
"data_geracao": "2026-10-15T14:32:10-03:00",
"versao": "1.01",
"dps": {
"numero": "123",
"serie": "00001",
"data_emissao": "2026-10-15T14:32:02-03:00"
},
"situacao": { "codigo": "100", "descricao": "NFS-e Gerada" },
"emitente": {
"razao_social": "EMPRESA EXEMPLO SERVICOS LTDA",
"cpf_cnpj": "11222333000181",
"inscricao_municipal": "1234567",
"situacao_simples_nacional": "Microempresa ou Empresa de Pequeno Porte (ME/EPP)",
"regime_especial_tributacao": "Nenhum",
"endereco": {
"logradouro": "RUA EXEMPLO",
"numero": "100",
"complemento": null,
"bairro": "CENTRO",
"cep": "01001000",
"municipio": "São Paulo",
"uf": "SP"
}
},
"tomador": {
"cpf_cnpj": "99888777000166",
"inscricao_municipal": null,
"nome": "CLIENTE EXEMPLO S.A."
},
"intermediario": null,
"servico": {
"pais": "Brasil",
"municipio": "São Paulo/SP",
"codigo_tributacao_nacional": "010401",
"descricao_codigo": "Elaboração de programas de computadores, inclusive de jogos eletrônicos, independentemente da arquitetura construtiva da máquina em que o programa será executado, incluindo tablets, smartphones e congêneres.",
"item_nbs": null,
"descricao": "Licenciamento de software - outubro/2026"
},
"tributacao_municipal": {
"tributacao_issqn": "1 - Operação Tributável",
"municipio_incidencia": "São Paulo/SP",
"valor_servico": 1500.0,
"desconto_incondicionado": 0.0,
"deducoes": 0.0,
"beneficio_municipal": 0.0,
"base_calculo": 1500.0,
"aliquota": 2.0,
"valor_issqn": 30.0,
"retencao": "1 - Não Retido"
},
"tributacao_federal": {
"situacao_pis_cofins": "Não informado",
"base_calculo_pis_cofins": 0.0,
"aliquota_pis": 0.0,
"valor_pis": 0.0,
"aliquota_cofins": 0.0,
"valor_cofins": 0.0,
"irrf": 0.0,
"contribuicoes_sociais_retidas": 0.0,
"contribuicao_previdenciaria_retida": 0.0
},
"total_tributos": [
{
"descricao": "Valor percentual aproximado do total dos tributos da alíquota do Simples Nacional",
"valor": 6.0
}
],
"informacoes_complementares": null,
"ambiente_gerador": "2 - Sefin Nacional NFS-e",
"cached": false,
"danfse_pdf_base64": null,
"aviso": null
}Com danfse=true, danfse_pdf_base64 vem com o PDF (começa com JVBERi0, que é %PDF- em base64).
Estrutura da chave de acesso da NFS-e
A chave da NFS-e do padrão nacional tem 50 dígitos. Na chave fictícia dos exemplos:
| Posição | Tamanho | Campo | Exemplo |
|---|---|---|---|
| 1–7 | 7 | Código IBGE do município emissor | 3550308 (São Paulo) |
| 8 | 1 | Ambiente gerador | 2 |
| 9 | 1 | Tipo de inscrição do emitente (1 = CPF, 2 = CNPJ) | 2 |
| 10–23 | 14 | CPF ou CNPJ do emitente | 11222333000181 |
| 24–36 | 13 | Número da NFS-e | 0000000000123 |
| 37–40 | 4 | Ano e mês de emissão (AAMM) | 2610 (outubro de 2026) |
| 41–49 | 9 | Código numérico | 000004567 |
| 50 | 1 | Dígito verificador (módulo 11, pesos 2 a 9 da direita para a esquerda) | 6 |
A chave aparece no DANFSe e no XML da nota (atributo Id, depois do prefixo NFS). A API aceita a chave formatada, com espaços ou pontos, e com o prefixo NFS.
Cobertura
A consulta cobre NFS-e do padrão nacional: notas emitidas no Emissor Nacional ou compartilhadas com o Ambiente de Dados Nacional. Nota de município que usa sistema próprio e não compartilha com o padrão nacional pode voltar 404 NFSE_NAO_ENCONTRADA, mesmo que exista.
Notas com chave de 44 dígitos são NF-e, não NFS-e: use XML de NF-e sem certificado.
Códigos de erro
Os erros seguem o formato RFC 7807: o código fica no campo title. Nenhum deles é cobrado.
| Código | HTTP Status | Descrição |
|---|---|---|
PARAMETRO_AUSENTE | 400 | Chave de acesso não informada. |
CHAVE_INVALIDA | 400 | Chave com tamanho diferente de 50, com letras ou com dígito verificador que não confere. A mensagem diz o motivo. |
LIMITE_ATINGIDO | 402 | Saldo insuficiente no plano e na recarga, ou conta sem plano nem saldo. |
API_KEY_ERROR | 403 | Chave de API ausente, inválida ou revogada. |
NFSE_NAO_ENCONTRADA | 404 | Não há NFS-e do padrão nacional para essa chave. Confira a chave. A mesma chave volta 404 na hora por 6 horas. |
TERMS_UPDATE_REQUIRED | 409 | Os Termos de Uso foram atualizados. Aceite a nova versão no painel para continuar. |
RATE_LIMIT_EXCEEDED | 429 | Limite de requisições por minuto excedido. Aguarde o tempo do header Retry-After. Pode vir como {"error", "message"} (limite da rota) ou em RFC 7807 (limite do plano). |
CONSULTAS_SIMULTANEAS | 429 | A conta já tem 2 consultas de NFS-e em andamento. Aguarde alguma terminar (Retry-After: 5). |
LIMITE_FALHAS_DIARIO | 429 | Muitas consultas de NFS-e sem resultado no dia. Tente de novo depois do horário do header Retry-After. |
ERRO_INTERNO | 500 | Erro inesperado no servidor. |
FONTE_INDISPONIVEL | 502 | A fonte oficial não respondeu como esperado. Tente de novo em alguns minutos. |
FONTE_TEMPORARIAMENTE_INDISPONIVEL | 503 | Instabilidade momentânea na fonte oficial. Tente de novo depois do Retry-After (30 s). |
CONSULTA_EM_ANDAMENTO | 503 | A mesma chave já está sendo consultada, ou há muitas consultas ao mesmo tempo. Tente de novo depois do Retry-After (15 s). |
FEATURE_UNDER_REVIEW | 503 | Funcionalidade temporariamente indisponível. |
TIMEOUT | 504 | A consulta passou de 95 segundos. Tente de novo. Corpo: {"request_id", "error": "TIMEOUT", "message"}, sem o formato RFC 7807. |
Integração com ERPs
A chamada é um GET com o header X-API-Key, em geral na entrada da nota de serviço ou na conferência do contas a pagar. Não existe conector pronto.
| Sistema | Como chamar a API REST |
|---|---|
| TOTVS Protheus | Num fonte ADVPL/TLPP, com a classe FWRest ou a função HttpGet. |
| SAP (ECC, S/4HANA) | Em ABAP, com cl_http_client, ou por um fluxo no SAP Integration Suite. |
| Sankhya, Senior, Omie, Bling | Por um serviço intermediário (script, n8n, Make) que chama a FiscalAPI e grava o resultado pela API do ERP. |
| Odoo | Num módulo próprio em Python, com requests. |
Perguntas frequentes
Como consultar uma NFS-e pela chave de acesso?
Chame GET https://api.fiscalapi.com.br/api/consultar-nfse?chave=<50 dígitos> com o header X-API-Key. A resposta traz emitente, tomador, serviço, ISSQN e tributos federais da nota em JSON. Sem programar, a mesma consulta sai no painel da FiscalAPI. Com danfse=true, vem também o PDF do DANFSe em base64.
Precisa de certificado digital para consultar NFS-e?
Não. Basta a chave de acesso de 50 dígitos. Quem consulta não precisa ser o emitente nem o tomador da nota.
Quanto custa consultar uma NFS-e por API?
Por nota entregue: R$ 2,01 no Lite, R$ 0,30 no Starter, R$ 0,195 no Pro e R$ 0,05 no Enterprise. Chave inválida, nota não encontrada e falha não são cobradas.
A API devolve o XML da NFS-e?
Não. A resposta é JSON com os dados da nota e, se pedido com danfse=true, o PDF do DANFSe em base64.
Quanto tempo leva a consulta de NFS-e?
Em geral, 30 a 60 s; com nova tentativa, até cerca de 90 s. Uma chave já consultada nas últimas 24 horas volta na hora. Configure o timeout do cliente HTTP para pelo menos 100 segundos.
Quantos dígitos tem a chave de acesso da NFS-e?
50 dígitos: código IBGE do município emissor (7), ambiente gerador (1), tipo de inscrição (1), CPF ou CNPJ do emitente (14), número da NFS-e (13), ano e mês de emissão (4), código numérico (9) e dígito verificador (1).
A consulta mostra se a NFS-e foi cancelada?
Não. O campo situacao traz o tipo de geração da nota: 100 gerada, 101 de substituição, 102 por decisão judicial, 103 avulsa. O campo situacao não indica cancelamento: cancelamento é um evento registrado à parte. Não use esse campo como prova de que a nota não foi cancelada.
A consulta funciona para NFS-e de qualquer município?
Funciona para NFS-e do padrão nacional: notas emitidas no Emissor Nacional ou compartilhadas com o Ambiente de Dados Nacional. Nota de município com sistema próprio que não compartilha com o padrão nacional pode voltar 404, e esse 404 não é cobrado.
Dá para consultar várias NFS-e de uma vez?
Faça uma requisição por chave. A conta pode ter até 2 consultas de NFS-e em andamento ao mesmo tempo, dentro do limite por minuto do plano.
Consulta de NFS-e pela chave de acesso · Planos e preços
Esta pagina foi util?
API para baixar o XML da NF-e só com a chave (sem certificado)
Baixe o XML de uma NF-e só pela chave de acesso, sem certificado digital. Cópia para leitura, sem a assinatura digital.
Consultar CNPJ
Consulta dados cadastrais de um CNPJ na Receita Federal (razão social, CNAE, QSA, endereço, Simples Nacional e MEI, contato e mais).