Pular para o conteúdo principal

Primeiros passos

Este guia cobre a instalação, a criação do cliente e a emissão da sua primeira nota fiscal de serviço (NFS-e), do envio até o PDF.

1. Instale o pacote​

pip install nfe-io
# ou
uv add nfe-io
Requisitos

Python 3.10 ou superior. O SDK não tem dependências de runtime: usa só a biblioteca padrão. O pacote se chama nfe-io no PyPI e é importado como nfeio.

2. Configure as chaves​

A NFE.io usa duas chaves, cada uma para um grupo de APIs:

ParâmetroVariável de ambienteUsada em
api_keyNFE_API_KEYNFS-e, empresas, certificados, webhooks
data_api_keyNFE_DATA_API_KEYconsultas de CNPJ, CPF e CEP
export NFE_API_KEY="sua-chave"
export NFE_DATA_API_KEY="sua-chave-de-dados"

O SDK nunca usa uma chave no lugar da outra. Se você tem uma chave só, use o mesmo valor nas duas. Detalhes em Configuração.

3. Crie um cliente​

from nfeio import NfeClient

client = NfeClient() # lê NFE_API_KEY e NFE_DATA_API_KEY

Também dá para passar as chaves direto: NfeClient(api_key="...", data_api_key="..."). O argumento explícito vence a variável de ambiente. O cliente é thread-safe: crie um por configuração e reutilize.

4. Emita uma NFS-e​

from decimal import Decimal

from nfeio import NfeClient, ServiceInvoice
from nfeio.types import ServiceInvoiceCreateParams

client = NfeClient()
company_id = "ID_DA_EMPRESA"

params: ServiceInvoiceCreateParams = {
"cityServiceCode": "10677",
"description": "Consultoria em tecnologia",
"servicesAmount": Decimal("150.00"),
"borrower": {
"type": "NaturalPerson",
"name": "Maria Silva",
"federalTaxNumber": "52998224725",
"email": "[email protected]",
},
}

invoice: ServiceInvoice = client.service_invoices.create_and_wait(
company_id, params, external_id="pedido-1001"
)
print(invoice.id, invoice.flow_status) # ... Issued
print(invoice["number"]) # qualquer campo do JSON, pelo nome original
print(repr(invoice.services_amount)) # Decimal(...), sem erro de arredondamento

Três coisas para notar:

  • O corpo usa as chaves da API (camelCase), exatamente como na referência da NFS-e: copie um exemplo da documentação e ele funciona. Os argumentos dos métodos seguem o padrão Python (snake_case).
  • external_id é a sua chave de deduplicação. Use sempre, com um valor que identifique a venda no seu sistema. É ele que permite reconciliar uma emissão com resultado incerto sem duplicar a nota (veja Tratamento de erros).
  • create_and_wait espera a prefeitura. A emissão é assíncrona: a API responde 202 e a nota passa por estados intermediários até Issued. O método consulta a nota até um estado final (120 s por padrão). Os detalhes estão em Síncrono, assíncrono e polling.
Produção ou teste

Não existe host de homologação nem chave de teste. O ambiente (produção ou teste) é configurado na empresa, na inscrição municipal. Para testar, use uma empresa com ambiente de testes.

5. Baixe o PDF e o XML​

from pathlib import Path

from nfeio import NfeClient

client = NfeClient()
company_id = "ID_DA_EMPRESA"
invoice_id = "ID_DA_NOTA"

pdf: bytes = client.service_invoices.download_pdf(company_id, invoice_id)
Path("nota.pdf").write_bytes(pdf)

xml: bytes = client.service_invoices.download_xml(company_id, invoice_id)
Path("nota.xml").write_bytes(xml)

Mais em Downloads.

6. Leia a resposta​

Toda resposta é um NfeObject, um Mapping imutável sobre o JSON recebido:

  • obj["campo"] dá acesso a qualquer campo, inclusive os que o SDK ainda não conhece. Objetos aninhados também são NfeObject: invoice["borrower"]["address"]["city"]["code"].
  • Algumas propriedades tipadas corrigem ou tipam o que vem no fio: ids, status, datas (datetime com fuso), valores (Decimal) e documentos (CNPJ/CPF como str com zeros à esquerda). Exemplos: invoice.flow_status, invoice.services_amount, invoice.issued_on, invoice.borrower.federal_tax_number.
  • obj.to_dict() devolve uma cópia em dicionários comuns, serializável com json.dumps.
  • obj.last_response.request_id traz o x-request-id da resposta. Informe esse valor ao suporte.
Valores monetários

No acesso por chave, valores aparecem como vieram no JSON (float). Nas propriedades tipadas, como Decimal. Nas requisições, int, float e Decimal são aceitos, e Decimal("100.10") é enviado sem perda como 100.10.

Próximos passos​

NFE.io

A NFE.io é uma empresa de tecnologia que fornece soluções para automatizar e simplificar a emissão e gestão de notas fiscais eletrônicas. Com suas ferramentas, as empresas podem economizar tempo e reduzir erros, aumentando a eficiência e precisão do processo de emissão de notas fiscais.

Um dos principais cases de sucesso da NFE.io é a implementação da solução na empresa de transporte Rodonaves. Com a automatização da emissão e gestão de notas fiscais eletrônicas, a Rodonaves conseguiu reduzir em até 80% o tempo gasto nesse processo, o que se traduziu em uma significativa melhoria na eficiência operacional. Além disso, a empresa também conseguiu eliminar erros e atrasos na emissão de notas fiscais, o que melhorou a relação com seus clientes e aumentou a confiança dos órgãos fiscais.

Outro exemplo é a implementação da NFE.io na empresa de comércio eletrônico, a Loja Integrada. Com a automatização da emissão de notas fiscais, a Loja Integrada conseguiu aumentar a velocidade de emissão de notas em até 10 vezes, o que permitiu que a empresa atendesse a uma maior quantidade de clientes e, consequentemente, aumentar as suas vendas.

Além desses exemplos, a NFE.io também tem outros cases de sucesso com empresas de setores como indústria, construção, varejo e serviços, mostrando a versatilidade e eficácia da sua solução.

Em resumo, a NFE.io é uma empresa de tecnologia que oferece soluções para automatizar e simplificar a emissão e gestão de notas fiscais eletrônicas, ajudando as empresas a economizar tempo e reduzir erros, melhorando a eficiência e precisão do processo. Com cases de sucesso em diferentes setores, a NFE.io tem se destacado como uma empresa líder em automação fiscal.