Como emitir NF-e para venda de e-book
Empresas que vendem livros digitais (e-books) pela internet emitem NF-e (Nota Fiscal Eletrônica de produto, modelo 55) para documentar cada venda. Este recipe mostra o payload simplificado da API v2 para esse cenário: operação de saída, venda a consumidor final, não presencial (internet), item único com imunidade de livros.
Pré-requisitos
- Empresa cadastrada na plataforma com certificado digital A1 válido.
- Inscrição estadual ativa no ambiente desejado (
TestouProduction). - Chave de API de emissão — veja Primeiros passos.
- Webhook configurado para receber o resultado da emissão — veja Conceitos de webhook.
Solução
Uma única chamada POST /v2/companies/{companyId}/productinvoices enfileira a emissão. A API responde 202 Accepted e o resultado (autorizada ou rejeitada) chega pelo webhook. Os campos obrigatórios são buyer, items e payment; os demais definem o tipo da operação.
Etapa 1: Definir a operação fiscal
Para venda de e-book a consumidor final pela internet, use esta parametrização:
| Campo | Valor | Significado |
|---|---|---|
operationType | Outgoing | Operação de saída (tpNF=1) |
purposeType | Normal | NF-e normal de venda (finNFe=1) |
consumerType | FinalConsumer | Consumidor final (indFinal=1) |
presenceType | Internet | Operação pela internet (indPres=2) |
items[].cfop | 5102 / 6102 | Venda dentro da UF / interestadual |
items[].ncm | 49019900 | Livros (classificação usual para e-book) |
items[].tax.icms | origin: "0", cst: "41" | Mercadoria nacional, ICMS não tributado (imunidade de livros) |
items[].benefit | código cBenef da UF do emitente | Obrigatório com CST 41 em DF, ES, GO, PR, RJ, RS, SC e SP (ex.: PR800001 no Paraná) |
items[].tax.pis / items[].tax.cofins | cst: "06" | Alíquota zero para livros |
NCM, CST e CFOP dependem do enquadramento fiscal do emitente. Em especial, o CST de PIS/COFINS (06 alíquota zero, ou 07/08) varia conforme o regime e a interpretação adotada para livros digitais. Valide a parametrização com o contador responsável antes de emitir em produção.
Etapa 2: Montar o payload e enviar
Envie a requisição com os três grupos obrigatórios preenchidos:
curl -X POST "https://api.nfse.io/v2/companies/{company_id}/productinvoices" \
-H "Authorization: {sua-api-key}" \
-H "Content-Type: application/json" \
-d @nota-ebook.json
Conteúdo de nota-ebook.json:
{
"id": "pedido-12345",
"operationNature": "Venda de livro eletrônico (e-book)",
"operationType": "Outgoing",
"purposeType": "Normal",
"consumerType": "FinalConsumer",
"presenceType": "Internet",
"buyer": {
"name": "Nome do Comprador",
"federalTaxNumber": 52998224725,
"email": "[email protected]",
"address": {
"state": "SP",
"city": { "code": "3550308", "name": "São Paulo" },
"district": "Centro",
"street": "Rua Exemplo",
"number": "100",
"postalCode": "01001000",
"country": "BRA"
}
},
"items": [
{
"code": "EBOOK-001",
"description": "E-book: Título do Livro Digital",
"ncm": "49019900",
"cfop": 5102,
"benefit": "<cBenef da UF do emitente>",
"unit": "UN",
"unitTax": "UN",
"quantity": 1,
"unitAmount": 49.90,
"totalAmount": 49.90,
"tax": {
"icms": { "origin": "0", "cst": "41" },
"pis": { "cst": "06" },
"cofins": { "cst": "06" }
}
}
],
"payment": [
{ "paymentDetail": [ { "method": "CreditCard", "amount": 49.90 } ] }
]
}
Omita serie e number: a numeração é controlada pela inscrição estadual configurada na plataforma. Use o campo id com o identificador do seu pedido para rastrear a nota no webhook.
Etapa 3: Acompanhar a emissão pelo webhook
A resposta 202 confirma apenas o enfileiramento. O resultado chega no endpoint de webhook cadastrado, com o evento de autorização ou rejeição. Para consulta pontual, use GET /v2/companies/{company_id}/productinvoices/{invoice_id}.
Variações
- Emitente do Simples Nacional: no grupo
icms, troquecstpor"csosn": "300"(imune). Informe exatamente um dos dois campos. - Comprador em outra UF: use
cfop: 6102. Em operação imune, não há DIFAL a recolher. - Pagamento via PIX: use
"method": "InstantPayment"nopaymentDetail.
Armadilhas comuns
cstecsosnpreenchidos juntos — a API recusa a requisição com 400 ("icms cannot have cst and csosn on same item"). Informe apenas o campo compatível com o regime do emitente.- Sem
benefitnas UFs que exigem cBenef — a SEFAZ rejeita a nota (cStat 930). Nas UFs listadas na Etapa 1, informe o código de benefício da UF do emitente. federalTaxNumbercom máscara — envie o CPF ou CNPJ sem pontos, barras e traços (CNPJ alfanumérico vai como string).- Esperar resposta síncrona — o
202não é autorização. Sem webhook, a nota pode ser rejeitada sem que sua aplicação perceba. - Numeração manual — informar
serie/numberpode conflitar com a numeração automática da inscrição estadual e gerar duplicidade. - Reforma Tributária (IBS/CBS) — a partir de 2026, emitentes do regime normal devem informar o grupo IBS/CBS na NF-e; para livros, CST
410e cClassTrib410008. Consulte a documentação de Reforma Tributária para o payload RTC.