[MX] Standard Invoice (CFDI Ingreso)

What is a Standard Invoice?

A CFDI Ingreso is the standard electronic invoice in Mexico. Issue one every time you sell goods or services to a buyer with a valid RFC. It is stamped by SAT via a PAC — Brinta handles this automatically.

FieldValue
invoice_typedebit
document_typeinvoice
e_invoicetrue
currencyMXN (or foreign with exchange_rate)

When to issue a CFDI Ingreso

SituationIssue?
Regular sale of goods or services✅ Yes
Sale to a business with RFC✅ Yes
Sale to general public (no RFC)✅ Yes — use RFC XAXX010101000
Sale to a foreign buyer✅ Yes — use RFC XEXX010101000
Recording receipt of a deferred payment❌ No — use Complemento de Pago instead

Field by Field

Root Level

supplier_company_id

UUID of the issuing company in Brinta. Determines the Emisor in the CFDI — RFC, fiscal regime, and address are pulled from this record automatically.

invoice_serie

Invoice series (SAT: Serie). A prefix that groups invoices — e.g. FE, A, B. Must be pre-registered with SAT. Max 25 alphanumeric characters, no spaces.

invoice_number

Invoice folio (SAT: Folio). Sequential number within the series. Must be unique per invoice_serie.

invoice_date

Issuance date in YYYY-MM-DD. Must be the current day — SAT does not allow backdating or future dating.

reason

SAT field c_UsoCFDI. How the buyer will use the invoice for tax purposes. Ask the buyer if unsure.

ValueDescriptionCommon for
G01Acquisition of goodsProduct purchases
G03General expensesServices, miscellaneous
I01ConstructionConstruction services
D01Medical and dental feesHealthcare
S01No tax effectsExempt operations
CP01PaymentsOnly for Complemento de Pago — do not use here

export_reason

SAT field c_MotivoTraslado. Required for all CFDI 4.0 invoices.

ValueDescriptionWhen to use
01No exportStandard. Use for all domestic invoices.
02Definitive exportGoods leaving Mexico permanently.
03Temporary exportGoods leaving Mexico temporarily.
04Return of imported goodsReturning previously imported merchandise.

currency and exchange_rate

  • Use MXN and omit exchange_rate (or set to 1) for peso invoices.
  • For foreign currency: set the ISO 4217 code (e.g. USD) and include the SAT official exchange rate for the invoice date in exchange_rate.

payment_method.type

How the buyer is paying. Affects whether a Complemento de Pago will be required later.

ValueWhen to use
cashPaid at time of issuance. No Complemento de Pago needed.
bank transferUse for SPEI or wire. If deferred → will require Complemento de Pago.
credit cardPaid at time of issuance.
debit cardPaid at time of issuance.

buyer

company.name and company.legal_name

Must match the buyer's SAT registration exactly — SAT cross-references this against the RFC.

  • Businesses: full legal name (e.g. CLIENTE EJEMPLO S.A. DE C.V.).
  • Individuals: full name (e.g. JUAN PEREZ GARCIA).

company.type

ValueWhen to use
businessLegal entity (S.A. de C.V., S. de R.L., etc.)
personIndividual (persona física)

company.address.postal_code

Buyer's fiscal postal code as registered with SAT. Required for CFDI 4.0. Must be 5 digits for Mexican buyers.

tax_registrations[].number

Buyer's RFC.

SituationRFC to use
Known business or individualTheir actual RFC
General public (no RFC)XAXX010101000
Foreign buyerXEXX010101000

tax_registrations[].status

SAT fiscal regime (c_RegimenFiscal). The buyer must provide this.

ValueRegime
Regimen generalGeneral regime for legal entities
Regimen de Actividades ProfesionalesProfessional services individuals
Regimen de Incorporacion FiscalSmall business simplified regime
Regimen Simplificado de ConfianzaRESICO

items[]

Each item maps to a Concepto in the CFDI.

unit_amount and amount

Both are before taxes.

  • unit_amount = price per unit before tax.
  • amount = quantity × unit_amount.

taxes[]

taxes[].name

ValueWhen to use
VATIVA — standard Mexican value-added tax
ISRIncome tax withholding
IEPSSpecial tax on production and services

taxes[].rate

RatePercentageWhen to use
0.1616%Standard IVA — most goods and services
0.088%Reduced IVA for border regions
00%Zero-rated IVA (food, medicine)
0.106710.67%ISR withholding on professional fees

taxes[].adds_to_final_amount

ValueWhen to use
trueTransferred tax (traslado) — IVA that adds to the buyer's total.
falseWithheld tax (retención) — deducted from what you receive. Use for ISR.

taxes[].withholding_type

Only include for withheld taxes. Use withholding. Omit entirely for transferred taxes (IVA).

category[]

category[].code — SAT product/service key (c_ClaveProdServ)

Classifies what you're selling. Affects VAT treatment and buyer's tax deductibility. Send without list field.

  • Search the official SAT catalog at sat.gob.mx or ask your tax advisor.
  • Common examples: 81161500 (consulting), 43211500 (computers), 50181500 (food).

category[].list = "unit" — SAT unit key (c_ClaveUnidad)

CodeUnitCommon for
E48Service unitProfessional services
H87PiecePhysical goods
KGMKilogramGoods sold by weight
LTRLiterLiquids
MTRMeterLength-based goods

Full Example Payload

{
  "supplier_company_id": "{{company_id}}",
  "invoice_number": "123456",
  "invoice_serie": "FE",
  "invoice_type": "debit",
  "document_type": "invoice",
  "invoice_date": "2025-09-03",
  "export_reason": "01",
  "e_invoice": true,
  "currency": "MXN",
  "reason": "G03",
  "buyer": {
    "company": {
      "name": "CLIENTE EJEMPLO S.A. DE C.V.",
      "legal_name": "CLIENTE EJEMPLO S.A. DE C.V.",
      "type": "business",
      "address": { "postal_code": "06600", "country": "MX" },
      "tax_registrations": [
        {
          "type": "RFC",
          "number": "CEJ890423H71",
          "level": "country",
          "location": "MX",
          "status": "Regimen general"
        }
      ]
    }
  },
  "items": [
    {
      "name": "Servicio de consultoría",
      "quantity": 1,
      "unit_amount": 10000,
      "amount": 10000,
      "taxes": [
        {
          "name": "VAT",
          "rate": 0.16,
          "rate_type": "percentage",
          "amount": 1600,
          "adds_to_final_amount": true
          // Transferred IVA — adds to what the buyer pays
        }
      ],
      "category": [
        { "code": "81161500" },
        // SAT c_ClaveProdServ — consulting services. No "list" field.
        { "code": "E48", "list": "unit" }
        // SAT c_ClaveUnidad — service unit
      ]
    }
  ]
}

Common Mistakes

MistakeWhat happensFix
invoice_date is not todaySAT rejects the stampAlways use current date
Wrong reason codeBuyer cannot deduct the invoiceAsk the buyer for their c_UsoCFDI
RFC doesn't match buyer's legal nameSAT validation errorBoth must match SAT records exactly
category[].code sent with a list fieldIncorrect CFDI structureSend product/service code without list
Missing export_reasonBrinta validation errorAlways include — use 01 for domestic
adds_to_final_amount: true on withholdingIncorrect tax calculationUse false + withholding_type: "withholding" for retentions