Skip to main content
Invopop supports NF-e, NFS-e and NFC-e documents. Transport documents (MDF-e and CF-e) are not currently supported.
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.
Yes, all transaction are mandatory in Brazil.
At the moment, only NFC-e and NFS-e are supported. We are working on adding support for other types.
For further details on how GOBL prepares data for conversion, see:
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.
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.
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

The tax object is required and must carry the following 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).
FieldRequiredNotes
keyMust be "reason"
text1–60 characters
"notes": [
  {
    "key": "reason",
    "text": "Venda de mercadoria"
  }
]

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 — see address fields below
ext.br-ibge-municipality7-digit IBGE municipality code, pattern ^\d{7}$
emails
telephones
Address fields:
FieldRequiredNotes
street
numStreet number
localityMaps to bairro (neighbourhood)
stateOne of 27 Brazilian state codes (see below)
codePostal code, pattern ^\d{5}-?\d{3}$
regionMunicipality name, e.g. "Salvador"
street_extraComplement, e.g. "Bloco C"
countryDefaults to "BR"
Valid Brazilian state codes: AC, AL, AM, AP, BA, CE, DF, ES, GO, MA, MG, MS, MT, PA, PB, PE, PI, PR, RJ, RN, RO, RR, RS, SC, SE, SP, TO
"supplier": {
  "name": "Drogaria Vida Saudável Ltda.",
  "tax_id": { "country": "BR", "code": "55263640000186" },
  "identities": [
    { "key": "br-nfe-state-reg", "code": "35503304557308" }
  ],
  "addresses": [
    {
      "num": "200",
      "street": "Rua Primeiro de Março",
      "street_extra": "Torre A",
      "locality": "Centro",
      "region": "Rio de Janeiro",
      "state": "RJ",
      "code": "20010-000",
      "country": "BR"
    }
  ],
  "ext": {
    "br-ibge-municipality": "3304557"
  }
}

Customer

Model 55 (NF-e): Customer is ✅ Required

FieldRequiredNotes
tax_id.country"BR"
tax_id.codeCNPJ or CPF
addressesAt least one — same sub-fields as supplier address
ext.br-ibge-municipalityRequired when addresses are present
nameRecommended

Model 65 (NFC-e): Customer is ⬜ Optional

For simplified B2C consumer transactions the customer can be omitted entirely.

Line Items

FieldRequiredNotes
quantity
item.name
item.priceMust be zero or positive
item.key"goods" or "services"
item.unit
item.ref
item.description

Required tax categories per line

CategoryRequiredNotes
ICMSImposto sobre Circulação de Mercadorias e Serviços
PISPrograma de Integração Social
COFINSContribuição para o Financiamento da Seguridade Social
IPIImposto sobre Produtos Industrializados

Optional item extensions

FieldRequiredNotes
item.ext.br-nfe-cfop4-digit CFOP (Código Fiscal de Operações e Prestações), pattern ^[1-7]\d{3}$
item.identities[].key: "ncm"NCM product code (Nomenclatura Comum do Mercosul)
item.identities[].key: "gtin"Product barcode (GTIN)
item.identities[].key: "gtin+taxable"Taxable product GTIN
"lines": [
  {
    "i": 1,
    "quantity": "2",
    "item": {
      "name": "Caixa de Máscaras Cirúrgicas",
      "price": "10.00"
    },
    "taxes": [
      { "cat": "ICMS", "percent": "4.0%" },
      { "cat": "PIS",  "percent": "1.65%" },
      { "cat": "COFINS", "percent": "7.60%" }
    ]
  }
]

Payment

Required when the invoice is not fully paid (i.e. totals.due > 0).
FieldRequiredNotes
payment.instructionsMust be present
payment.instructions.keySee means table below
payment.instructions.ext.br-nfe-payment-means🔧Auto-set from key. Must be set manually when key: "other"
payment.advances[].keySame keys as instructions
payment.advances[].ext.br-nfe-payment-means🔧Auto-set from key
Payment means mapping:
GOBL keyNF-e codeDescription
cash01Dinheiro
cheque02Cheque
card03Cartão de Crédito
debit-transfer+debit04Cartão de Débito
credit-transfer18Transferência bancária
online18Carteira Digital
other99Outros (set ext.br-nfe-payment-means manually)
"payment": {
  "instructions": {
    "key": "card"
  }
}
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).

Notation

  • Required — validation will fail if missing
  • Optional — can be omitted
  • Not supported — must be absent; validation will fail if present
  • 🔧 Auto-normalized — set automatically if not provided

Invoice Header

FieldRequiredNotes
$schemaautohttps://gobl.org/draft-0/bill/invoice
$addons["br-nfse-v1"]
$tags
uuidAuto-generated if absent
typeDefaults to standard
seriesAny non-empty string
codeRequired to sign the document. Pattern: ^[1-9][0-9]*$
issue_dateISO date, e.g. "2024-11-15"
currencyMust be "BRL"
tax
notes
linesAt least one line item
chargesNot supported by NFS-e
discountsNot supported by NFS-e
supplierSee Supplier
customerSee Customer
payment
ordering
delivery

Supplier

FieldRequiredNotes
name
tax_id.country"BR"
tax_id.codeCNPJ (14 digits) or CPF (11 digits), Mod11 validated
identities[].key: "br-nfse-municipal-reg"Municipal Registration (Inscrição Municipal)
identities[].key: "br-nfse-national-reg"National Registration
addressesAt least one — see address fields below
ext.br-ibge-municipality7-digit IBGE municipality code, pattern ^\d{7}$
ext.br-nfse-simplesSimples Nacional opt-in status — see values below
ext.br-nfse-fiscal-incentiveFiscal incentive status. 🔧 Auto-defaults to "2" if absent
ext.br-nfse-special-regimeSpecial tax regime — see values below
emails
telephones
Address fields:
FieldRequiredNotes
street
numStreet number
localityMaps to bairro (neighbourhood)
stateOne of 27 Brazilian state codes (see below)
codePostal code, pattern ^\d{5}-?\d{3}$
regionMunicipality name, e.g. "Rio de Janeiro"
street_extraComplement, e.g. "Torre A"
countryDefaults to "BR"
Valid Brazilian state codes: AC, AL, AM, AP, BA, CE, DF, ES, GO, MA, MG, MS, MT, PA, PB, PE, PI, PR, RJ, RN, RO, RR, RS, SC, SE, SP, TObr-nfse-simples values:
CodeDescription
1Opt-in (Optante)
2Opt-out (Não optante)
br-nfse-fiscal-incentive values:
CodeDescription
1Has incentive (Possui incentivo)
2Does not have incentive (Não possui incentivo) — default
br-nfse-special-regime values:
CodeDescription
1Municipal micro-enterprise (Microempresa municipal)
2Estimated (Estimativa)
3Professional Society (Sociedade de profissionais)
4Cooperative (Cooperativa)
5Single micro-entrepreneur — MEI (Microempreendedor individual)
6Micro-enterprise or Small Business — ME/EPP
"supplier": {
  "name": "SaúdeMais Serviços Médicos Ltda.",
  "tax_id": { "country": "BR", "code": "55263640000186" },
  "identities": [
    { "key": "br-nfse-municipal-reg", "code": "45678901234567" }
  ],
  "addresses": [
    {
      "num": "200",
      "street": "Rua Primeiro de Março",
      "street_extra": "Torre A",
      "locality": "Centro",
      "region": "Rio de Janeiro",
      "state": "RJ",
      "code": "20010-000",
      "country": "BR"
    }
  ],
  "ext": {
    "br-ibge-municipality": "3304557",
    "br-nfse-simples": "1",
    "br-nfse-fiscal-incentive": "1",
    "br-nfse-special-regime": "4"
  }
}

Customer

The customer is optional for NFS-e. When provided, no additional fields beyond the standard GOBL rules are enforced (name recommended when tax_id is set).
FieldRequiredNotes
nameRecommended if tax_id is set
tax_id.country"BR"
tax_id.codeCNPJ or CPF
addresses
ext.br-ibge-municipalityRequired when addresses are present
"customer": {
  "name": "Construforte Engenharia Ltda.",
  "tax_id": { "country": "BR", "code": "46602178000103" },
  "addresses": [
    {
      "num": "75",
      "street": "Avenida Sete de Setembro",
      "locality": "Centro",
      "region": "Salvador",
      "state": "BA",
      "code": "40060-000",
      "country": "BR"
    }
  ]
}

Line Items

FieldRequiredNotes
quantity
item.name
item.priceMust be zero or positive
item.keyTypically "services"
item.unit
item.ref
item.description

Required item extension

FieldRequiredNotes
item.ext.br-nfse-serviceMunicipality-defined service code (e.g. "10.5"). Typically from Lei Complementar 116/2003

Optional item extensions

FieldRequiredNotes
item.ext.br-nfse-cnaeCNAE code (National Classification of Economic Activities). Pattern: ^\d{2}[\s\.\-\/]?\d{2}[\s\.\-\/]?\d[\s\.\-\/]?\d{2}$
item.ext.br-nfse-operation6-digit operation indicator for IBS/CBS determination. All-or-none with tax-status and tax-class
item.ext.br-nfse-tax-status3-digit CST (Código de Situação Tributária) for IBS/CBS. All-or-none
item.ext.br-nfse-tax-class6-digit tax classification code for IBS/CBS. All-or-none
All-or-none rule: br-nfse-operation, br-nfse-tax-status, and br-nfse-tax-class must either all be present or all be absent. Setting only some of them will fail validation.

Required tax categories per line

CategoryRequiredNotes
ISSImposto Sobre Serviços

ISS tax extensions

FieldRequiredNotes
taxes[ISS].ext.br-nfse-iss-liabilityISS liability status. 🔧 Defaults to "1" if not set
taxes[ISS].ext.br-ibge-municipalityOverride the municipality where ISS is levied, when it differs from the supplier’s
br-nfse-iss-liability values:
CodeDescription
1Liable (Exigível) — default
2Not subject (Não incidência)
3Exempt (Isenção)
4Export (Exportação)
5Immune (Imunidade)
6Suspended Judicially (Suspensa por Decisão Judicial)
7Suspended Administratively (Suspensa por Processo Administrativo)
"lines": [
  {
    "i": 1,
    "quantity": "1",
    "item": {
      "name": "Consultancy Services",
      "price": "100.00",
      "ext": {
        "br-nfse-service": "10.5",
        "br-nfse-cnae": "62.01-5-01"
      }
    },
    "taxes": [
      {
        "cat": "ISS",
        "percent": "15%",
        "ext": {
          "br-nfse-iss-liability": "1"
        }
      }
    ]
  }
]

Participate in our community

Ask and answer questions about Brazil’s regulation →