[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.
| Field | Value |
|---|---|
invoice_type | debit |
document_type | invoice |
e_invoice | true |
currency | MXN (or foreign with exchange_rate) |
When to issue a CFDI Ingreso
| Situation | Issue? |
|---|---|
| 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
supplier_company_idUUID 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_serieInvoice 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_numberInvoice folio (SAT: Folio). Sequential number within the series. Must be unique per invoice_serie.
invoice_date
invoice_dateIssuance date in YYYY-MM-DD. Must be the current day — SAT does not allow backdating or future dating.
reason
reasonSAT field c_UsoCFDI. How the buyer will use the invoice for tax purposes. Ask the buyer if unsure.
| Value | Description | Common for |
|---|---|---|
G01 | Acquisition of goods | Product purchases |
G03 | General expenses | Services, miscellaneous |
I01 | Construction | Construction services |
D01 | Medical and dental fees | Healthcare |
S01 | No tax effects | Exempt operations |
CP01 | Payments | Only for Complemento de Pago — do not use here |
export_reason
export_reasonSAT field c_MotivoTraslado. Required for all CFDI 4.0 invoices.
| Value | Description | When to use |
|---|---|---|
01 | No export | Standard. Use for all domestic invoices. |
02 | Definitive export | Goods leaving Mexico permanently. |
03 | Temporary export | Goods leaving Mexico temporarily. |
04 | Return of imported goods | Returning previously imported merchandise. |
currency and exchange_rate
currency and exchange_rate- Use
MXNand omitexchange_rate(or set to1) 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 inexchange_rate.
payment_method.type
payment_method.typeHow the buyer is paying. Affects whether a Complemento de Pago will be required later.
| Value | When to use |
|---|---|
cash | Paid at time of issuance. No Complemento de Pago needed. |
bank transfer | Use for SPEI or wire. If deferred → will require Complemento de Pago. |
credit card | Paid at time of issuance. |
debit card | Paid at time of issuance. |
buyer
buyercompany.name and company.legal_name
company.name and company.legal_nameMust 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
company.type| Value | When to use |
|---|---|
business | Legal entity (S.A. de C.V., S. de R.L., etc.) |
person | Individual (persona física) |
company.address.postal_code
company.address.postal_codeBuyer's fiscal postal code as registered with SAT. Required for CFDI 4.0. Must be 5 digits for Mexican buyers.
tax_registrations[].number
tax_registrations[].numberBuyer's RFC.
| Situation | RFC to use |
|---|---|
| Known business or individual | Their actual RFC |
| General public (no RFC) | XAXX010101000 |
| Foreign buyer | XEXX010101000 |
tax_registrations[].status
tax_registrations[].statusSAT fiscal regime (c_RegimenFiscal). The buyer must provide this.
| Value | Regime |
|---|---|
Regimen general | General regime for legal entities |
Regimen de Actividades Profesionales | Professional services individuals |
Regimen de Incorporacion Fiscal | Small business simplified regime |
Regimen Simplificado de Confianza | RESICO |
items[]
items[]Each item maps to a Concepto in the CFDI.
unit_amount and amount
unit_amount and amountBoth are before taxes.
unit_amount= price per unit before tax.amount=quantity × unit_amount.
taxes[]
taxes[]taxes[].name
taxes[].name| Value | When to use |
|---|---|
VAT | IVA — standard Mexican value-added tax |
ISR | Income tax withholding |
IEPS | Special tax on production and services |
taxes[].rate
taxes[].rate| Rate | Percentage | When to use |
|---|---|---|
0.16 | 16% | Standard IVA — most goods and services |
0.08 | 8% | Reduced IVA for border regions |
0 | 0% | Zero-rated IVA (food, medicine) |
0.1067 | 10.67% | ISR withholding on professional fees |
taxes[].adds_to_final_amount
taxes[].adds_to_final_amount| Value | When to use |
|---|---|
true | Transferred tax (traslado) — IVA that adds to the buyer's total. |
false | Withheld tax (retención) — deducted from what you receive. Use for ISR. |
taxes[].withholding_type
taxes[].withholding_typeOnly include for withheld taxes. Use withholding. Omit entirely for transferred taxes (IVA).
category[]
category[]category[].code — SAT product/service key (c_ClaveProdServ)
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)
category[].list = "unit" — SAT unit key (c_ClaveUnidad)| Code | Unit | Common for |
|---|---|---|
E48 | Service unit | Professional services |
H87 | Piece | Physical goods |
KGM | Kilogram | Goods sold by weight |
LTR | Liter | Liquids |
MTR | Meter | Length-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
| Mistake | What happens | Fix |
|---|---|---|
invoice_date is not today | SAT rejects the stamp | Always use current date |
Wrong reason code | Buyer cannot deduct the invoice | Ask the buyer for their c_UsoCFDI |
| RFC doesn't match buyer's legal name | SAT validation error | Both must match SAT records exactly |
category[].code sent with a list field | Incorrect CFDI structure | Send product/service code without list |
Missing export_reason | Brinta validation error | Always include — use 01 for domestic |
adds_to_final_amount: true on withholding | Incorrect tax calculation | Use false + withholding_type: "withholding" for retentions |
Updated 3 days ago
