Documentação NotaAPI v2

API REST para emissão de documentos fiscais eletrônicos (NFe, NFCe, NFSe, NFCom). Este guia vai te ajudar a integrar do zero - mesmo que seja sua primeira vez com nota fiscal.

🚀

Primeiros Passos

Emita sua primeira nota em 10 minutos

📖

Glossário

Entenda os termos fiscais essenciais

🏢

Cadastrar Empresa

Primeiro passo: cadastre o emissor

URLs Base

🧪 Homologação (testes)
https://homologacao.notaapi.com.br/v2
🚀 Produção
https://api.notaapi.com.br/v2

Documentos Suportados

TipoModeloDescriçãoUso
nfe55Nota Fiscal EletrônicaVenda de produtos (mercadorias)
nfce65Nota Fiscal de ConsumidorVarejo - vendas para consumidor final
nfse-Nota Fiscal de ServiçoPrestação de serviços
nfcom62Nota Fiscal de ComunicaçãoTelecomunicações (telefonia, internet, TV)

⏱️ Tempo de Resposta

Performance esperada

Emissão NFe/NFCe: 2-5 segundos (SEFAZ) · Emissão NFSe: 3-15 segundos (depende da prefeitura) · Consultas: < 1 segundo

🔄 Ciclo de Vida da Nota Fiscal

Entenda o fluxo completo de uma nota fiscal eletrônica:

1
Criação
POST /nfe
2
Envio SEFAZ
Automático
3
Autorizada
status = 2
4
Eventos
CC-e / Cancelamento

Estados Possíveis

StatusCódigoDescriçãoAções Permitidas
Novo 0 Nota criada, aguardando envio Aguardar processamento
Enviado 1 Enviada para SEFAZ, aguardando resposta Aguardar processamento
Autorizado 2 Nota aprovada pela SEFAZ Cancelar, CC-e, Download PDF/XML
Cancelado 3 Nota cancelada Apenas consulta
Inutilizado 4 Numeração inutilizada Apenas consulta
Erro 5 Rejeitada pela SEFAZ Corrigir e reenviar (nova referência)

Eventos Após Autorização

EventoQuando UsarPrazo
Cancelamento Desistência da operação, erro grave Varia por UF (24h a 168h)
Carta de Correção (CC-e) Corrigir dados secundários (não altera valores) Até 30 dias
Manifestação Confirmar/desconhecer recebimento de NFe de terceiros Sem prazo definido
⚠️ Importante

Após o prazo de cancelamento, a única forma de "anular" uma nota é emitindo uma nota de devolução ou nota de ajuste.

✅ Pré-requisitos

Antes de começar a integração, verifique se você tem tudo pronto:

Para NFe e NFCe (Produtos)

CNPJ Ativo

Empresa com situação cadastral regular na Receita Federal

Inscrição Estadual (IE)

Obrigatória para emitir NFe/NFCe. Obtida na SEFAZ do estado

Certificado Digital A1 (e-CNPJ)

Arquivo .pfx válido (não pode ser A3). Validade de 1 ano. Compre em certificadoras como Serasa, Certisign, etc.

Credenciamento na SEFAZ

Solicitar habilitação para emissão de NFe/NFCe no site da SEFAZ do seu estado

CSC Token (apenas NFCe)

Código de Segurança do Contribuinte - obtido no portal da SEFAZ

Para NFSe (Serviços)

CNPJ Ativo

Empresa com situação cadastral regular

Inscrição Municipal

Cadastro na prefeitura do município onde a empresa está estabelecida

Credenciais da Prefeitura (se aplicável)

Algumas prefeituras exigem usuário/senha ou token específico para integração

Código de Serviço Municipal

Consulte na prefeitura qual código corresponde ao seu tipo de serviço

Dados Fiscais Necessários

DadoOnde ConseguirExemplo
NCM dos produtosTabela TIPI / Contador61091000 (camisetas)
CFOP das operaçõesTabela CFOP / Contador5102 (venda interna)
CST/CSOSNContador102 (SN sem crédito)
Código IBGE da cidadeibge.gov.br3550308 (São Paulo)
Alíquota de ISSPrefeitura2% a 5%

📊 Fluxo de Integração

Visão geral do processo de emissão de documentos fiscais:

1

Cadastrar Empresa

POST /empresa

Dados cadastrais, endereço, regime tributário

2

Upload Certificado

PUT .../certificado

Arquivo .pfx em base64 + senha

3

Emitir Nota

POST /nfe

Envia dados da venda/serviço

4

Consultar Status

GET /nfe/{ref}

Verifica autorização

Download

XML + PDF prontos

Diagrama de Estados da Nota

0 Novo
1 Enviado
2 ✅ Autorizado
ou
5 ❌ Erro
3 Cancelado
💡 Dica: Use Webhooks

Configure webhooks para ser notificado automaticamente quando o status mudar, ao invés de fazer polling.

Autenticação

A API usa HTTP Basic Authentication com sua API Key:

CampoValor
Usuário (username)Sua api_key
Senha (password)vazio
Header
Authorization: Basic {base64(api_key:)}

Exemplo cURL:

curl -X GET https://api.notaapi.com.br/v2/empresa/{id} \
  -u "sua_api_key:" \
  -H "Content-Type: application/json"
💡 Nota sobre o formato

O : após a api_key é obrigatório (indica senha vazia). No cURL, -u "api_key:" já faz a codificação Base64 automaticamente.

⚠️ Mantenha sua API Key segura

Nunca exponha sua api_key no frontend ou em repositórios públicos. Use variáveis de ambiente no backend.

Header companyId

Para endpoints de documentos fiscais (NFe, NFCe, NFSe, NFCom), você precisa enviar o ID da empresa emissora no header:

companyId: uuid-da-empresa-cadastrada

Ambientes

Use o parâmetro ambiente no corpo das requisições:

ValorURL BaseValidade FiscalUso
"Homologacao" homologacao.notaapi.com.br/v2 ❌ Não Testes e desenvolvimento
"Producao" api.notaapi.com.br/v2 ✅ Sim Operação real
🚨 Cuidado com Produção

Notas emitidas em produção são reais e geram obrigações fiscais. Teste exaustivamente em homologação primeiro!

🔐 Certificado Digital

O certificado digital é a identidade eletrônica da empresa e é obrigatório para emitir NFe, NFCe e NFCom.

Tipo Suportado: A1

CaracterísticaCertificado A1
FormatoArquivo .pfx ou .p12
ArmazenamentoEm arquivo (software)
Validade1 ano
Uso na APIEnviado em base64
VantagemPode ser usado em servidores/nuvem
ℹ️ Certificado A3 não suportado

A NotaAPI trabalha apenas com certificados A1 (arquivo). Certificados A3 (token/cartão) não são compatíveis com APIs REST.

Como Obter

  1. Escolha uma Autoridade Certificadora (AC): Serasa, Certisign, Valid, Safeweb, etc.
  2. Selecione o tipo e-CNPJ A1 (para empresas) ou e-CPF A1 (para MEI/pessoa física)
  3. Faça a validação presencial ou por videoconferência
  4. Baixe o arquivo .pfx e guarde a senha em local seguro

Enviar para a API

Use o endpoint PUT /empresa/{id}/certificado:

{
  "pfxCertificado": "MIIKYQIBAzCCCicGCSqGSIb3DQE... (base64 do arquivo .pfx)",
  "pfxSenha": "sua_senha_do_certificado"
}

Converter .pfx para base64:

# Linux/Mac
base64 -i certificado.pfx -o certificado_base64.txt

Validade e Renovação

⚠️ Fique atento à validade

O certificado A1 vence em 1 ano. Configure um alerta para renovar com antecedência. Após o vencimento, não será possível emitir notas!

Para verificar a validade, consulte a empresa:

// Na resposta de GET /empresa/{id}, verifique:
{
  "certVencimento": "2025-12-15T23:59:59Z",
  "certRazaoSocial": "EMPRESA EXEMPLO LTDA",
  "certCnpj": "12345678000199"
}

Primeiros Passos

Siga estes passos para emitir sua primeira nota fiscal:

1

Cadastre a empresa emissora

POST /empresa - Cadastre os dados da empresa (CNPJ, endereço, regime tributário)

2

Faça upload do certificado digital

PUT /empresa/{id}/certificado - Envie o arquivo .pfx (A1) em base64 e a senha

3

Emita a nota fiscal

POST /nfe, POST /nfce ou POST /nfse - Envie os dados da venda/serviço

4

Consulte o resultado

GET /{tipo}/{referencia} - Obtenha status, XML e PDF da nota autorizada

Glossário de Termos Fiscais

Termos essenciais que você vai encontrar durante a integração:

SEFAZ
Secretaria da Fazenda estadual. Autoriza NFe e NFCe. Cada estado tem sua SEFAZ.
XML
Arquivo oficial da nota fiscal com validade jurídica. Deve ser guardado por 5 anos.
DANFE
Documento Auxiliar - versão impressa/PDF. Não tem validade fiscal sozinho.
Chave de Acesso
Código de 44 dígitos que identifica unicamente cada nota fiscal.
NCM
Nomenclatura Comum do Mercosul - código de 8 dígitos que classifica o produto.
CFOP
Código Fiscal de Operações - indica o tipo de operação (venda, devolução, etc).
CST
Código de Situação Tributária - define como o imposto é calculado.
Certificado A1
Arquivo .pfx que funciona como "assinatura digital" da empresa. Obrigatório para NFe/NFCe.
referencia
Seu identificador único para a nota (ex: número do pedido). Usado para consultar depois.

📋 Exemplos por Caso de Uso

Payloads prontos para as situações mais comuns:

1. Venda Simples para Consumidor Final (NFe)

Venda de produto para pessoa física, sem frete.

{
  "referencia": "PEDIDO-001",
  "ambiente": "Homologacao",
  "tipoOperacao": "Saida",
  "naturezaOperacao": "Venda de mercadoria",
  "finalidade": "Normal",
  "consumidorFinal": true,
  "enviarPorEmail": true,
  "pedido": {
    "presencaConsumidor": "OperacaoPelaInternet",
    "pagamento": {
      "tipo": "PagamentoAVista",
      "formas": [{ "tipo": "PagamentoInstantaneoPix", "valor": 150.00 }]
    }
  },
  "cliente": {
    "tipoPessoa": "F",
    "cpfCnpj": "12345678900",
    "nome": "João da Silva",
    "email": "[email protected]",
    "indicadorContribuinteICMS": "ContribuinteNaoContribuinte",
    "endereco": {
      "logradouro": "Rua das Flores", "numero": "100",
      "bairro": "Centro", "cidade": "São Paulo",
      "uf": "SP", "cep": "01001000"
    }
  },
  "itens": [{
    "cfop": "5102",
    "codigo": "PROD001",
    "descricao": "Camiseta 100% Algodão Tamanho M",
    "ncm": "61091000",
    "ean": "SEM GTIN",
    "quantidade": 2,
    "unidadeMedida": "UN",
    "valorUnitario": 75.00,
    "impostos": {
      "icms": { "origem": 0, "situacaoTributaria": "102" },
      "pis": { "situacaoTributaria": "07" },
      "cofins": { "situacaoTributaria": "07" }
    }
  }]
}
curl -X POST https://homologacao.notaapi.com.br/v2/nfe \
  -u "sua_api_key:" \
  -H "Content-Type: application/json" \
  -H "companyId: seu-company-id-uuid" \
  -d '{ ... payload acima ... }'
const response = await fetch('https://homologacao.notaapi.com.br/v2/nfe', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Basic ' + btoa('sua_api_key:'),
    'companyId': 'seu-company-id-uuid'
  },
  body: JSON.stringify(payload)
});
const data = await response.json();
console.log(data.id); // ID da nota criada
import requests
from requests.auth import HTTPBasicAuth

response = requests.post(
    'https://homologacao.notaapi.com.br/v2/nfe',
    auth=HTTPBasicAuth('sua_api_key', ''),
    headers={'companyId': 'seu-company-id-uuid'},
    json=payload
)
print(response.json())
<?php
$ch = curl_init('https://homologacao.notaapi.com.br/v2/nfe');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_USERPWD => 'sua_api_key:',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'companyId: seu-company-id-uuid'
    ],
    CURLOPT_POSTFIELDS => json_encode($payload)
]);
$response = curl_exec($ch);
echo $response;

2. Venda para Revenda (PJ Contribuinte)

Venda para pessoa jurídica que vai revender o produto. CFOP diferente!

{
  // ... dados básicos iguais ...
  "consumidorFinal": false,  // PJ vai revender
  "cliente": {
    "tipoPessoa": "J",
    "cpfCnpj": "12345678000199",
    "inscricaoEstadual": "123456789",  // Obrigatório para contribuinte
    "indicadorContribuinteICMS": "ContribuinteICMS",
    // ...
  },
  "itens": [{
    "cfop": "5102",  // Mesmo estado
    // ou "6102" se for interestadual
    // ...
  }]
}

3. Venda com Frete

Venda com transporte por conta do remetente.

{
  // ... dados básicos ...
  "transporte": {
    "frete": {
      "modalidade": "PorContaDoRemetente"  // CIF
    },
    "transportadora": {
      "usarDadosEmitente": false,
      "cpfCnpj": "98765432000199",
      "tipoPessoa": "J",
      "nome": "Transportadora XYZ",
      "inscricaoEstadual": "987654321",
      "enderecoCompleto": "Rua do Frete, 500",
      "cidade": "São Paulo",
      "uf": "SP"
    },
    "volume": {
      "quantidade": 1,
      "especie": "CAIXA",
      "pesoLiquido": 0.5,
      "pesoBruto": 0.6
    }
  },
  "itens": [{
    // ... dados do item ...
    "frete": 25.00  // Valor do frete rateado no item
  }]
}

4. Devolução de Mercadoria

Cliente devolvendo produto. Precisa referenciar a NFe original.

{
  "referencia": "DEV-001",
  "tipoOperacao": "Entrada",  // Entrada na sua empresa
  "finalidade": "DevolucaoMercadoria",
  "naturezaOperacao": "Devolução de mercadoria",
  "nfeReferenciada": [{
    "chaveAcesso": "35231112345678000199550010000012341123456789"  // NFe original
  }],
  "itens": [{
    "cfop": "1202",  // Devolução de venda
    // ... mesmo item da nota original ...
    "impostosDevolucao": {
      "percentualMercadoriaDevolvida": 100,
      "ipi": { "valorIpiDevolvido": 0 }
    }
  }]
}

5. Prestação de Serviço (NFSe)

Emissão de nota de serviço para empresa de software.

{
  "referencia": "SERV-001",
  "ambiente": "Homologacao",
  "dataCompetencia": "2025-12-01",
  "naturezaOperacao": "1",
  "valorTotal": 5000.00,
  "enviarPorEmail": true,
  "cliente": {
    "tipoPessoa": "J",
    "cpfCnpj": "12345678000199",
    "nome": "Empresa Cliente LTDA",
    "email": "[email protected]",
    "endereco": {
      "logradouro": "Av Paulista", "numero": "1000",
      "bairro": "Bela Vista", "cidade": "São Paulo",
      "uf": "SP", "cep": "01310100"
    }
  },
  "servico": {
    "codigoServicoMunicipio": "01.02",
    "itemListaServicoLC116": "1.02",
    "descricao": "Desenvolvimento de software sob encomenda - Projeto XYZ - Competência Dezembro/2025",
    "aliquotaIss": 2.00,
    "valorIss": 100.00,
    "issRetidoFonte": false
  }
}

📑 Tabela de CFOPs Comuns

CFOPs mais utilizados por tipo de operação:

Vendas (Saídas)

CFOPOperaçãoQuando Usar
5102Venda mercadoria (interna)Venda dentro do mesmo estado
6102Venda mercadoria (interestadual)Venda para outro estado
5405Venda merc. ST (interna)Produto com substituição tributária, mesmo estado
6404Venda merc. ST (interestadual)Produto com ST para outro estado
5949Outra saída não especificadaOutras saídas internas
6949Outra saída não especificadaOutras saídas interestaduais

Devoluções (Entradas)

CFOPOperaçãoQuando Usar
1202Devolução de venda (interna)Cliente do mesmo estado devolvendo
2202Devolução de venda (interestadual)Cliente de outro estado devolvendo
1411Devolução merc. ST (interna)Devolução de produto com ST

Compras (Entradas)

CFOPOperaçãoQuando Usar
1102Compra p/ comercialização (interna)Comprando para revender, mesmo estado
2102Compra p/ comercialização (interestadual)Comprando de outro estado
1556Compra p/ ativo imobilizadoComprando equipamentos/máquinas
💡 Regra geral

5xxx = operação interna (mesmo estado) · 6xxx = interestadual · 1xxx/2xxx = entradas · 5xxx/6xxx = saídas

📊 Tabela de CSTs por Regime

Simples Nacional (CSOSN)

Use estes códigos se a empresa é optante pelo Simples Nacional:

CSOSNDescriçãoQuando Usar
101Tributada com permissão de créditoVenda para PJ contribuinte que pode aproveitar crédito
102Tributada sem permissão de créditoVenda para consumidor final (mais comum)
103Isenção de ICMS no SNProdutos isentos
202Tributada com ST sem créditoProdutos com substituição tributária
300ImuneLivros, jornais, papel
400Não tributadaOperação não tributada
500ICMS cobrado por STProduto já teve ICMS pago por ST
900OutrosSituações não enquadradas acima

Regime Normal (CST)

Use estes códigos se a empresa é Lucro Presumido ou Real:

CSTDescriçãoQuando Usar
00Tributada integralmenteProduto tributado normalmente
10Tributada com STProduto com substituição tributária
20Com redução de baseProdutos com benefício de redução
40IsentaOperação isenta
41Não tributadaNão incidência
60ICMS cobrado por STProduto já teve ICMS pago por ST
90OutrasSituações especiais

PIS/COFINS (CST)

CSTDescriçãoRegime
01Operação tributável - alíquota básicaLucro Real/Presumido
04Operação tributável - monofásicaCombustíveis, bebidas, etc.
06Operação tributável - alíquota zeroProdutos com alíquota zero
07Operação isentaSimples Nacional
08Operação sem incidênciaExportação
49Outras operações de saídaRegime cumulativo
99Outras operaçõesSituações especiais

✅ Validação de Campos

Formatos esperados para evitar erros de validação:

CampoFormatoExemploDica
cpfCnpjSomente números12345678000199Sem pontos, barras ou traços
cep8 dígitos01310100Sem hífen
ncm8 dígitos61091000Consulte tabela TIPI
cfop4 dígitos5102Primeiro dígito indica tipo
codigoIBGE7 dígitos3550308Código do município no IBGE
uf2 letras maiúsculasSPSigla do estado
telefone10-11 dígitos11999999999DDD + número, sem formatação
emailEmail válido[email protected]Será usado para enviar XML/PDF
referenciaString únicaPEDIDO-001Seu ID interno - não pode repetir
ean8, 12, 13 ou 14 dígitos7891234567890Use "SEM GTIN" se não tiver
valorUnitarioDecimal (até 10 casas)75.50Ponto como separador decimal
quantidadeDecimal (até 4 casas)2.5Pode ser fracionado
aliquotaDecimal (percentual)18.00Em percentual, não decimal
dataCompetenciaYYYY-MM-DD2025-12-01Formato ISO
chaveAcesso44 dígitos35231112345...Retornada após autorização
⚠️ Erros mais comuns de validação

1. CNPJ com formatação (pontos/barras) · 2. NCM com menos de 8 dígitos · 3. Código IBGE errado · 4. EAN inválido (use "SEM GTIN" se não tiver)

Cadastrar Empresa

POST /empresa

Cadastra uma nova empresa emissora de documentos fiscais. Este é o primeiro passo para começar a emitir notas.

Campos principais:

CampoTipoDescrição
razaoSocialstring obrigatórioRazão social da empresa
cpfCnpjstring obrigatórioCNPJ ou CPF (somente números)
inscricaoEstadualstringInscrição Estadual (para NFe/NFCe)
inscricaoMunicipalstringInscrição Municipal (para NFSe)
enderecostring obrigatórioLogradouro
numerostring obrigatórioNúmero do endereço
bairrostring obrigatórioBairro
cidadestring obrigatórioNome da cidade
codigoIBGEstring obrigatórioCódigo IBGE da cidade (7 dígitos)
ufstring obrigatórioUF (ex: SP, RJ, PR)
cepstring obrigatórioCEP (somente números)
telefonestring obrigatórioTelefone
emailstring obrigatórioE-mail
tipoContribuinteenum obrigatórioRegime tributário (veja enum abaixo)
nfeHabilitadabooleanHabilitar emissão de NFe
nfeHomHabilitadabooleanHabilitar NFe em homologação
nfceHabilitadabooleanHabilitar emissão de NFCe
nfceHomHabilitadabooleanHabilitar NFCe em homologação
nfceIdTokenstringID do token CSC (produção)
nfceTokenstringToken CSC (produção)
nfceHomIdTokenstringID do token CSC (homologação)
nfceHomTokenstringToken CSC (homologação)
nfseHabilitadabooleanHabilitar emissão de NFSe
nfseHomHabilitadabooleanHabilitar NFSe em homologação
nfseRegimeEspecialTributacaointegerRegime especial de tributação NFSe (0-14)
nfseWsUserstringUsuário WebService prefeitura
nfseWssenhastringSenha WebService prefeitura
nfcomHabilitadabooleanHabilitar emissão de NFCom
nfcomHomHabilitadabooleanHabilitar NFCom em homologação
nfcomSeriestringSérie para NFCom
pfxCertificadostring (base64)Certificado A1 em base64
pfxSenhastringSenha do certificado

tipoContribuinte (enum):

simples_nacional simples_excesso_receita regime_normal mei

Exemplo:

curl -X POST https://api.notaapi.com.br/v2/empresa \
  -u "sua_api_key:" \
  -H "Content-Type: application/json" \
  -d '{
    "razaoSocial": "Minha Empresa LTDA",
    "cpfCnpj": "12345678000199",
    "inscricaoEstadual": "123456789",
    "endereco": "Rua Exemplo",
    "numero": "100",
    "bairro": "Centro",
    "cidade": "São Paulo",
    "codigoIBGE": "3550308",
    "uf": "SP",
    "cep": "01001000",
    "telefone": "11999999999",
    "email": "[email protected]",
    "tipoContribuinte": "simples_nacional",
    "nfeHabilitada": true,
    "nfeHomHabilitada": true
  }'
const empresa = {
  razaoSocial: 'Minha Empresa LTDA',
  cpfCnpj: '12345678000199',
  inscricaoEstadual: '123456789',
  endereco: 'Rua Exemplo',
  numero: '100',
  bairro: 'Centro',
  cidade: 'São Paulo',
  codigoIBGE: '3550308',
  uf: 'SP',
  cep: '01001000',
  telefone: '11999999999',
  email: '[email protected]',
  tipoContribuinte: 'simples_nacional',
  nfeHabilitada: true,
  nfeHomHabilitada: true
};

const response = await fetch('https://api.notaapi.com.br/v2/empresa', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Basic ' + Buffer.from('sua_api_key:').toString('base64')
  },
  body: JSON.stringify(empresa)
});

const data = await response.json();
console.log('Company ID:', data.id); // Guarde esse ID!
import requests
from requests.auth import HTTPBasicAuth

empresa = {
    "razaoSocial": "Minha Empresa LTDA",
    "cpfCnpj": "12345678000199",
    "inscricaoEstadual": "123456789",
    "endereco": "Rua Exemplo",
    "numero": "100",
    "bairro": "Centro",
    "cidade": "São Paulo",
    "codigoIBGE": "3550308",
    "uf": "SP",
    "cep": "01001000",
    "telefone": "11999999999",
    "email": "[email protected]",
    "tipoContribuinte": "simples_nacional",
    "nfeHabilitada": True,
    "nfeHomHabilitada": True
}

response = requests.post(
    'https://api.notaapi.com.br/v2/empresa',
    auth=HTTPBasicAuth('sua_api_key', ''),
    json=empresa
)

company_id = response.json()['id']
print(f'Company ID: {company_id}')  # Guarde esse ID!
<?php
$empresa = [
    'razaoSocial' => 'Minha Empresa LTDA',
    'cpfCnpj' => '12345678000199',
    'inscricaoEstadual' => '123456789',
    'endereco' => 'Rua Exemplo',
    'numero' => '100',
    'bairro' => 'Centro',
    'cidade' => 'São Paulo',
    'codigoIBGE' => '3550308',
    'uf' => 'SP',
    'cep' => '01001000',
    'telefone' => '11999999999',
    'email' => '[email protected]',
    'tipoContribuinte' => 'simples_nacional',
    'nfeHabilitada' => true,
    'nfeHomHabilitada' => true
];

$ch = curl_init('https://api.notaapi.com.br/v2/empresa');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_USERPWD => 'sua_api_key:',
    CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
    CURLOPT_POSTFIELDS => json_encode($empresa)
]);

$response = json_decode(curl_exec($ch), true);
echo 'Company ID: ' . $response['id']; // Guarde esse ID!

Resposta (201 Created):

{
  "id": "550e8400-e29b-41d4-a716-446655440000"
}
ℹ️ Guarde o ID

O id retornado é o companyId que você usará em todas as requisições de documentos fiscais.

Consultar Empresa

GET /empresa/{id}

Consulta os dados de uma empresa cadastrada pelo ID.

GET /empresa/doc/{cpfCnpj}

Consulta empresa pelo CPF ou CNPJ.

Atualizar Empresa

PUT /empresa/{id}

Atualiza os dados cadastrais de uma empresa.

Atualizar Certificado

PUT /empresa/{id}/certificado

Envia ou atualiza o certificado digital A1 da empresa.

CampoTipoDescrição
pfxCertificadostring (base64) obrigatórioArquivo .pfx convertido para base64
pfxSenhastring obrigatórioSenha do certificado
curl -X PUT https://api.notaapi.com.br/v2/empresa/{id}/certificado \
  -u "sua_api_key:" \
  -H "Content-Type: application/json" \
  -d '{
    "pfxCertificado": "MIIKYQIBAzCCCicGC...",
    "pfxSenha": "senha_do_certificado"
  }'
⚠️ Apenas certificado A1

Certificados A3 (cartão/token físico) não são suportados por APIs em nuvem. Use somente e-CNPJ modelo A1.

Emitir NFe

POST /nfe

Emite uma Nota Fiscal Eletrônica (modelo 55) para venda de produtos.

Headers obrigatórios:

HeaderDescrição
companyIdUUID da empresa emissora
Content-Typeapplication/json

Campos principais do corpo:

CampoTipoDescrição
referenciastring obrigatórioSeu ID único (ex: número do pedido)
ambienteenum obrigatórioHomologacao ou Producao
numerointeger obrigatórioNúmero da nota fiscal
seriestring obrigatórioSérie da nota fiscal (ex: "1")
tipoOperacaoenum obrigatórioEntrada ou Saida
naturezaOperacaostring obrigatórioEx: "Venda de mercadoria"
finalidadeenum obrigatórioNormal, Complementar, Ajuste, DevolucaoMercadoria
consumidorFinalboolean obrigatórioSe é venda para consumidor final
clienteobject obrigatórioDados do destinatário
itensarray obrigatórioLista de produtos
pedidoobjectDados de pagamento
indicadorPresencaConsumidorenumIndicador de presença do consumidor (ver enum abaixo)
cobrancaobjectFatura e parcelas (vendas a prazo)
transporteobjectDados de frete/transporte
informacoesAdicionaisstringInformações complementares (aparece no DANFE)
informacoesAdicionaisFiscostringInformações para o fisco
nfeReferenciadaarrayNotas referenciadas (para devolução)
enviarPorEmailbooleanEnviar XML/PDF por email ao cliente
dadosAdicionaisEmailobjectEmails adicionais

Objeto pedido:

CampoTipoDescrição
presencaConsumidorenumIndicador de presença (ver enum abaixo)
pagamentoobjectDados de pagamento

Objeto pedido.pagamento:

CampoTipoDescrição
tipoenumPagamentoAVista, PagamentoAPrazo, PagamentoOutros
formasarrayLista de formas de pagamento

Objeto pedido.pagamento.formas[]:

CampoTipoDescrição
tipoenumForma de pagamento (ver enum abaixo)
valornumberValor pago nesta forma
descricaostringDescrição adicional

Enum tipo_forma_pagamento:

ValorDescrição
DinheiroDinheiro
CartaoDeCreditoCartão de crédito
CartaoDeDebitoCartão de débito
PagamentoInstantaneoPixPIX
BoletoBancarioBoleto bancário
DepositoBancarioDepósito/Transferência
ChequeCheque
CreditoLojaCrédito da loja
ValeAlimentacaoVale alimentação
ValeRefeicaoVale refeição
ValePresenteVale presente
ValeCombustivelVale combustível
SemPagamentoSem pagamento
OutrosOutros

Objeto dadosAdicionaisEmail:

CampoTipoDescrição
outrosDestinatariosarray[string]Lista de emails adicionais para envio

Objeto cliente:

CampoTipoDescrição
tipoPessoaenum obrigatórioF (física) ou J (jurídica)
cpfCnpjstring obrigatórioCPF ou CNPJ (somente números)
nomestring obrigatórioNome/Razão social
indicadorContribuinteICMSenum obrigatórioContribuinteICMS, ContribuinteIsento, ContribuinteNaoContribuinte
enderecoobject obrigatórioEndereço completo
emailstringE-mail do cliente
telefonestringTelefone
inscricaoEstadualstringIE (obrigatório se ContribuinteICMS)
inscricaoMunicipalstringInscrição municipal

Objeto endereco:

CampoTipoDescrição
logradourostring obrigatórioRua/Avenida
numerostring obrigatórioNúmero
bairrostring obrigatórioBairro
cidadestring obrigatórioNome da cidade
ufstring obrigatórioSigla do estado (2 letras)
cepstring obrigatórioCEP (8 dígitos, sem traço)
complementostringComplemento
codIbgestringCódigo IBGE da cidade (7 dígitos)
paisstringCódigo do país (default: "BR")

Objeto item (itens[]):

CampoTipoDescrição
cfopstring obrigatórioCódigo CFOP (ex: "5102")
codigostring obrigatórioCódigo interno do produto
descricaostring obrigatórioDescrição do produto
ncmstring obrigatórioCódigo NCM (8 dígitos)
eanstring obrigatórioCódigo de barras GTIN ou "SEM GTIN"
quantidadenumber obrigatórioQuantidade
unidadeMedidastring obrigatórioUnidade (UN, KG, M, etc.)
valorUnitarionumber obrigatórioValor unitário
impostosobject obrigatórioICMS, PIS, COFINS, IPI
eanTributavelstringEAN da unidade tributável
ceststringCódigo CEST (7 dígitos, para ST)
extipistringCódigo EX TIPI
descontosnumberValor do desconto
fretenumberValor do frete rateado
outrasDespesasnumberOutras despesas acessórias
codigoBeneficioFiscalstringCódigo de benefício fiscal (cBenef)
impostosDevolucaoobjectPara notas de devolução
combustivelobjectDados ANP (para combustíveis)

Objeto combustivel (para postos de combustível):

CampoTipoDescrição
codigoProdutoANPstring obrigatórioCódigo do produto ANP (ex: "320102001" para gasolina)
ufConsumostring obrigatórioUF de consumo do combustível
percentualGasNaturalnumber% de gás natural na mistura
percentualGasNaturalImportadonumber% de gás natural importado
percentualGLPDerivadoPetroleonumber% de GLP derivado de petróleo
valorDePartidanumberValor de partida (CIDE)

Objeto impostosDevolucao (para notas de devolução):

CampoTipoDescrição
percentualMercadoriaDevolvidanumber% da mercadoria devolvida (default: 100)
ipiobjectDados do IPI devolvido

Objeto impostosDevolucao.ipi:

CampoTipoDescrição
valorIpiDevolvidonumberValor do IPI devolvido

Objeto impostos:

CampoTipoDescrição
icmsobjectImposto sobre Circulação de Mercadorias
pisobjectPIS
cofinsobjectCOFINS
ipiobjectIPI (industrializados)
percentualAproximadoTributosobjectCarga tributária aproximada (Lei 12.741)
ibscbsobjectIBS/CBS - Reforma Tributária (ver seção abaixo)

Objeto impostos.icms:

CampoTipoDescrição
origeminteger0=Nacional, 1=Estrang.Importação Direta, 2=Estrang.Mercado Interno, etc.
situacaoTributariastring obrigatórioCST (regime normal) ou CSOSN (Simples Nacional)
baseCalculonumberBase de cálculo do ICMS
aliquotanumberAlíquota do ICMS (%)
valornumberValor do ICMS
modalidadeBaseCalculoenum0=MVA, 1=Pauta, 2=Preço Máx, 3=Valor Operação
percentualReducaoBaseCalculonumber% redução da base de cálculo
aliquotaCreditoSimplesNacionalnumberAlíquota crédito SN (CSOSN 101, 201)
valorCreditoSimplesNacionalnumberValor crédito Simples Nacional

Campos ICMS ST (Substituição Tributária):

CampoTipoDescrição
modalidadeBaseCalculoSTinteger0=Preço Máx, 4=MVA, 5=Pauta, 6=Valor Op
percentualMargemValorAdicionadoSTnumber% MVA do ICMS ST
percentualReducaoBaseCalculoSTnumber% redução BC do ST
baseCalculoSTnumberBase de cálculo do ICMS ST
aliquotaSTnumberAlíquota do ICMS ST
valorSTnumberValor do ICMS ST

Campos ICMS Efetivo (para ICMS-ST já recolhido):

CampoTipoDescrição
baseCalculoEfetivanumberBase de cálculo efetiva
aliquotaEfetivanumberAlíquota efetiva (%)
valorEfetivonumberValor efetivo do ICMS
valorSubstitutonumberValor ICMS substituto

Campos ICMS Diferimento:

CampoTipoDescrição
percentualDiferimentonumber% de diferimento
valorDiferimentonumberValor diferido
naoCalcularDifalbooleanNão calcular DIFAL
naoCalcularFCPbooleanNão calcular FCP

Objeto impostos.pis / impostos.cofins:

CampoTipoDescrição
situacaoTributariastring obrigatórioCST do PIS/COFINS (01, 04, 06, 07, 08, 49, 99)
porAliquotaobjectCálculo por alíquota

Objeto porAliquota (PIS/COFINS/IPI):

CampoTipoDescrição
aliquotanumberAlíquota (%) - quando CST 01 ou 02

Objeto impostos.ipi:

CampoTipoDescrição
situacaoTributariastring obrigatórioCST do IPI (00, 49, 50, 99, etc.)
porAliquotaobjectCálculo por alíquota

Objeto impostos.percentualAproximadoTributos (Lei 12.741):

CampoTipoDescrição
fontestring obrigatórioFonte da informação (ex: "IBPT")
simplificadoobjectModo simplificado (percentual único)
detalhadoobjectModo detalhado (por esfera)

Objeto simplificado:

CampoTipoDescrição
percentualnumberPercentual único de carga tributária

Objeto detalhado:

CampoTipoDescrição
percentualFederalnumber% tributos federais
percentualEstadualnumber% tributos estaduais
percentualMunicipalnumber% tributos municipais
💡 Lei da Transparência Fiscal

A Lei 12.741/2012 obriga a informar ao consumidor o valor aproximado de tributos. Use o modo simplificado ou detalhado. Dados podem ser obtidos no IBPT.

Objeto impostos.ibscbs (Reforma Tributária):

🆕 IBS/CBS - Reforma Tributária

O IBSCBS é o novo grupo de impostos da reforma tributária brasileira, substituindo gradualmente PIS, COFINS e ICMS. Campos opcionais por enquanto.

CampoTipoDescrição
CSTstringCódigo Situação Tributária IBS/CBS
cClassTribstringCódigo de classificação tributária
indDoacaointegerIndicador de doação
gIBSCBSobjectGrupo de tributação IBS/CBS
gIBSCBSMonoobjectGrupo monofásico IBS/CBS
gTransfCredobjectTransferência de crédito
gAjusteCompetobjectAjuste de competência
gEstornoCredobjectEstorno de crédito
gCredPresOperobjectCrédito presumido da operação
gCredPresIBSZFMobjectCrédito presumido IBS ZFM

CST IBS/CBS (enum):

CódigoDescrição
000Tributação normal
010Tributação com alíquota diferenciada
011Tributação com alíquota por item
200Tributação monofásica
220Tributação monofásica com retenção
221Tributação monofásica - combustíveis
222Tributação monofásica - outros
400Não tributada
410Isenta
510Diferimento

Objeto gIBSCBS (tributação regular):

CampoTipoDescrição
vBCnumberValor da base de cálculo
vIBSnumberValor total do IBS
gIBSUFobjectIBS estadual
gIBSMunobjectIBS municipal
gCBSobjectCBS federal
gTribRegularobjectTributação regime regular
gTribCompraGovobjectTributação compras governamentais

Objeto gIBSUF / gIBSMun / gCBS:

CampoTipoDescrição
pIBSUF / pIBSMun / pCBSnumberAlíquota (%)
vIBSUF / vIBSMun / vCBSnumberValor calculado
gDifobjectDiferimento
gDevTribobjectDevolução tributária
gRedobjectRedução

Objeto gDif (diferimento):

CampoTipoDescrição
pDifnumberPercentual de diferimento
vDifnumberValor diferido

Objeto gDevTrib (devolução tributária):

CampoTipoDescrição
vDevTribnumberValor da devolução tributária

Objeto gRed (redução):

CampoTipoDescrição
pRedAliqnumberPercentual de redução da alíquota
pAliqEfetnumberAlíquota efetiva após redução

Objeto gTribRegular (tributação regular):

CampoTipoDescrição
CSTRegstringCST regime regular
cClassTribRegstringClassificação tributária regular
pAliqEfetRegIBSUFnumberAlíquota efetiva IBS UF
vTribRegIBSUFnumberValor tributação regular IBS UF
pAliqEfetRegIBSMunnumberAlíquota efetiva IBS Municipal
vTribRegIBSMunnumberValor tributação regular IBS Municipal
pAliqEfetRegCBSnumberAlíquota efetiva CBS
vTribRegCBSnumberValor tributação regular CBS

Objeto gTribCompraGov (compras governamentais):

CampoTipoDescrição
pAliqIBSUFnumberAlíquota IBS UF
vTribIBSUFnumberValor tributação IBS UF
pAliqIBSMunnumberAlíquota IBS Municipal
vTribIBSMunnumberValor tributação IBS Municipal
pAliqCBSnumberAlíquota CBS
vTribCBSnumberValor tributação CBS

Objeto gIBSCBSMono (monofásico):

CampoTipoDescrição
gMonoPadraoobjectMonofásico padrão
gMonoRetenobjectMonofásico com retenção
gMonoRetobjectMonofásico retido anteriormente
gMonoDifobjectMonofásico com diferimento
vTotIBSMonoItemnumberTotal IBS monofásico do item
vTotCBSMonoItemnumberTotal CBS monofásico do item

Objeto gMonoPadrao (monofásico padrão):

CampoTipoDescrição
qBCMononumberQuantidade base de cálculo
adRemIBSnumberAlíquota ad rem IBS
adRemCBSnumberAlíquota ad rem CBS
vIBSMononumberValor IBS monofásico
vCBSMononumberValor CBS monofásico

Objeto gMonoReten (monofásico com retenção):

CampoTipoDescrição
qBCMonoRetennumberQuantidade BC retenção
adRemIBSRetennumberAlíquota ad rem IBS retenção
vIBSMonoRetennumberValor IBS retido
adRemCBSRetennumberAlíquota ad rem CBS retenção
vCBSMonoRetennumberValor CBS retido

Objeto gMonoRet (monofásico retido anteriormente):

CampoTipoDescrição
qBCMonoRetnumberQuantidade BC retido
adRemIBSRetnumberAlíquota ad rem IBS retido
vIBSMonoRetnumberValor IBS retido anteriormente
adRemCBSRetnumberAlíquota ad rem CBS retido
vCBSMonoRetnumberValor CBS retido anteriormente

Objeto gMonoDif (monofásico com diferimento):

CampoTipoDescrição
pDifIBSnumberPercentual diferimento IBS
vIBSMonoDifnumberValor IBS diferido
pDifCBSnumberPercentual diferimento CBS
vCBSMonoDifnumberValor CBS diferido

Objeto gTransfCred (transferência de crédito):

CampoTipoDescrição
vIBSnumberValor IBS transferido
vCBSnumberValor CBS transferido

Objeto gAjusteCompet (ajuste de competência):

CampoTipoDescrição
competApurdatetimeCompetência de apuração
vIBSnumberValor IBS do ajuste
vCBSnumberValor CBS do ajuste

Objeto gEstornoCred (estorno de crédito):

CampoTipoDescrição
vIBSEstCrednumberValor IBS estornado
vCBSEstCrednumberValor CBS estornado

Objeto gCredPresOper (crédito presumido operação):

CampoTipoDescrição
vBCCredPresnumberBase de cálculo do crédito presumido
cCredPresstringCódigo do crédito presumido (01 a 13)
gIBSCredPresobjectCrédito presumido IBS
gCBSCredPresobjectCrédito presumido CBS

Objeto gIBSCredPres / gCBSCredPres:

CampoTipoDescrição
pCredPresnumberPercentual do crédito presumido
vCredPresnumberValor do crédito presumido
vCredPresCondSusnumberValor do crédito presumido condição suspensa

Objeto gCredPresIBSZFM (crédito presumido IBS ZFM):

CampoTipoDescrição
competApurdatetimeCompetência de apuração
tpCredPresIBSZFMintegerTipo do crédito presumido IBS ZFM
vCredPresIBSZFMnumberValor do crédito presumido IBS ZFM

Crédito Presumido (cCredPres):

CódigoDescrição
01Operação com direito a crédito
02Operação sem direito a crédito
03Aquisição de bem para ativo imobilizado
04Aquisição de serviço de transporte
05 a 13Outros tipos de crédito presumido

Objeto transporte:

CampoTipoDescrição
freteobjectDados do frete
transportadoraobjectDados da transportadora
veiculoobjectDados do veículo
volumeobjectDados do volume
enderecoEntregaobjectEndereço de entrega (se diferente)

Objeto transporte.frete:

CampoTipoDescrição
modalidadeenum obrigatórioModalidade do frete (ver valores abaixo)

modalidade (enum):

PorContaDoRemetente PorContaDoDestinatario PorContaDeTerceiros TransporteProprioPorContaDoRemetente TransporteProprioPorContaDoDestinatario SemOcorrenciaDeTransporte

Objeto transporte.transportadora:

CampoTipoDescrição
usarDadosEmitentebooleanUsar dados da empresa emitente
cpfCnpjstringCPF ou CNPJ da transportadora
tipoPessoaenumF ou J
nomestringNome/Razão social
inscricaoEstadualstringIE da transportadora
enderecoCompletostringEndereço completo
cidadestringCidade
ufstringUF

Objeto transporte.veiculo:

CampoTipoDescrição
placastringPlaca do veículo
ufstringUF do veículo
rntcstringRegistro ANTT (RNTC)

Objeto transporte.volume:

CampoTipoDescrição
quantidadeintegerQuantidade de volumes
especiestringEspécie (CAIXA, PACOTE, etc.)
marcastringMarca
numeracaostringNumeração
pesoLiquidonumberPeso líquido (kg)
pesoBrutonumberPeso bruto (kg)

Objeto cobranca (vendas a prazo):

CampoTipoDescrição
faturaobjectDados da fatura
parcelasarrayLista de parcelas

Objeto cobranca.fatura:

CampoTipoDescrição
numerostringNúmero da fatura
valorOriginalnumberValor original da fatura
descontonumberValor do desconto

Objeto cobranca.parcelas[]:

CampoTipoDescrição
numerointegerNúmero da parcela (1, 2, 3...)
vencimentodateData de vencimento (YYYY-MM-DD)
valornumberValor da parcela

Objeto nfeReferenciada[] (para devoluções/complementares):

CampoTipoDescrição
chaveAcessostring obrigatórioChave de acesso da NFe referenciada (44 dígitos)
💡 Quando usar nfeReferenciada

Use para vincular notas em operações de devolução, complementar ou ajuste. A chave de acesso é o número de 44 dígitos que identifica unicamente a NFe original.

Exemplo completo:

{
  "referencia": "PEDIDO-001",
  "ambiente": "Homologacao",
  "numero": 1,
  "serie": "1",
  "tipoOperacao": "Saida",
  "naturezaOperacao": "Venda de mercadoria",
  "finalidade": "Normal",
  "consumidorFinal": true,
  "enviarPorEmail": true,
  "pedido": {
    "presencaConsumidor": "OperacaoPelaInternet",
    "pagamento": {
      "tipo": "PagamentoAVista",
      "formas": [{
        "tipo": "CartaoDeCredito",
        "valor": 150.00
      }]
    }
  },
  "cliente": {
    "tipoPessoa": "F",
    "cpfCnpj": "12345678900",
    "nome": "João da Silva",
    "email": "[email protected]",
    "indicadorContribuinteICMS": "ContribuinteNaoContribuinte",
    "endereco": {
      "logradouro": "Rua Exemplo",
      "numero": "100",
      "bairro": "Centro",
      "cidade": "São Paulo",
      "uf": "SP",
      "cep": "01001000"
    }
  },
  "itens": [{
    "cfop": "5102",
    "codigo": "PROD001",
    "descricao": "Camiseta Algodão P",
    "ncm": "61091000",
    "ean": "SEM GTIN",
    "quantidade": 2,
    "unidadeMedida": "UN",
    "valorUnitario": 75.00,
    "impostos": {
      "icms": {
        "origem": 0,
        "situacaoTributaria": "102"
      },
      "pis": { "situacaoTributaria": "07" },
      "cofins": { "situacaoTributaria": "07" }
    }
  }]
}
curl -X POST https://homologacao.notaapi.com.br/v2/nfe \
  -u "sua_api_key:" \
  -H "Content-Type: application/json" \
  -H "companyId: seu-company-id-uuid" \
  -d '{
    "referencia": "PEDIDO-001",
    "ambiente": "Homologacao",
    "tipoOperacao": "Saida",
    "naturezaOperacao": "Venda de mercadoria",
    "finalidade": "Normal",
    "consumidorFinal": true,
    "cliente": { ... },
    "itens": [ ... ]
  }'
const payload = {
  referencia: 'PEDIDO-001',
  ambiente: 'Homologacao',
  tipoOperacao: 'Saida',
  naturezaOperacao: 'Venda de mercadoria',
  finalidade: 'Normal',
  consumidorFinal: true,
  cliente: { /* ... */ },
  itens: [ /* ... */ ]
};

const response = await fetch('https://homologacao.notaapi.com.br/v2/nfe', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Basic ' + Buffer.from('sua_api_key:').toString('base64'),
    'companyId': 'seu-company-id-uuid'
  },
  body: JSON.stringify(payload)
});

const data = await response.json();
console.log('NFe criada:', data.id);
import requests
from requests.auth import HTTPBasicAuth

payload = {
    "referencia": "PEDIDO-001",
    "ambiente": "Homologacao",
    "tipoOperacao": "Saida",
    "naturezaOperacao": "Venda de mercadoria",
    "finalidade": "Normal",
    "consumidorFinal": True,
    "cliente": { # ... },
    "itens": [ # ... ]
}

response = requests.post(
    'https://homologacao.notaapi.com.br/v2/nfe',
    auth=HTTPBasicAuth('sua_api_key', ''),
    headers={'companyId': 'seu-company-id-uuid'},
    json=payload
)

print('NFe criada:', response.json()['id'])
<?php
$payload = [
    'referencia' => 'PEDIDO-001',
    'ambiente' => 'Homologacao',
    'tipoOperacao' => 'Saida',
    'naturezaOperacao' => 'Venda de mercadoria',
    'finalidade' => 'Normal',
    'consumidorFinal' => true,
    'cliente' => [ /* ... */ ],
    'itens' => [ /* ... */ ]
];

$ch = curl_init('https://homologacao.notaapi.com.br/v2/nfe');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_USERPWD => 'sua_api_key:',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'companyId: seu-company-id-uuid'
    ],
    CURLOPT_POSTFIELDS => json_encode($payload)
]);

$response = json_decode(curl_exec($ch), true);
echo 'NFe criada: ' . $response['id'];

Resposta (201 Created):

{ "id": "550e8400-e29b-41d4-a716-446655440000" }

Consultar NFe

GET /nfe/{referencia}

Consulta o status de uma NFe pela referência que você enviou na emissão.

Headers:

  • companyId: UUID da empresa

Campos da resposta:

CampoTipoDescrição
iduuidID único da nota
referenciastringSua referência
ambienteenumHomologacao ou Producao
statusinteger0=Novo, 1=Enviado, 2=Autorizado, 3=Cancelado, 4=Inutilizado, 5=Erro
enviadaPorEmailbooleanSe foi enviada por email
dataCriacaodatetimeData de criação
dataUltimaAlteracaodatetimeÚltima alteração
dataAutorizacaodatetimeData de autorização
dataCompetenciadateData de competência
clienteNomestringNome do cliente
clienteDocumentostringCPF/CNPJ do cliente
numerointegerNúmero da nota
protocolostringProtocolo de autorização
chaveAcessostringChave de acesso (44 dígitos)
cStatintegerCódigo de status SEFAZ (100=autorizado)
linkDownloadPDFstringURL para download do PDF
linkDownloadXMLstringURL para download do XML
errosarrayLista de erros (se houver)
avisosarrayLista de avisos (se houver)

Exemplo de resposta:

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "referencia": "PEDIDO-001",
  "ambiente": "Homologacao",
  "status": 2,
  "enviadaPorEmail": true,
  "dataCriacao": "2025-12-02T10:00:00Z",
  "dataUltimaAlteracao": "2025-12-02T14:30:00Z",
  "dataAutorizacao": "2025-12-02T14:30:00Z",
  "dataCompetencia": "2025-12-02",
  "clienteNome": "João da Silva",
  "clienteDocumento": "12345678901",
  "numero": 1234,
  "protocolo": "135210000123456",
  "chaveAcesso": "35231112345678000199550010000012341123456789",
  "cStat": 100,
  "linkDownloadPDF": "https://...",
  "linkDownloadXML": "https://...",
  "erros": [],
  "avisos": []
}

Cancelar NFe

DELETE /nfe/{referencia}

Cancela uma NFe autorizada.

Corpo da requisição:

CampoTipoDescrição
justificativastring obrigatórioMotivo do cancelamento (15-255 caracteres)

Campos da resposta:

CampoTipoDescrição
id_cancelamentonumberID do cancelamento
statusenumcancelado, erro_cancelamento, cancelamento_solicitado
errosarrayLista de erros (se houver)
⏰ Prazo de cancelamento

O prazo de cancelamento varia por UF. A maioria dos estados permite 24 horas, mas alguns como SP, MG e RS podem ter prazos diferentes (até 168h em alguns casos). Consulte a legislação do estado.

Carta de Correção (CC-e)

POST /nfe/{referencia}/cce

Emite uma Carta de Correção Eletrônica para corrigir informações da NFe após autorização.

Campos:

CampoTipoDescrição
ambienteenum obrigatórioHomologacao ou Producao
referenciastring obrigatórioReferência da nota original
correcaostring obrigatórioTexto da correção (15-1000 caracteres)

Exemplo:

curl -X POST https://api.notaapi.com.br/v2/nfe/PEDIDO-001/cce \
  -u "sua_api_key:" \
  -H "Content-Type: application/json" \
  -H "companyId: seu-company-id-uuid" \
  -d '{
    "ambiente": "Producao",
    "referencia": "PEDIDO-001",
    "correcao": "Razão Social correta: Empresa ABC LTDA"
  }'
💡 O que pode ser corrigido

A CC-e pode corrigir dados como razão social, endereço, CFOP, entre outros. Não é permitido alterar: valores, quantidades, alíquotas de impostos, dados que alterem o cálculo do imposto, ou a data de emissão/saída.

Resposta:

CampoTipoDescrição
idintegerID da CC-e
statusintegerStatus (2 = autorizada)
protocolostringProtocolo de autorização
cstatintegerCódigo de status SEFAZ
xmotivostringDescrição do status
urlDownloadPDFstringLink para download do PDF
urlDownloadXMLstringLink para download do XML

Distribuição e Manifesto NFe

GET /nfe/distribuicao

Consulta notas fiscais emitidas contra o CNPJ da empresa (DF-e).

POST /nfe/distribuicao

Busca distribuição de documentos fiscais na SEFAZ.

Parâmetros da requisição:

CampoTipoDescrição
ambienteenum obrigatórioHomologacao ou Producao
chaveAcessostringChave de acesso específica (opcional)
nsuintegerNSU específico para consulta
ultNSUintegerÚltimo NSU processado (para paginação)

Campos da resposta:

CampoTipoDescrição
cStatintegerCódigo de status SEFAZ
xMotivostringDescrição do status
dhRespdatetimeData/hora da resposta
ultNSUintegerÚltimo NSU retornado
maxNSUintegerNSU máximo disponível
itensarrayLista de documentos encontrados
POST /nfe/manifesto

Realiza manifestação do destinatário (confirma, desconhece, ciência ou operação não realizada).

Parâmetros manifesto:

CampoTipoDescrição
ambienteenum obrigatórioHomologacao ou Producao
chaveAcessostring obrigatórioChave da NFe (44 dígitos)
tipoEventoenum obrigatórioTipo de manifestação
justificativastring obrigatórioJustificativa (obrigatória para alguns eventos)

tipoEvento (manifesto):

confirmacao desconhecimento ciencia operacao_nao_realizada

Emitir NFCe

POST /nfce

Emite Nota Fiscal de Consumidor Eletrônica (modelo 65) para vendas no varejo.

O payload é similar ao da NFe. Consulte a documentação de NFe para referência.

Consultar NFCe

GET /nfce/{referencia}

Cancelar NFCe

DELETE /nfce/{referencia}

Emitir NFSe

POST /nfse

Emite Nota Fiscal de Serviço Eletrônica para prestação de serviços.

Campos principais:

CampoTipoDescrição
referenciastring obrigatórioSeu ID único
ambienteenum obrigatórioHomologacao ou Producao
dataCompetenciadate obrigatórioData de competência (YYYY-MM-DD)
naturezaOperacaostring obrigatórioNatureza da operação
valorTotalnumber obrigatórioValor total do serviço
clienteobject obrigatórioDados do tomador
servicoobject obrigatórioDados do serviço
ibscbsobjectIBS/CBS - Reforma Tributária (ver seção abaixo)
metadadosobjectItens detalhados do serviço (ver seção abaixo)
enviarPorEmailbooleanEnviar por email ao tomador
dadosAdicionaisEmailobjectEmails adicionais
outrasInformacoesstringObservações adicionais
deducoesnumberValor de deduções
descontosnumberValor de descontos
outrasRetencoesnumberOutras retenções
numeroRpsSubstituidonumberNúmero do RPS substituído (para substituição)
serieRpsSubstituidostringSérie do RPS substituído
tipoRpsSubstituidostringTipo do RPS substituído

Campos de retenções (opcionais):

CampoTipoDescrição
valorPisnumberValor do PIS
valorCofinsnumberValor do COFINS
valorCsllnumberValor do CSLL
valorInssnumberValor do INSS
valorIrnumberValor do IR
valorIssnumberValor do ISS

Objeto servico:

CampoTipoDescrição
codigoServicoMunicipiostring obrigatórioCódigo do serviço no município
descricaostring obrigatórioDescrição do serviço prestado
aliquotaIssnumber obrigatórioAlíquota de ISS (%)
itemListaServicoLC116stringItem da lista LC 116 (ex: "1.02")
cnaestringCódigo CNAE
codigoNbsstringCódigo NBS
valorIssnumberValor do ISS
issRetidoFontebooleanSe o ISS é retido na fonte
municipioPrestacaoServicostringCódigo IBGE do município onde o serviço foi prestado
ufPrestacaoServicostringUF onde o serviço foi prestado

Retenções no objeto servico:

CampoTipoDescrição
valorPisnumberValor do PIS
pisRetidobooleanPIS retido na fonte
valorCofinsnumberValor do COFINS
cofinsRetidobooleanCOFINS retido na fonte
valorCsllnumberValor do CSLL
csllRetidobooleanCSLL retido na fonte
valorInssnumberValor do INSS
inssRetidobooleanINSS retido na fonte
valorIrnumberValor do IR
irRetidobooleanIR retido na fonte

Objeto cliente (tomador):

CampoTipoDescrição
tipoPessoaenum obrigatórioF ou J
cpfCnpjstring obrigatórioCPF ou CNPJ
nomestring obrigatórioNome/Razão social
enderecoobject obrigatórioEndereço do tomador
emailstringE-mail
telefonestringTelefone
inscricaoMunicipalstringInscrição municipal
inscricaoEstadualstringInscrição estadual
nifstringNIF (para estrangeiros)
cNaoNIFenumnao_informado, dispensado, nao_exigencia

Objeto metadados (itens detalhados da NFSe):

CampoTipoDescrição
itens[]arrayLista de itens detalhados do serviço

Objeto metadados.itens[]:

CampoTipoDescrição
discriminacaoServicostring obrigatórioDescrição do serviço
quantidadenumber obrigatórioQuantidade
valorUnitarionumber obrigatórioValor unitário
tributavelboolean obrigatórioSe o item é tributável
aliquotaIssnumber obrigatórioAlíquota de ISS (%)
itemListaServicoLC116string obrigatórioItem da LC 116 (ex: "1.02")
codigoServicoMunicipiostring obrigatórioCódigo do serviço no município
cnaestring obrigatórioCódigo CNAE

Objeto ibscbs (NFSe - Reforma Tributária):

🆕 IBS/CBS para Serviços

Campos do IBS/CBS específicos para NFSe. Será obrigatório gradualmente conforme cronograma da reforma tributária.

CampoTipoDescrição
finNFSeenum obrigatórioFinalidade: regular
indFinalboolean obrigatórioIndicador consumidor final
cIndOpstring obrigatórioCódigo indicador da operação
tpOperenum obrigatórioTipo operação governo (ver abaixo)
tpEnteGovenum obrigatórioTipo entidade governo (ver abaixo)
indDestenum obrigatórioIndicador destinatário
valoresobject obrigatórioValores e tributação
imovelobjectDados do imóvel (quando aplicável)

tpOper - Tipo Operação Governo:

nenhum fornecimento recebimento_pag fornecimento_realizado recebimento_pag_posterior fornecimento_recebimento

tpEnteGov - Tipo Entidade Governo:

nenhum uniao estados distrito_federal municipios

Objeto valores (ibscbs NFSe):

CampoTipoDescrição
gReeRepResarrayRepasse/ressarcimento
tribobjectDados de tributação

Objeto valores.trib:

CampoTipoDescrição
gIBSCBSobject obrigatórioDados de tributação IBS/CBS

Objeto valores.trib.gIBSCBS (tributação):

CampoTipoDescrição
cststring obrigatórioCST IBS/CBS (000, 010, 200, 400, etc.)
cClassTribstring obrigatórioCódigo classificação tributária
cCredPresstring obrigatórioCódigo crédito presumido (01 a 13)
gTribRegularobjectTributação regular
gDifobjectDiferimento

Objeto gDif (diferimento NFSe):

CampoTipoDescrição
pDifUFnumber obrigatórioPercentual diferimento UF
pDifMunnumber obrigatórioPercentual diferimento Municipal
pDifCBSnumber obrigatórioPercentual diferimento CBS

Exemplo:

{
  "referencia": "SERVICO-001",
  "ambiente": "Homologacao",
  "dataCompetencia": "2025-12-02",
  "naturezaOperacao": "1",
  "valorTotal": 5000.00,
  "enviarPorEmail": true,
  "cliente": {
    "tipoPessoa": "J",
    "cpfCnpj": "12345678000199",
    "nome": "Empresa Cliente LTDA",
    "email": "[email protected]",
    "endereco": {
      "logradouro": "Av Paulista",
      "numero": "1000",
      "bairro": "Bela Vista",
      "cidade": "São Paulo",
      "uf": "SP",
      "cep": "01310100"
    }
  },
  "servico": {
    "codigoServicoMunicipio": "1.02",
    "descricao": "Desenvolvimento de software - Projeto XYZ",
    "aliquotaIss": 2.00,
    "itemListaServicoLC116": "1.02"
  }
}
curl -X POST https://homologacao.notaapi.com.br/v2/nfse \
  -u "sua_api_key:" \
  -H "Content-Type: application/json" \
  -H "companyId: seu-company-id-uuid" \
  -d '{
    "referencia": "SERVICO-001",
    "ambiente": "Homologacao",
    "dataCompetencia": "2025-12-02",
    "naturezaOperacao": "1",
    "valorTotal": 5000.00,
    "cliente": { ... },
    "servico": { ... }
  }'
const payload = {
  referencia: 'SERVICO-001',
  ambiente: 'Homologacao',
  dataCompetencia: '2025-12-02',
  naturezaOperacao: '1',
  valorTotal: 5000.00,
  cliente: { /* ... */ },
  servico: {
    codigoServicoMunicipio: '1.02',
    descricao: 'Desenvolvimento de software',
    aliquotaIss: 2.00
  }
};

const response = await fetch('https://homologacao.notaapi.com.br/v2/nfse', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Basic ' + Buffer.from('sua_api_key:').toString('base64'),
    'companyId': 'seu-company-id-uuid'
  },
  body: JSON.stringify(payload)
});

const data = await response.json();
console.log('NFSe criada:', data.id);
import requests
from requests.auth import HTTPBasicAuth

payload = {
    "referencia": "SERVICO-001",
    "ambiente": "Homologacao",
    "dataCompetencia": "2025-12-02",
    "naturezaOperacao": "1",
    "valorTotal": 5000.00,
    "cliente": { # ... },
    "servico": {
        "codigoServicoMunicipio": "1.02",
        "descricao": "Desenvolvimento de software",
        "aliquotaIss": 2.00
    }
}

response = requests.post(
    'https://homologacao.notaapi.com.br/v2/nfse',
    auth=HTTPBasicAuth('sua_api_key', ''),
    headers={'companyId': 'seu-company-id-uuid'},
    json=payload
)

print('NFSe criada:', response.json()['id'])
<?php
$payload = [
    'referencia' => 'SERVICO-001',
    'ambiente' => 'Homologacao',
    'dataCompetencia' => '2025-12-02',
    'naturezaOperacao' => '1',
    'valorTotal' => 5000.00,
    'cliente' => [ /* ... */ ],
    'servico' => [
        'codigoServicoMunicipio' => '1.02',
        'descricao' => 'Desenvolvimento de software',
        'aliquotaIss' => 2.00
    ]
];

$ch = curl_init('https://homologacao.notaapi.com.br/v2/nfse');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_USERPWD => 'sua_api_key:',
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'companyId: seu-company-id-uuid'
    ],
    CURLOPT_POSTFIELDS => json_encode($payload)
]);

$response = json_decode(curl_exec($ch), true);
echo 'NFSe criada: ' . $response['id'];

Consultar NFSe

GET /nfse/{referencia}

Campos da resposta:

CampoTipoDescrição
iduuidID único da nota
referenciastringSua referência
ambienteenumHomologacao ou Producao
statusinteger0=Novo, 1=Enviado, 2=Autorizado, 3=Cancelado, 5=Erro
enviadaPorEmailbooleanSe foi enviada por email
dataCriacaodatetimeData de criação
dataUltimaAlteracaodatetimeÚltima alteração
dataAutorizacaodatetimeData de autorização
dataCompetenciadateData de competência
clienteNomestringNome do tomador
clienteDocumentostringCPF/CNPJ do tomador
numerointegerNúmero da nota
codigoVerificacaostringCódigo de verificação
chaveAcessostringChave de acesso
linkDownloadPDFstringURL para download do PDF
linkDownloadXMLstringURL para download do XML
LinkPrefeiturastringLink para consulta na prefeitura
numeroRpsstringNúmero do RPS
serieRpsstringSérie do RPS
errosarrayLista de erros (se houver)
avisosarrayLista de avisos (se houver)

Cancelar NFSe

DELETE /nfse/{referencia}
ℹ️ Prazo varia por cidade

Cada prefeitura define seu prazo de cancelamento. Algumas permitem até 24h, outras apenas no mesmo dia.

Emitir NFCom

POST /nfcom

Emite Nota Fiscal de Comunicação Eletrônica (modelo 62) para empresas de telecomunicações (telefonia, internet, TV por assinatura).

Headers obrigatórios:

  • companyId: UUID da empresa emissora
  • Content-Type: application/json

Campos principais:

CampoTipoDescrição
referenciastring obrigatórioSeu ID único
ambienteenum obrigatórioHomologacao ou Producao
tipo_faturamentoenum obrigatórionormal, centralizado, cofaturamento
data_emissaodate obrigatórioData de emissão (YYYY-MM-DD)
seriestring obrigatórioSérie da nota
numerostring obrigatórioNúmero da nota
finalidadeenum obrigatórionormal, substituicao, ajuste_debito
pre_pagobooleanSe é serviço pré-pago
clienteobject obrigatórioDados do cliente/destinatário
assinanteobject obrigatórioDados do assinante
itensarrayLista de serviços/produtos
faturaobjectDados da fatura

Objeto assinante:

CampoTipoDescrição
codigostring obrigatórioCódigo do assinante
tipo_assinanteenum obrigatórioTipo do assinante
tipo_servico_utilizadoenum obrigatórioTipo de serviço
numero_contratostring obrigatórioNúmero do contrato
data_inicio_contratodate obrigatórioData início do contrato
data_fim_contratodate obrigatórioData fim do contrato
terminal_principalstringNúmero do terminal principal

tipo_assinante (enum):

comercial industrial residencial produtor_rural orgao_publico prestador_servico_telecom missoes_diplomaticas igrejas_templos outros

tipo_servico_utilizado (enum):

telefonia comunicacao_dados tv_assinatura acesso_internet multimidia combo outros

Objeto item (itens[]):

CampoTipoDescrição
numero_iteminteger obrigatórioNúmero sequencial do item
produtoobject obrigatórioDados do produto/serviço
impostosobject obrigatórioImpostos (ICMS, PIS, COFINS, FUST, FUNTTEL)

Objeto produto:

CampoTipoDescrição
codigostringCódigo do produto
descricaostringDescrição
classificacaostringClassificação do produto
cfopstringCFOP
unidade_medidaenumminuto, mb, gb, un
quantidadenumberQuantidade
valor_unitarionumberValor unitário

Objeto fatura:

CampoTipoDescrição
data_competenciadateData de competência
data_vencimentodateData de vencimento
periodo_uso_inicialdateInício do período de uso
periodo_uso_finaldateFim do período de uso
codigo_barrasstringCódigo de barras do boleto
url_qrcode_pixstringURL do QR Code PIX

Exemplo:

{
  "referencia": "TELECOM-001",
  "ambiente": "Homologacao",
  "tipo_faturamento": "normal",
  "data_emissao": "2025-12-02",
  "serie": "1",
  "numero": "1234",
  "finalidade": "normal",
  "pre_pago": false,
  "cliente": {
    "tipoPessoa": "F",
    "cpfCnpj": "12345678900",
    "nome": "João da Silva",
    "email": "[email protected]",
    "indicadorContribuinteICMS": "ContribuinteNaoContribuinte",
    "endereco": {
      "logradouro": "Rua Exemplo",
      "numero": "100",
      "bairro": "Centro",
      "cidade": "São Paulo",
      "uf": "SP",
      "cep": "01001000"
    }
  },
  "assinante": {
    "codigo": "ASS-12345",
    "tipo_assinante": "residencial",
    "tipo_servico_utilizado": "combo",
    "numero_contrato": "CONT-2024-001",
    "data_inicio_contrato": "2024-01-01",
    "data_fim_contrato": "2025-12-31",
    "terminal_principal": "11999999999"
  },
  "itens": [{
    "numero_item": 1,
    "produto": {
      "codigo": "INTERNET-100",
      "descricao": "Internet Fibra 100MB",
      "classificacao": "06",
      "cfop": "5307",
      "unidade_medida": "un",
      "quantidade": 1,
      "valor_unitario": 99.90
    },
    "impostos": {
      "icms": {
        "cst": "00",
        "base_calculo": 99.90,
        "aliquota": 25,
        "valor": 24.98
      },
      "pis": { "cst": "01", "base_calculo": 99.90, "aliquota": 0.65, "valor": 0.65 },
      "cofins": { "cst": "01", "base_calculo": 99.90, "aliquota": 3, "valor": 3.00 }
    }
  }],
  "fatura": {
    "data_competencia": "2025-12-01",
    "data_vencimento": "2025-12-10",
    "periodo_uso_inicial": "2025-11-01",
    "periodo_uso_final": "2025-11-30",
    "codigo_barras": "23793.38128 60000.000003 00000.000402 1 84340000010000"
  }
}

Resposta (201 Created):

{ "id": "550e8400-e29b-41d4-a716-446655440000" }

Consultar NFCom

GET /nfcom/{referencia}

Consulta o status de uma NFCom pela referência.

Resposta:

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "referencia": "TELECOM-001",
  "ambiente": "Homologacao",
  "status": 2,
  "serie": "1",
  "numero": 1234,
  "protocolo": "135210000123456",
  "chave_acesso": "35231112345678000199620010000012341123456789",
  "codigo_status": 100,
  "link_download_pdf": "https://...",
  "link_download_xml": "https://...",
  "data_autorizacao": "2025-12-02T14:30:00Z",
  "erros": [],
  "avisos": []
}

Cancelar NFCom

DELETE /nfcom/{referencia}

Cancela uma NFCom autorizada.

CampoTipoDescrição
justificativastring obrigatórioMotivo do cancelamento (15-255 caracteres)

Consultar Webhooks

GET /webhooks

Lista todos os webhooks configurados.

Campos da resposta (cada webhook):

CampoTipoDescrição
idintegerID do webhook
urlstringURL configurada
tipoDocumentoarrayTipos de documento
tipoEventoarrayTipos de evento
customHeaderstringHeader customizado
customHeaderValuestringValor do header
createdAtdatetimeData de criação
updatedAtdatetimeData de atualização

Criar Webhook

POST /webhooks

Cria um webhook para receber notificações quando o status de um documento mudar.

CampoTipoDescrição
urlstring obrigatórioURL que receberá as notificações
tipoDocumentoarray obrigatórioTipos: nfe, nfce, nfse, cte, mdfe
tipoEventoarray obrigatórioEventos (veja abaixo)
customHeaderstringNome do header customizado
customHeaderValuestringValor do header customizado

tipoEvento (enum):

inclusao autorizacao cancelamento inutilizacao contingencia erro

Exemplo:

{
  "url": "https://meusite.com/webhook/notaapi",
  "tipoDocumento": ["nfe", "nfse"],
  "tipoEvento": ["autorizacao", "cancelamento", "erro"],
  "customHeader": "X-Webhook-Secret",
  "customHeaderValue": "minha-chave-secreta"
}

Reforma Tributária (IBS/CBS)

🆕 O que é a Reforma Tributária?

A Reforma Tributária brasileira (EC 132/2023) está substituindo gradualmente PIS, COFINS, IPI, ICMS e ISS por dois novos tributos: IBS (Imposto sobre Bens e Serviços) e CBS (Contribuição sobre Bens e Serviços).

Cronograma de Implementação

PeríodoO que muda
2026Início do período de testes. CBS começa a ser cobrada com alíquota reduzida (0,9%).
2027IBS começa a ser cobrado com alíquota reduzida. PIS/COFINS são extintos.
2028-2032Transição gradual. ICMS e ISS são reduzidos progressivamente.
2033Novo sistema totalmente implementado. ICMS e ISS extintos.

Impacto nos Documentos Fiscais

NFe e NFCe

Os campos do grupo ibscbs serão gradualmente obrigatórios nos itens da nota. Durante a transição, você precisará informar tanto os impostos antigos (ICMS, PIS, COFINS) quanto os novos (IBS, CBS).

NFSe

O ISS será substituído pelo IBS municipal. O objeto ibscbs na NFSe contém campos específicos para serviços, incluindo finalidade, tipo de operação governamental e dados de tributação.

Principais Campos IBS/CBS

CampoDescrição
CSTCódigo de Situação Tributária do IBS/CBS (000, 010, 200, 400, etc.)
cClassTribCódigo de classificação tributária do item
gIBSUFGrupo do IBS estadual (alíquota e valor)
gIBSMunGrupo do IBS municipal (alíquota e valor)
gCBSGrupo da CBS federal (alíquota e valor)
gIBSCBSMonoTributação monofásica (combustíveis, medicamentos, etc.)

CST IBS/CBS

CódigoDescrição
000Tributação normal
010Tributação com alíquota diferenciada
011Tributação monofásica
200Isenção
220Redução de base de cálculo
221Redução de alíquota
222Diferimento
400Imunidade
410Não incidência
510Suspensão

Recomendações

⚠️ Prepare-se para a transição
  • Acompanhe as atualizações da legislação e notas técnicas da SEFAZ
  • Os campos ibscbs já estão disponíveis na API para testes
  • Durante 2026, comece a incluir os campos IBS/CBS mesmo sendo opcionais
  • Consulte seu contador para definir classificações tributárias corretas
  • A NotaAPI será atualizada conforme as regras forem publicadas

Para detalhes técnicos dos campos IBS/CBS, consulte as seções de NFe e NFSe.

Tratamento de Erros

Códigos HTTP

CódigoSignificadoAção
200SucessoProcessar resposta
201CriadoRecurso criado com sucesso
400Requisição inválidaVerificar campos obrigatórios
401Não autorizadoVerificar credenciais
403Permissão negadaVerificar permissões
404Não encontradoVerificar ID/referência
422Erro de validaçãoEmpresa já existe ou dados inválidos
500Erro internoTentar novamente ou contatar suporte

Estrutura de erro

{
  "code": 400,
  "message": "Descrição do erro"
}

⚠️ Erros Comuns da SEFAZ

Rejeições mais frequentes e como resolver:

Problemas com Certificado/Credenciais

CódigoMensagemCausaSolução
280 Certificado Transmissor Inválido Certificado vencido ou não instalado corretamente Verificar validade do certificado A1 e refazer upload
281 Certificado Transmissor Revogado Certificado foi revogado pela certificadora Adquirir novo certificado digital
282 Certificado Transmissor Validade Certificado expirado Renovar certificado digital A1
213 CNPJ-Base do Emitente difere do CNPJ-Base do Certificado Certificado é de outra empresa Usar certificado da empresa emissora

Problemas com Destinatário

CódigoMensagemCausaSolução
539 Duplicidade de NF-e Já existe NFe com mesmo número/série Usar outro número ou inutilizar a faixa
204 Duplicidade de NF-e (chave de acesso) Chave de acesso já utilizada Usar nova referência para gerar nova chave
232 IE do destinatário não cadastrada Inscrição Estadual do cliente inválida Verificar IE do destinatário na SEFAZ
236 CPF do destinatário inválido CPF não existe ou está irregular Verificar CPF do cliente
237 CNPJ do destinatário inválido CNPJ não existe ou está irregular Verificar CNPJ na Receita Federal

Problemas com Produto/Item

CódigoMensagemCausaSolução
321 NCM inválido Código NCM não existe na tabela Verificar NCM correto na tabela TIPI
778 NCM incompatível com o CFOP Combinação NCM + CFOP não permitida Verificar CFOP correto para o produto
694 Não informado GTIN do item Campo EAN obrigatório não informado Informar EAN ou usar "SEM GTIN"
611 CFOP de entrada para operação de saída CFOP incompatível com tipo de operação Usar CFOP de saída (5xxx ou 6xxx)
598 Usar código de barras próprio GTIN/EAN inválido Corrigir EAN ou usar "SEM GTIN"

Problemas com Impostos

CódigoMensagemCausaSolução
388 CST incompatível com o CFOP CST/CSOSN não combina com o CFOP Verificar combinação CST+CFOP correta
906 CSOSN incompatível com regime tributário Usando CSOSN em empresa que não é Simples Usar CST normal ao invés de CSOSN
528 Valor ICMS diferente do calculado Base × Alíquota não confere com valor Recalcular ICMS (base × alíquota ÷ 100)
627 Total da NF difere do somatório Valor total não confere com soma dos itens Somar valores unitários × quantidade

Problemas com Empresa/Emitente

CódigoMensagemCausaSolução
202 IE do emitente não vinculada ao CNPJ IE não está associada ao CNPJ na SEFAZ Verificar cadastro na SEFAZ do estado
209 IE do emitente como não contribuinte Empresa não habilitada para emitir NFe Solicitar credenciamento na SEFAZ
217 UF emitente não autorizada Estado não aceita essa operação Verificar regras específicas do estado

Problemas com Cancelamento

CódigoMensagemCausaSolução
501 Prazo de cancelamento expirado Passou do prazo permitido pela UF Emitir nota de devolução/estorno
218 NFe já está cancelada Tentou cancelar nota já cancelada Nenhuma ação necessária
220 NFe fora do prazo de cancelamento Fora do prazo permitido pela UF Emitir nota de ajuste/devolução
💡 Dica de debug

Sempre verifique o campo erros na resposta de consulta da nota. Ele contém a lista completa de rejeições da SEFAZ com código e mensagem detalhada.

Status das Notas

O campo status retornado nas consultas indica o estado do documento:

CódigoStatusDescrição
0NovoDocumento criado, aguardando processamento
1EnviadoEnviado para SEFAZ/Prefeitura
2Autorizado ✅Documento autorizado com sucesso
3CanceladoDocumento foi cancelado
4InutilizadoNumeração inutilizada
5Erro ❌Erro na emissão - verificar campo erros

Enumerações

tipoContribuinte

simples_nacional simples_excesso_receita regime_normal mei

ambiente

Homologacao Producao

tipoOperacao

Entrada Saida

finalidade

Normal Complementar Ajuste DevolucaoMercadoria

tipoPessoa

F J

indicadorContribuinteICMS

ContribuinteICMS ContribuinteIsento ContribuinteNaoContribuinte

presencaConsumidor

NaoSeAplica OperacaoPresencial OperacaoPelaInternet OperacaoTeleAtendimento EntregaADomicilio OperacaoPresencialForaDoEstabelecimento

tipoPagamento

PagamentoAVista PagamentoAPrazo PagamentoOutros

tipoFormaPagamento

Dinheiro CartaoDeCredito CartaoDeDebito PagamentoInstantaneoPix BoletoBancario DepositoBancario Cheque CreditoLoja ValeAlimentacao ValeRefeicao SemPagamento Outros

modalidadeFrete

PorContaDoRemetente PorContaDoDestinatario PorContaDeTerceiros TransporteProprioPorContaDoRemetente TransporteProprioPorContaDoDestinatario SemOcorrenciaDeTransporte

tipoDocumento (Webhooks)

nfe nfce nfse nfcom

tipoEvento (Webhooks)

inclusao autorizacao cancelamento inutilizacao contingencia erro

tipo_faturamento (NFCom)

normal centralizado cofaturamento

tipo_assinante (NFCom)

comercial industrial residencial produtor_rural orgao_publico prestador_servico_telecom missoes_diplomaticas igrejas_templos outros

tipo_servico_utilizado (NFCom)

telefonia comunicacao_dados tv_assinatura acesso_internet multimidia combo outros

unidade_medida (NFCom)

minuto mb gb un

❓ FAQ - Perguntas Frequentes

Qual a diferença entre NFe e NFCe?
NFe (modelo 55) é usada em vendas B2B ou quando precisa de mais detalhes fiscais. Exige identificação do destinatário. NFCe (modelo 65) é para varejo/consumidor final, substitui o cupom fiscal. Mais simples e permite emissão sem identificar o cliente (CPF opcional).
Posso usar certificado A3?
Não. A NotaAPI suporta apenas certificados A1 (arquivo .pfx). Certificados A3 (token/cartão) não são compatíveis com integração via API. Se você tem um A3, precisará adquirir um A1.
Quanto tempo tenho para cancelar uma nota?
NFe/NFCe: Varia por UF (geralmente 24h, mas pode chegar a 168h em alguns estados como SP e RS). NFSe: Varia por prefeitura - algumas permitem dias, outras apenas horas. Após o prazo, é necessário emitir nota de devolução/estorno.
Posso testar sem emitir notas reais?
Sim! Use o ambiente de Homologação ("ambiente": "Homologacao"). As notas são enviadas para o ambiente de testes da SEFAZ e não têm valor fiscal. Perfeito para desenvolvimento e testes.
O que é o CSC/Token da NFCe?
É um código de segurança obrigatório para NFCe. Você obtém no portal da SEFAZ do seu estado, na área de contribuintes. São dois valores: ID do Token (número) e o Token em si (código alfanumérico).
Como sei se a nota foi autorizada?
Consulte a nota usando GET /nfe/{referencia}. Se o campo status for 2, está autorizada. Se for 5, teve erro - verifique o campo erros para detalhes.
A numeração da nota é automática?
Depende do tipo: Para NFSe, a numeração é automática - a API gerencia para você. Para NFe/NFCe, você precisa enviar o número e série no payload. Você é responsável por controlar a sequência no seu sistema.
Quanto tempo leva para autorizar uma nota?
NFe/NFCe: Normalmente 2-5 segundos. Pode levar mais em horários de pico ou instabilidade da SEFAZ. NFSe: 3-15 segundos, dependendo da prefeitura.
O que fazer quando a SEFAZ está fora do ar?
Para NFCe existe a contingência offline - a nota é emitida localmente e enviada depois. A API gerencia isso automaticamente. Para NFe, aguarde a SEFAZ normalizar ou use contingência SVC (se habilitada no estado).
Como descubro o código IBGE da cidade?
Acesse ibge.gov.br/cidades-e-estados e busque sua cidade. O código é o número de 7 dígitos. Exemplo: São Paulo = 3550308, Rio de Janeiro = 3304557.
Preciso guardar o XML da nota?
Sim! Por lei, você deve guardar o XML por 5 anos. A NotaAPI disponibiliza o link de download, mas recomendamos que você armazene também no seu sistema.
Qual a diferença entre Simples Nacional e Regime Normal?
Simples Nacional: Regime simplificado para pequenas empresas. Usa códigos CSOSN (101, 102, 500...). Regime Normal (Lucro Presumido/Real): Usa códigos CST (00, 10, 60...). Isso afeta como você preenche os impostos na nota.

🚀 Postman Collection

Collection pronta para testar a API no Postman:

NotaAPI v2 - Collection

Todos os endpoints configurados com variáveis de ambiente

✓ Autenticação pré-configurada ✓ Exemplos de request ✓ Variáveis de ambiente
Abrir Swagger

Configuração Manual

Se preferir configurar manualmente:

1

Configure as variáveis de ambiente

base_url: https://homologacao.notaapi.com.br/v2
api_key: sua API Key
company_id: UUID da empresa

2

Configure a autenticação

Em "Authorization", selecione "Basic Auth". Use {{api_key}} no username e deixe password vazio

3

Adicione o header companyId

Em "Headers", adicione companyId: {{company_id}} para as requisições de documentos

Exemplo de Environment

{
  "id": "notaapi-homologacao",
  "name": "NotaAPI - Homologação",
  "values": [
    { "key": "base_url", "value": "https://homologacao.notaapi.com.br/v2" },
    { "key": "api_key", "value": "SUA_API_KEY" },
    { "key": "company_id", "value": "SEU_COMPANY_ID" }
  ]
}