Skip to main content

Documentation Index

Fetch the complete documentation index at: https://invopop-mintlify-email-recipients-1778506708.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Compliance questions

Brazil
Yes, all transaction are mandatory in Brazil.
Any entity with a CNPJ (legal entity) or CPF (individual) registered in Brazil. State and municipal registrations (Inscrição Estadual / Municipal) are also required depending on whether the supplier issues NF-e (state) or NFS-e (municipal) documents.
NF-e
NF-e (model 55) for goods has been mandatory since 2008 — phased in by sector and turnover. NFC-e (model 65, retail B2C) replaced the paper Cupom Fiscal in most states between 2014 and 2020. Both are now required for any commercial circulation of goods.
The supplier needs an active state Inscrição Estadual, a CNAE that authorizes goods circulation, and an A1 certificate matching the issuing CNPJ. Some states (SP, RJ, MG) require additional credenciamento before NF-e issuance.
NFS-e
ISS (Imposto Sobre Serviços) is not treated as a standard transactional tax calculated on top of a net amount. Instead, it is an informative tax embedded in the final price—the invoice only reports what portion of the total corresponds to ISS.In GOBL, ISS is flagged as an “informative” tax category. This means:
  • ISS must be added to the GOBL invoice like any other tax, with the proper percentage.
  • The tax amount is not added to the price; it represents the portion of the total that corresponds to ISS.
  • The NFS-e document displays ISS as informational data, reflecting what was already embedded in the final price.
  • Do not use prices_include with ISS—since ISS is informative, it should not be treated as a price-inclusive tax.
It is not necessary, any fields pertaining to the previous municipal tax implementation will be ignored and the invoice will already have all the data to be compliant. However, it is always recommended to remove ignored fields to avoid confusion and keep your documents clean.
NFS-e is municipal, so the supplier needs an Inscrição Municipal in every município where they invoice services. Special tax regimes (Simples Nacional, MEI, ISS estimado) impose additional fields and rates.

Invoicing questions

Brazil
Invopop supports NF-e, NFS-e and NFC-e documents. Transport documents (MDF-e and CF-e) are not currently supported.
For further details on how GOBL prepares data for conversion, see:
NF-e
Build a GOBL invoice with the br-nfe-v4 addon, send it through the Issue NF-e workflow. Invopop signs with the supplier’s A1 cert, transmits to the issuer’s state SEFAZ, receives the protocolo de autorização, and exposes the authorized XML and DANFE PDF.
NF-e (br-nfe-v4) covers electronic invoices for the circulation of goods in Brazil. It maps to two fiscal models:
  • Model 55 — NF-e: B2B or business-to-government transactions
  • Model 65 — NFC-e: B2C consumer transactions (simplified)

Notation

  • Required — validation will fail if missing
  • Optional — can be omitted
  • 🔧 Auto-normalized — set automatically if not provided

Invoice Header

FieldRequiredNotes
$schemaautohttps://gobl.org/draft-0/bill/invoice
$addons["br-nfe-v4"]
$tagsUse ["simplified"] for NFC-e (model 65)
uuidAuto-generated if absent
typeDefaults to standard
seriesPattern: ^(?:0|[1-9]{1}[0-9]{0,2})$
codeRequired to sign the document.
issue_dateISO date, e.g. "2024-11-15"
currencyMust be "BRL"
taxSee Tax Extensions
notesAt least one note with key: "reason" required
linesAt least one line item
chargesDocument-level charges
discountsDocument-level discounts
supplierSee Supplier
customer✅ model 55
⬜ model 65
See Customer
payment✅ if not fully paidSee Payment
ordering
delivery

Tax Extensions

ExtensionRequiredValues
tax.ext.br-nfe-model"55" (NF-e, B2B) or "65" (NFC-e, B2C)
tax.ext.br-nfe-presenceSee table below. Restricted by model.
tax.ext.br-nfe-regime"1"=Simples Nacional, "2"=Simples Nacional Excess, "3"=Normal
tax.ext.br-nfe-fiscal-incentive"1"=Has incentive, "2"=No incentive
br-nfe-presence allowed values:
CodeDescriptionNF-e (55)NFC-e (65)
0N/A
1In-person
2Internet
3Tele-service
4Home delivery
5Off-site
9Others
"tax": {
  "ext": {
    "br-nfe-model": "55",
    "br-nfe-presence": "1"
  }
}

Notes

At least one note with key: "reason" is required. It maps to the NF-e natOp field (nature of the operation).

Supplier

FieldRequiredNotes
name
tax_id.country"BR"
tax_id.codeCNPJ (14 digits) or CPF (11 digits), Mod11 validated
identities[].key: "br-nfe-state-reg"State Registration (Inscrição Estadual)
addressesAt least one
ext.br-ibge-municipality7-digit IBGE municipality code

Customer (Model 55 — required, Model 65 — optional)

FieldRequiredNotes
tax_id.country"BR"
tax_id.codeCNPJ or CPF
addresses
ext.br-ibge-municipalityRequired when addresses are present

Line items

Required tax categories per line: ICMS, PIS, COFINS. IPI is optional.Optional item extensions: item.ext.br-nfe-cfop, item.identities[].key: "ncm" | "gtin" | "gtin+taxable".

Payment

Required when the invoice is not fully paid. Must include payment.instructions.key. Payment-means mapping is auto-set unless key: "other".
NFS-e
Build a GOBL invoice with the br-nfse-v1 addon and send it through the Issue NFS-e workflow. Until the federal NFS-e (DPS) takes over in 2026, Invopop routes per-municipality — the workflow handles the underlying API differences transparently.
Billing platforms like Chargebee and Stripe are not aware of ISS particularities and tend to wrongly treat ISS as a typical tax included in the price. This causes invalid-prices-include errors during import because that pricing model is not compatible with how ISS works for NFS-e.The correct setup is:
  1. Do not configure ISS as a tax in your billing platform (Chargebee, Stripe, etc.).
  2. Prices in your billing platform should already be the final public prices with ISS embedded.
  3. Add a Modify Silo Entry step to your import workflow that injects the ISS tax with the desired percentage into the GOBL invoice.
This workflow approach ensures ISS is properly added to the GOBL invoice as an informative tax category before submission to the Brazilian tax authority, while avoiding the pricing conflicts that occur when billing platforms try to handle ISS as a standard tax.
NFS-e (br-nfse-v1) covers electronic service invoices (Notas Fiscais de Serviços Eletrônicas) in Brazil. Service invoices are regulated at the municipal level, so several fields carry municipality-specific codes. The addon implements the ABRASF national standard (v2.04).

Invoice Header

FieldRequiredNotes
$addons["br-nfse-v1"]
seriesAny non-empty string
codeRequired to sign the document
issue_dateISO date
currencyMust be "BRL"
linesAt least one line item
chargesNot supported by NFS-e
discountsNot supported by NFS-e
supplierSee Supplier

Supplier

FieldRequiredNotes
name
tax_id.country"BR"
tax_id.codeCNPJ or CPF
identities[].key: "br-nfse-municipal-reg"Municipal Registration
addresses
ext.br-ibge-municipality7-digit IBGE municipality code
ext.br-nfse-simples"1" opt-in, "2" opt-out
ext.br-nfse-fiscal-incentive"1" has incentive, "2" does not (default)
ext.br-nfse-special-regimeSpecial regime values

Customer

Optional. When provided, ext.br-ibge-municipality is required if addresses are present.

Line items

Required item extension: item.ext.br-nfse-service (municipality service code).Optional item extensions: item.ext.br-nfse-cnae, plus the all-or-none trio item.ext.br-nfse-{operation,tax-status,tax-class}.Required tax category per line: ISS. ISS extension taxes[ISS].ext.br-nfse-iss-liability defaults to "1" (Liable).

Registering supplier questions

Brazil
Upload the supplier’s A1 digital certificate (PFX or P12) plus password through the registration workflow. Invopop validates it against the relevant SEFAZ or municipal endpoint and activates the supplier for issuing.
A1 certificates (X.509 + private key, exported as PKCS#12) and their passwords are stored encrypted. Invopop uses them to sign documents and authenticate to the relevant SEFAZ or municipal endpoint on the supplier’s behalf.
NF-e
Upload the A1 certificate plus its password through the Register Supplier workflow, providing the supplier’s CNPJ and Inscrição Estadual. Invopop validates the certificate against SEFAZ and activates the supplier for the corresponding UF.
An ICP-Brasil A1 certificate issued to the supplier’s CNPJ (or CPF for individuals). Format: PKCS#12 (.pfx/.p12) containing the X.509 cert and matching private key. Validity is typically 1 year.
NFS-e
Upload the supplier’s A1 certificate plus the Inscrição Municipal for the relevant city. The federal DPS (2026) consolidates registration; until then, separate enrollment per municipality may be required for high-volume issuance.
Most municipalities accept the same ICP-Brasil A1 certificate used for NF-e. A few require A3 (smartcard/USB token) — Invopop currently supports A1 only.

Participate in our community

Ask and answer questions about Brazil’s regulation →