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"]
$tagsโฌœUse ["simplified"] for NFC-e (model 65)
uuidโฌœAuto-generated if absent
typeโฌœDefaults to standard
seriesโœ…Pattern: ^(?:0|[1-9]{1}[0-9]{0,2})$
codeโฌœRequired to sign the document.
issue_dateโœ…ISO date, e.g. "2024-11-15"
currencyโœ…Must be "BRL"
taxโœ…See Tax Extensions
notesโœ…At least one note with key: "reason" required
linesโœ…At least one line item
chargesโฌœDocument-level charges
discountsโฌœDocument-level discounts
supplierโœ…See 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-presenceโœ…See 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
keyโœ…Must be "reason"
textโœ…1โ€“60 characters
"notes": [
  {
    "key": "reason",
    "text": "Venda de mercadoria"
  }
]

Supplier

FieldRequiredNotes
nameโœ…
tax_id.countryโœ…"BR"
tax_id.codeโœ…CNPJ (14 digits) or CPF (11 digits), Mod11 validated
identities[].key: "br-nfe-state-reg"โœ…State Registration (Inscriรงรฃo Estadual)
addressesโœ…At least one โ€” see address fields below
ext.br-ibge-municipalityโœ…7-digit IBGE municipality code, pattern ^\d{7}$
emailsโฌœ
telephonesโฌœ
Address fields:
FieldRequiredNotes
streetโœ…
numโœ…Street number
localityโœ…Maps to bairro (neighbourhood)
stateโœ…One of 27 Brazilian state codes (see below)
codeโœ…Postal code, pattern ^\d{5}-?\d{3}$
regionโฌœMunicipality name, e.g. "Salvador"
street_extraโฌœComplement, e.g. "Bloco C"
countryโฌœDefaults 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.codeโœ…CNPJ or CPF
addressesโœ…At least one โ€” same sub-fields as supplier address
ext.br-ibge-municipalityโœ…Required when addresses are present
nameโฌœRecommended

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.priceโœ…Must be zero or positive
item.keyโฌœ"goods" or "services"
item.unitโฌœ
item.refโฌœ
item.descriptionโฌœ

Required tax categories per line

CategoryRequiredNotes
ICMSโœ…Imposto sobre Circulaรงรฃo de Mercadorias e Serviรงos
PISโœ…Programa de Integraรงรฃo Social
COFINSโœ…Contribuiรงรฃo para o Financiamento da Seguridade Social
IPIโฌœImposto sobre Produtos Industrializados

Optional item extensions

FieldRequiredNotes
item.ext.br-nfe-cfopโฌœ4-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.instructionsโœ…Must be present
payment.instructions.keyโœ…See means table below
payment.instructions.ext.br-nfe-payment-means๐Ÿ”งAuto-set from key. Must be set manually when key: "other"
payment.advances[].keyโฌœSame 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โฌœ
uuidโฌœAuto-generated if absent
typeโฌœDefaults to standard
seriesโœ…Any non-empty string
codeโฌœRequired to sign the document. Pattern: ^[1-9][0-9]*$
issue_dateโœ…ISO date, e.g. "2024-11-15"
currencyโœ…Must be "BRL"
taxโฌœ
notesโฌœ
linesโœ…At least one line item
chargesโŒNot supported by NFS-e
discountsโŒNot supported by NFS-e
supplierโœ…See Supplier
customerโฌœSee Customer
paymentโฌœ
orderingโฌœ
deliveryโฌœ

Supplier

FieldRequiredNotes
nameโœ…
tax_id.countryโœ…"BR"
tax_id.codeโœ…CNPJ (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
addressesโœ…At least one โ€” see address fields below
ext.br-ibge-municipalityโœ…7-digit IBGE municipality code, pattern ^\d{7}$
ext.br-nfse-simplesโœ…Simples Nacional opt-in status โ€” see values below
ext.br-nfse-fiscal-incentiveโœ…Fiscal incentive status. ๐Ÿ”ง Auto-defaults to "2" if absent
ext.br-nfse-special-regimeโฌœSpecial tax regime โ€” see values below
emailsโฌœ
telephonesโฌœ
Address fields:
FieldRequiredNotes
streetโœ…
numโœ…Street number
localityโœ…Maps to bairro (neighbourhood)
stateโœ…One of 27 Brazilian state codes (see below)
codeโœ…Postal code, pattern ^\d{5}-?\d{3}$
regionโฌœMunicipality name, e.g. "Rio de Janeiro"
street_extraโฌœComplement, e.g. "Torre A"
countryโฌœDefaults 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
nameโฌœRecommended if tax_id is set
tax_id.countryโฌœ"BR"
tax_id.codeโฌœCNPJ or CPF
addressesโฌœ
ext.br-ibge-municipalityโœ…Required 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.priceโœ…Must be zero or positive
item.keyโฌœTypically "services"
item.unitโฌœ
item.refโฌœ
item.descriptionโฌœ

Required item extension

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

Optional item extensions

FieldRequiredNotes
item.ext.br-nfse-cnaeโฌœCNAE code (National Classification of Economic Activities). Pattern: ^\d{2}[\s\.\-\/]?\d{2}[\s\.\-\/]?\d[\s\.\-\/]?\d{2}$
item.ext.br-nfse-operationโฌœ6-digit operation indicator for IBS/CBS determination. All-or-none with tax-status and tax-class
item.ext.br-nfse-tax-statusโฌœ3-digit CST (Cรณdigo de Situaรงรฃo Tributรกria) for IBS/CBS. All-or-none
item.ext.br-nfse-tax-classโฌœ6-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
ISSโœ…Imposto Sobre Serviรงos

ISS tax extensions

FieldRequiredNotes
taxes[ISS].ext.br-nfse-iss-liabilityโœ…ISS liability status. ๐Ÿ”ง Defaults to "1" if not set
taxes[ISS].ext.br-ibge-municipalityโฌœOverride 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 โ†’