> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invopop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Invoicing compliance in Mexico

> SAT CFDI implementation and compliance for B2B, B2C, and B2G transactions

## Executive summary

Mexico mandates electronic invoicing through the **CFDI** (Comprobante Fiscal Digital por Internet) system, managed by the **SAT** (Servicio de Administración Tributaria). All taxpayers must issue electronic invoices in XML format. The system uses a clearance model: invoices must be validated and certified by an authorized certification provider (PAC) before they acquire fiscal effect, and SAT receives the certified document in real time. This continuous feed gives SAT visibility into every transaction in the economy, and is the basis for automated VAT reconciliation, pre-filled returns, and audit-by-data. CFDI 4.0 is the current schema version and applies to B2B, B2C, and B2G transactions equally.

|                     |                                                    |
| ------------------- | -------------------------------------------------- |
| **Scope**           | B2B, B2C, B2G                                      |
| **Format**          | CFDI 4.0 (XML)                                     |
| **Infrastructure**  | PAC → SAT                                          |
| **Clearance model** | Real-time stamping (timbrado) before fiscal effect |
| **Agency**          | [SAT](https://sat.gob.mx)                          |
| **Invopop addon**   | [SAT Mexico App](/apps/sat-mexico)                 |
| **PAC**             | [SW Sapien](/apps/sw-sapien)                       |

<Card title="SAT Mexico" icon="https://assets.invopop.com/apps/sat-mexico/icon.svg" href="/apps/sat-mexico" horizontal>
  Issue CFDI documents in Mexico →
</Card>

## The SAT CFDI system

SAT is the tax agency in Mexico, CFDI is the invoice format required by SAT. It is an XML document that must be sealed with the issuer's Certificado de Sello Digital (CSD), submitted to a PAC for validation, and stamped by SAT through that PAC. The result is a CFDI with a fiscal folio (UUID) and a SAT digital seal. Without those, the document has no fiscal effect.

There are six CFDI document types:

| Type                               | Code | Description                                                                           | Invopop coverage |
| ---------------------------------- | ---- | ------------------------------------------------------------------------------------- | :--------------: |
| Ingreso                            | `I`  | Standard sales invoice.                                                               |        Yes       |
| Egreso                             | `E`  | Credit note (returns, discounts, post-sale adjustments).                              |        Yes       |
| Pago                               | `P`  | Payment receipt (REP) issued when collecting against a previously-issued PPD invoice. |      Q2 2026     |
| Nómina                             | `N`  | Payroll receipt, one per employee per pay period.                                     |        No        |
| Traslado                           | `T`  | Movement of goods without a sale (carries the Carta Porte complement for transport).  |        No        |
| Retenciones e Información de Pagos | `R`  | Withholding declaration, uses a separate XSD schema.                                  |        No        |

On top of this base structure, SAT publishes **complementos** — sector-specific XML extension nodes that attach to the CFDI and are sealed under the same digital signature. Each *complemento* has its own XSD and lifecycle. The most relevant ones include Pago (mandatory for any deferred or installment invoice), Carta Porte (mandatory for most freight movements), Comercio Exterior 2.0 (exports), Nómina (payroll detail), Hidrocarburos y Petrolíferos (energy sector, mandatory since 2026), Donatarias (authorized non-profits), INE (electoral expenses), IEDU (private education), and Divisas (currency exchange operations).

### Invopop CFDI support

<AccordionGroup>
  <Accordion title="Covered by Invopop">
    Coverage of the Mexican CFDI ecosystem evolves continuously, and this scope reflects what the SAT Mexico app supports today. We work closely with our customers and partners to expand it:

    **Document types**

    | Type    | Description                                           |
    | ------- | ----------------------------------------------------- |
    | Ingreso | Standard B2B and B2C sales invoices.                  |
    | Egreso  | Credit notes for returns, discounts, and corrections. |

    **Method of payment**

    | Code  | Description                                                            |
    | ----- | ---------------------------------------------------------------------- |
    | `PUE` | Pago en Una sola Exhibición (payment in a single exhibition)           |
    | `PPD` | Pago en Parcialidades o Diferido (payment in installments or deferred) |

    `FormaPago` is validated against the `c_FormaPago` catalog.

    **Relationships**

    | Code | Description                                            |
    | ---- | ------------------------------------------------------ |
    | `01` | Nota de crédito (credit note)                          |
    | `02` | Nota de débito (debit note)                            |
    | `03` | Devolución de mercancía (return)                       |
    | `04` | Sustitución (substitution)                             |
    | `05` | Traslados de mercancías (transport of goods)           |
    | `06` | Factura por traslados previos (previously-moved goods) |
    | `07` | Anticipo (advance)                                     |

    **Accounts payable**

    Convert received CFDI XML documents into GOBL format for accounts payable processing. Pairs with the SW Sapien app for bulk download from SAT.

    <Card title="SW Sapien" icon="https://assets.invopop.com/apps/sw-sapien/icon.svg" href="/apps/sw-sapien" horizontal>
      Bulk download CFDI documents from the SAT →
    </Card>

    **Special invoice modes**

    | Mode                | Description                                                                                                                 |
    | ------------------- | --------------------------------------------------------------------------------------------------------------------------- |
    | CFDI Globales       | Público-en-general aggregation, with periodicity (daily, weekly, biweekly, monthly, bimonthly), month, and year extensions. |
    | Third-party sales   | Vendido a terceros via the `seller` object on individual lines.                                                             |
    | White-label / B2B2B | Invopop can issue invoices on behalf of multiple suppliers under a single platform, each with their own CSD.                |

    **Operational**

    | Capability          | Description                                                                                                            |
    | ------------------- | ---------------------------------------------------------------------------------------------------------------------- |
    | PAC integration     | Through [SW Sapien](https://sw.com.mx), including supplier onboarding (CSD upload, e.firma authorization for the PAC). |
    | Stamping            | Timbrado and retrieval of the certified XML.                                                                           |
    | PDF generation      | Includes QR and CFDI stamps. Configurable layout, locale, and currency/date format.                                    |
    | Sandbox environment | Register your own or any test CSDs for testing.                                                                        |
  </Accordion>

  <Accordion title="Not yet covered by Invopop">
    If your operation requires a document type, complemento, or workflow that isn't currently covered, get in touch. Many of these requests already align with our roadmap, and we prioritize new development based on customer volume and demand.

    **Document types**

    | Type        | Description                                                                                                                                                                                                                                                                  |
    | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Pago        | Payment receipt (REP / complemento de pago). Invopop can issue an invoice marked as PPD, but the subsequent payment receipts that must be emitted as money is collected are not generated by the addon. Customers issuing PPD invoices must handle REPs through other means. |
    | Nómina      | Payroll receipts.                                                                                                                                                                                                                                                            |
    | Traslado    | Standalone transfer documents.                                                                                                                                                                                                                                               |
    | Retenciones | Uses a different XSD; not part of the CFDI 4.0 base schema.                                                                                                                                                                                                                  |

    **Complementos**

    | Complemento                  | Description                                                                                                 |
    | ---------------------------- | ----------------------------------------------------------------------------------------------------------- |
    | Carta Porte                  | Required for in-country freight movement.                                                                   |
    | Comercio Exterior 2.0        | Required for definitive exports.                                                                            |
    | Hidrocarburos y Petrolíferos | Mandatory for the energy sector since 2026.                                                                 |
    | Sector-specific complementos | Donatarias, INE, IEDU, Divisas, Detallista, Servicios Parciales de Construcción, Aerolíneas, Notarios, etc. |

    **Other unsupported features**

    | Item                              | Description                                                                                                                                                                               |
    | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Addendas                          | Proprietary B2B XML extensions defined by individual buyers (Walmart, Liverpool, Pemex, automotive OEMs, etc.). Each is buyer-specific and not standardized by SAT.                       |
    | Cancellation flow                 | Submission of cancellation requests with `MotivoCancelacion` codes is not currently exposed through the app. Cancellations must be handled directly with SAT or through the PAC's portal. |
    | Real-time data access             | For digital platforms under the May 2026 Article 30-B obligation. Separate reporting channel, not a CFDI flow.                                                                            |
    | Buzón Tributario                  | Monitoring or interaction.                                                                                                                                                                |
    | Lista 69-B                        | Screening of counterparties.                                                                                                                                                              |
    | Contabilidad electrónica and DIOT | Periodic informational filings.                                                                                                                                                           |
  </Accordion>
</AccordionGroup>

### CFDI document types

Each document type has its own schema and business rules for how it relates to other documents in accounting.

<AccordionGroup>
  <Accordion title="Ingreso (sales invoice)">
    The standard invoice for any taxable sale of goods, provision of services, leasing, or activity that generates income. Must comply with Article 29-A of the CFF: issuer and receiver RFC, name, régimen fiscal, postal code, line-level description, unit value, totals, transferred and withheld taxes, payment method and form, and UsoCFDI declared by the receiver.

    The Ingreso CFDI is the document that triggers the obligation. Whether the cash event is recognized at the same time depends on the `MetodoPago` attribute (PUE vs PPD).
  </Accordion>

  <Accordion title="Egreso (credit note)">
    Used to reduce previously-invoiced income: returns, post-sale discounts, rebates, corrections, partial cancellations, and the application of advance payments. Always relates back to one or more Ingreso CFDIs through the `CfdiRelacionados` node.

    Common `TipoRelacion` codes for Egresos:

    * `01` — Nota de crédito de los documentos relacionados.
    * `02` — Nota de débito de los documentos relacionados.
    * `03` — Devolución de mercancía sobre facturas o traslados previos.
    * `07` — CFDI por aplicación de anticipo.

    An Egreso does not by itself cancel the original CFDI. Cancellation is a separate action governed by the cancellation rules below.
  </Accordion>

  <Accordion title="Pago (payment receipt)">
    A CFDI of type P is required whenever a payment is collected against an invoice that was issued with `MetodoPago = PPD`. The Pago complement carries the actual payment date, currency, exchange rate, form of payment, and a list of `DoctoRelacionado` nodes referencing each invoice the payment applies to, with the partial amount, the running balance before and after, and the partiality number.

    A single REP can settle payments against multiple invoices. A single invoice paid in installments produces multiple REPs over time.

    **Deadline:** the REP must be issued no later than the fifth calendar day of the month following the one in which the payment was received (rule 2.7.1.35 of the RMF).

    **Invopop coverage:** Invopop allows issuing invoices marked as PPD, but does not currently generate the subsequent payment receipts. Customers issuing PPD invoices through Invopop must produce REPs through another mechanism. We are aiming to support *complementos de pago* in Q2 2026.
  </Accordion>

  <Accordion title="Nómina (payroll)">
    A CFDI carrying the Nómina complement, issued for every payment of salaries, wages, and assimilated remuneration. One per employee per pay period.
  </Accordion>

  <Accordion title="Traslado (goods movement)">
    Used when goods are moved without a sale (between warehouses, returns to suppliers, gratuitous transfers). For a Traslado document, `SubTotal` and `Total` must be zero. In nearly all real-world cases, a Traslado must carry the **Carta Porte** complement describing the route, transport mode, vehicle, operator, and goods.
  </Accordion>

  <Accordion title="Retenciones e Información de Pagos (withholdings) — not supported">
    A separate document family with its own XSD, used to declare withholdings on payments to foreign residents, dividends, interest, leasing payments, share dispositions, and certain financial instruments.
  </Accordion>
</AccordionGroup>

### CFDI complement types

Extra blocks of information that attach to a CFDI when the operation falls under a specific sector or activity. When a complement is required, the invoice cannot be stamped without it.

<AccordionGroup>
  <Accordion title="Carta Porte">
    Mandatory complement for the transport of goods within Mexico by road, rail, sea, or air. Carries the route (origin and destination), transport mode, vehicle and trailer plates, the operator's identification, and a detailed manifest of the goods being moved including weight and hazardous-material classification where applicable.

    Attaches to a Traslado (type T) when a company moves its own goods, or to an Ingreso (type I) when invoicing a transport service to a third party. Currently at version 3.x with separate sub-schemas per transport mode (Autotransporte, FerroviarioTransporte, TransporteMaritimo, TransporteAereo).
  </Accordion>

  <Accordion title="Comercio Exterior 2.0">
    Required for definitive exports involving the sale of goods (typically clave de pedimento A1). Captures the issuer's and receiver's full addresses, the foreign tax ID of the receiver, INCOTERMS, currency and exchange rate to USD, and per-line detail including harmonized tariff codes (fracciones arancelarias), customs unit of measure, and the USD value of the goods.

    Version 2.0 has been integrated with CFDI 4.0 since January 2024. Free-of-charge exports use the same complement on a Traslado document.
  </Accordion>

  <Accordion title="Hidrocarburos y Petrolíferos v1.0 (Revision A)">
    Mandatory complement for the energy sector since 2026. Applies to taxpayers commercializing hydrocarbons or refined petroleum products and is intended to give SAT real-time traceability over fuel flows.

    Carries the SAT-issued permit type and number, validated against the `c_TipoPermiso` catalog. Revision A (April 2026) added new permit types for commercialization activities along with their specific format structures and validation regular expressions.
  </Accordion>

  <Accordion title="Donatarias">
    For non-profits authorized by SAT to issue tax-deductible donation receipts (donatarias autorizadas). Carries the SAT authorization office number and the date of the official authorization or its most recent ratification published in the DOF.

    Without this complement on the CFDI, the donation cannot be deducted by the donor.
  </Accordion>

  <Accordion title="INE">
    Used by political parties, candidates, and associations subject to the Instituto Nacional Electoral's reporting obligations. Identifies the type of process (ordinary, pre-campaign, campaign), the scope (federal, local), and the entity for which the spending was made.

    Allows INE to reconcile electoral expense declarations against actual invoiced spending.
  </Accordion>

  <Accordion title="IEDU">
    Required for invoices issued by private educational institutions for tuition payments (colegiaturas) eligible for personal income tax deduction. Captures the student's CURP, the educational level (preescolar, primaria, secundaria, profesional técnico, bachillerato), the official authorization number (RVOE), and the school's RFC.

    Annual deduction caps apply per educational level.
  </Accordion>

  <Accordion title="Divisas">
    Used by exchange houses (casas de cambio) and authorized financial institutions reporting foreign currency exchange operations. Identifies the operation type (purchase or sale of foreign currency) for fiscal reporting.
  </Accordion>

  <Accordion title="Pago">
    The payment receipt complement attached to type-P documents (REPs). Carries the payment date, currency, exchange rate to MXN, and form of payment, plus a list of `DoctoRelacionado` nodes — one per invoice the payment applies to — with the original invoice's UUID, the partial amount being settled, the partiality number, and the running balance before and after.

    A single Pago complement can settle multiple invoices, and a single PPD invoice can accumulate multiple Pago complements over time as installments are paid.
  </Accordion>

  <Accordion title="Nómina">
    The payroll detail complement attached to type-N documents. Issued one per employee per pay period.

    Captures the employee's identification (RFC, CURP, NSS), employment data (start date, contract type, working day type, salary base), the period covered, and a full breakdown of perceptions (regular salary, overtime, bonuses, vacation premium, profit sharing) and deductions (ISR withholding, IMSS contributions, loan repayments, alimony). Also includes settlement payments for terminations and other special payment scenarios.
  </Accordion>
</AccordionGroup>

### CFDI payment types

Mexican invoices declare upfront whether the customer is paying at issuance or paying later. The choice determines whether a follow-up payment receipt (REP) must be issued, and it changes when income tax and VAT are recognized.

<AccordionGroup>
  <Accordion title="PUE — Pago en Una sola Exhibición (pay in full)">
    The operation is settled in full at or before invoice issuance, or when payment will be received with certainty by the last calendar day of the month in which the invoice is issued. PUE invoices declare the payment method (transfer, credit card, cash, etc.) and require no follow-up document. For tax effects, income is recognized at issuance.

    If a CFDI was issued as PUE but the customer fails to pay by the last day of the issuance month, the issuer must:

    1. Cancel the original PUE invoice (motivo 01, with substitution).
    2. Issue a new CFDI as PPD with `FormaPago = 99`, related to the original via `TipoRelacion = 04` (Sustitución de los CFDI previos).
    3. Issue REPs as payments are subsequently received.

    A difference to observe in relation to other regimes is that the trigger is calendar-based, not payment-event-based. The conservative approach is to issue PPD whenever there is any uncertainty about same-month payment.
  </Accordion>

  <Accordion title="PPD — Pago en Parcialidades o Diferido (pay in installments)">
    Use when payment will occur after the issuance month, or in two or more installments. PPD invoices must use `FormaPago = 99` (Por definir) on the original document, since the actual form of payment isn't yet known. For each payment received afterward, the issuer must produce a CFDI of type P (REP) referencing the original UUID, with the actual `FormaPago` of that specific payment, the partial amount, and the running balance.

    For tax effects, income is recognized as REPs are issued, on a cash basis. This is the mechanism that makes ISR and IVA recognition follow the actual cash event rather than the invoice issuance date — particularly relevant for RESICO contributors, whose entire tax base is computed from emitted CFDIs and REPs.

    Each REP must be issued by the fifth calendar day of the month following the one in which payment was received (rule 2.7.1.35 RMF). Missing the deadline doesn't invalidate the invoice but prevents the customer from deducting in the correct period.

    Invopop supports issuing the PPD invoice itself, but does not generate the subsequent REPs.
  </Accordion>
</AccordionGroup>

### Party identification and reporting

<AccordionGroup>
  <Accordion title="RFCs and tax identification">
    PACs validate the receiver's RFC, name, fiscal régimen, and postal code against the live SAT registry at stamping time. All four must agree. The source document is the receiver's **Constancia de Situación Fiscal (CIF)**. Note that requiring the CIF document itself as a precondition for invoicing is unlawful (Article 83 § IX CFF) — the issuer needs the four data points, not the document.

    **Persona Física (13 characters)**

    Issued to individuals. Structure: 4 letters from the person's first surname, second surname, and first name + 6 digits for date of birth (YYMMDD) + 3-character homoclave assigned by SAT.

    Example: `PEJL850315ABC` for Juan Pérez López born 15 March 1985.

    **Persona Moral (12 characters)**

    Issued to companies, associations, and other legal entities. Structure: 3 letters from the entity name + 6 digits for date of constitution (YYMMDD) + 3-character homoclave.

    The shorter length is the immediate visual cue distinguishing morales from físicas.

    **Generic RFCs**

    Predefined codes used when the receiver does not have a real RFC.

    * `XAXX010101000` — generic national. Used for público en general (Mexican consumers who don't request invoices) and for nationals not yet registered with SAT.
    * `XEXX010101000` — generic foreign. Used for receivers without Mexican fiscal residence.

    For both generic RFCs:

    * `RegimenFiscalReceptor` must be `616` (Sin obligaciones fiscales).
    * `UsoCFDI` must be `S01` (Sin efectos fiscales). The CFDI is not deductible.
    * `DomicilioFiscalReceptor` must equal `LugarExpedicion`.
    * For `XEXX010101000`, the receiver's country code (per `c_Pais`) and foreign tax ID should be supplied where available.
  </Accordion>

  <Accordion title="Postal codes">
    Mexico uses standard postal codes, but CFDI 4.0 enforces three different fields with different rules. There is no separate "fiscal postal code" — it is the same postal code, validated against SAT's `c_CodigoPostal` catalog (Anexo 20) and against the receiver's CIF.

    **LugarExpedicion (issuer)**

    Postal code of the physical location where the document is issued (`mx-cfdi-issue-place` in GOBL). If invoiced from a branch, use the branch's postal code regardless of where the billing system is hosted. Drives the document's time zone (Mexico has eight) and the fiscal stimulus zone flag (border-zone IVA reduction).

    **DomicilioFiscalReceptor (receiver)**

    Postal code of the receiver's tax domicile. For real RFCs, this must match what SAT has on file. A mismatch causes the PAC to reject stamping.

    For generic RFCs (`XAXX010101000`, `XEXX010101000`), this field must equal `LugarExpedicion`.

    **Catalog gaps**

    SAT's `c_CodigoPostal` catalog is updated periodically (multiple times in 2026 alone) and does not always contain every postal code in active use. When the receiver's postal code is not in the catalog, SAT's filling guide instructs the issuer to register the closest catalog code from the place of issuance. This is one of the most common causes of stamping failures during new customer onboarding.
  </Accordion>

  <Accordion title="Régimen fiscal (fiscal regime)">
    Each issuer and receiver must declare a `RegimenFiscal` from the `c_RegimenFiscal` catalog. The catalog distinguishes regimes available to parties. The receiver's régimen also constrains which `UsoCFDI` codes are valid for that invoice — not all combinations are allowed.

    The full catalog (all supported by Invopop):

    | Code  | Description                                                                                |
    | ----- | ------------------------------------------------------------------------------------------ |
    | `601` | General de Ley Personas Morales                                                            |
    | `603` | Personas Morales con Fines no Lucrativos                                                   |
    | `605` | Sueldos y Salarios e Ingresos Asimilados a Salarios                                        |
    | `606` | Arrendamiento                                                                              |
    | `607` | Régimen de Enajenación o Adquisición de Bienes                                             |
    | `608` | Demás ingresos                                                                             |
    | `610` | Residentes en el Extranjero sin Establecimiento Permanente en México                       |
    | `611` | Ingresos por Dividendos (socios y accionistas)                                             |
    | `612` | Personas Físicas con Actividades Empresariales y Profesionales                             |
    | `614` | Ingresos por intereses                                                                     |
    | `615` | Régimen de los ingresos por obtención de premios                                           |
    | `616` | Sin obligaciones fiscales (generic RFCs only)                                              |
    | `620` | Sociedades Cooperativas de Producción que optan por diferir sus ingresos                   |
    | `621` | Incorporación Fiscal (legacy, being phased out)                                            |
    | `622` | Actividades Agrícolas, Ganaderas, Silvícolas y Pesqueras                                   |
    | `623` | Opcional para Grupos de Sociedades                                                         |
    | `624` | Coordinados                                                                                |
    | `625` | Régimen de las Actividades Empresariales con ingresos a través de Plataformas Tecnológicas |
    | `626` | Régimen Simplificado de Confianza (RESICO)                                                 |
  </Accordion>

  <Accordion title="Customer invoice purpose codes">
    The `UsoCFDI` field declares the receiver's intended fiscal treatment of the document. The most common codes:

    | Code        | Description                                                                                                                               |
    | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
    | `G01`       | Adquisición de mercancías                                                                                                                 |
    | `G02`       | Devoluciones, descuentos o bonificaciones                                                                                                 |
    | `G03`       | Gastos en general                                                                                                                         |
    | `I01`–`I08` | Construcciones, mobiliario, transporte, cómputo, telecomunicaciones, otra maquinaria                                                      |
    | `D01`–`D10` | Personal deductions (medical, funeral, donations, mortgage interest, voluntary retirement, schooling). Available only to personas físicas |
    | `CP01`      | Pagos. Used on REPs                                                                                                                       |
    | `CN01`      | Nómina. Used on payroll CFDIs                                                                                                             |
    | `S01`       | Sin efectos fiscales. Used for non-deductible documents and globales                                                                      |

    Validation: the chosen `UsoCFDI` must be allowed for the receiver's `RegimenFiscal`. Picking the wrong combination is one of the most frequent stamping errors.
  </Accordion>
</AccordionGroup>

### B2C aggregation reporting

Retail-style operations that don't issue per-transaction invoices to consumers must issue a periodic **factura global** aggregating all operations with público en general.

<AccordionGroup>
  <Accordion title="CFDI Globales">
    The `mx-cfdi-v4` addon supports this via the `global` invoice tag, with extensions for:

    | Field      | Extension               | Values                                                               |
    | ---------- | ----------------------- | -------------------------------------------------------------------- |
    | **Period** | `mx-cfdi-global-period` | daily (01), weekly (02), biweekly (03), monthly (04), bimonthly (05) |
    | **Month**  | `mx-cfdi-global-month`  | individual months 01–12 or paired months 13–18                       |
    | **Year**   | `mx-cfdi-global-year`   | 4-digit year                                                         |

    The global is issued to `XAXX010101000` with régimen 616 and UsoCFDI S01. Purchases under MXN 100 are not required to be invoiced individually but must still be included in the global. In practice, many operations issue globals as the simpler path.
  </Accordion>
</AccordionGroup>

### Cancellations

The issuer submits a cancellation request through SAT or a PAC, and the receiver has three business days to accept or reject the cancellation. If the receiver takes no action, the cancellation is accepted.

<AccordionGroup>
  <Accordion title="Cancellation rejection/acceptance">
    **The customer can reject a cancellation**

    A CFDI is not cancelled by issuer action alone. If the three day deadline passes without response, the cancellation takes effect by positive ficta. If the receiver rejects, the CFDI remains valid.

    This means a wrongly-issued invoice can remain on the issuer's books if the customer rejects the cancellation. The practical workaround is to coordinate with the customer before submitting.

    <Note>
      The cancellation flow is not currently automated through the SAT Mexico app. Cancellations must be initiated through SAT directly.
    </Note>

    **Exceptions where acceptance is not required**
    Cancellation is immediate without receiver acceptance for:

    * CFDIs of type Egreso (E), Traslado (T), Retenciones (R), and Nómina (N).
    * CFDIs cancelled within one business day of issuance.
    * Operations with público en general (RFC `XAXX010101000`).
    * CFDIs received by foreign residents.
    * CFDIs with total value up to MXN 1,000 (with carve-outs for Pago, Hidrocarburos, and Carta Porte for fuels).
    * CFDIs issued by financial system members.

    **Cancellation reasons**

    Every cancellation must declare a reason:

    | Code | Description                                                                                                                                          |
    | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `01` | Comprobante emitido con errores con relación. The original is being replaced by a substitute CFDI; the substitute's UUID must be supplied.           |
    | `02` | Comprobante emitido con errores sin relación. No replacement.                                                                                        |
    | `03` | No se llevó a cabo la operación. The transaction did not occur.                                                                                      |
    | `04` | Operación nominativa relacionada en una factura global. The operation was included in a previous global invoice; the global's UUID must be supplied. |
  </Accordion>

  <Accordion title="Substitution flow (motivo 01)">
    <Note>Invopop doesn't currently support the substitution flow. We recommend issuing `02`(no replacement) and issuing a new invoice</Note>

    The correct sequence for replacing an erroneous CFDI:

    1. Issue the new CFDI with `TipoRelacion = 04` (Sustitución de los CFDI previos), referencing the UUID of the document being replaced.
    2. Submit the cancellation request for the original, motivo 01, referencing the new UUID.
    3. The PAC validates whether receiver acceptance is required and routes accordingly.

    Note: while the original is referenced as substituted-by, it temporarily shows as "No cancelable." The cancellation request itself breaks the relation and moves it back to a cancellable state.
  </Accordion>

  <Accordion title="Annual cancellation deadline">
    Per Article 29-A § 4 of the CFF and rule 2.7.1.47 RMF, CFDIs must be cancelled by the last day of the month in which the annual ISR declaration for the issuance fiscal year is due:

    * Personas morales: 31 March of the following year.
    * Personas físicas: 30 April of the following year.

    The First Chamber of the Supreme Court ruled this time limit unconstitutional in April 2024 (press release 098/2024), but the rule remains in operation pending legislative change.
  </Accordion>
</AccordionGroup>

## Compliance

<AccordionGroup>
  <Accordion title="Legally required invoice content">
    From Article 29-A of the CFF and the Anexo 20 filling guide:

    * RFC, name, and régimen fiscal of the issuer.
    * RFC, name, régimen fiscal, and postal code of the receiver.
    * Folio fiscal (UUID) and SAT digital seal.
    * Issuer's CSD digital seal and the serial number of the certificate used.
    * Place and date of issuance (`LugarExpedicion`, `Fecha`).
    * UsoCFDI declared by the receiver.
    * Per-line: quantity, unit of measure (from `c_ClaveUnidad`), description, product/service code (from `c_ClaveProdServ`), unit value, taxes itemised by rate, withholdings where applicable.
    * `MetodoPago` (PUE/PPD) and `FormaPago` from `c_FormaPago`.
    * `Moneda` and `TipoCambio` for non-MXN invoices.
    * Pedimento number and date for first-hand sales of imported goods.
    * Certification date, time, and SAT certificate serial.

    The printed representation (PDF) must additionally include:

    1. QR code as defined in section I.D of Anexo 20.
    2. Serial numbers of the issuer's and SAT's CSDs.
    3. The legend: "Este documento es una representación impresa de un CFDI."
    4. Issuance and certification timestamps.
    5. Original string (cadena original) of the SAT certification complement.

    Source: [SAT](https://www.sat.gob.mx/minisitio/Factura/solicita_requisitos.htm)
  </Accordion>

  <Accordion title="Archival period">
    Article 30 of the Federal Tax Code requires accounting records, including CFDIs, to be retained for five years.

    * The period starts from the date the relevant tax return was filed, or should have been.
    * For records covering a longer period, the five years run from the last fiscal year covered.
    * If records are part of an active legal case, the period starts when the final decision is issued.
  </Accordion>

  <Accordion title="Proveedor Autorizado de Certificación (PAC)">
    A PAC (Proveedor Autorizado de Certificación) is a private company licensed by SAT to validate, seal, and forward CFDIs on behalf of issuers. The PAC is the operational gateway: an unstamped CFDI has no fiscal effect.

    Invopop uses [SW Sapien](/apps/sw-sapien) as its PAC. Suppliers authorize the PAC once via e.firma (FIEL) sign-off, after which Invopop can issue CFDIs on their behalf using their CSD. CSD certificate generation remains the supplier's responsibility — Invopop does not generate CSDs but accepts the certificate and key during onboarding.
  </Accordion>

  <Accordion title="Buzón Tributario">
    The Buzón Tributario is the official electronic mailbox SAT uses to communicate with each contributor. Cancellation requests, audit notifications, formal requirements, and (since May 2026) real-time data demands flow through it. Every contributor must keep it active and monitored. Invopop does not interact with the Buzón.
  </Accordion>

  <Accordion title="Lista 69-B">
    SAT publishes ongoing lists of taxpayers presumed to issue fake invoices (EFOS) and those who used them (EDOS). Invoices issued by an EFOS-listed supplier may be deemed non-deductible for the receiver. Companies routinely screen vendor masters against the list.
  </Accordion>

  <Accordion title="Real-time data access (May 2026)">
    Article 30-B of the CFF, introduced in the 2026 RMF, requires technology platforms (domestic and foreign) to provide SAT with continuous online access to tax and operational data, available no later than the day after each transaction. This applies to marketplaces, ride-hailing, lodging, food delivery, and digital service providers operating in Mexico. It is a separate reporting obligation from the CFDI flow.

    Invopop addresses this with [digital platform reporting](/guides/mx-sat-platform-reporting): register a platform, record each operation with the fields required by rule 2.9.21, and give SAT a private, access-controlled portal to browse, filter, and export them on demand.
  </Accordion>
</AccordionGroup>

## FAQ

Compliance questions

<AccordionGroup>
  <Accordion title="When did mandatory CFDI invoicing start in Mexico?">
    CFDI 1.0 became mandatory for large taxpayers in 2011 and was extended to all taxpayers in 2014. CFDI 4.0 (the current version) replaced 3.3 on 1 April 2023. There is no entity below the mandate threshold — any taxpayer issuing an invoice must do so as a CFDI.
  </Accordion>

  <Accordion title="Who can act as a supplier in Mexico?">
    Any taxpayer registered with SAT — Persona Física (13-char RFC) or Persona Moral (12-char RFC). The supplier must have an active CSD (Certificado de Sello Digital) and a fiscal regime (`RegimenFiscal`) recorded in their CIF.
  </Accordion>

  <Accordion title="What are the legal obligations for receiving invoices in Mexico?">
    Recipients must verify each CFDI's UUID through SAT's public consultation, retain the XML for 5 years (Article 30 CFF), and accept or reject cancellation requests within 3 business days when applicable.
  </Accordion>

  <Accordion title="What periodic reporting obligations exist in Mexico?">
    Monthly provisional ISR and IVA payments (DyP) plus the annual ISR return. RESICO contributors have a fully automated monthly tax base computed from issued CFDIs and REPs. Stamping replaces invoice-level reporting.
  </Accordion>

  <Accordion title="Can I require a customer's CIF before invoicing them?">
    No. Conditioning invoicing on the receiver providing their CIF document is unlawful under Article 83 § IX of the CFF and carries fines. The data on the CIF (RFC, name, régimen, postal code) is required, but the issuer must be willing to accept those four pieces of information by other means. In practice, most B2B workflows still ask for the CIF, but it cannot be made a hard precondition.
  </Accordion>

  <Accordion title="Why can't I cancel an invoice my customer hasn't acknowledged?">
    Cancellation in Mexico is bilateral by default. The issuer submits a request, the receiver has three business days to accept or reject, and rejection keeps the CFDI valid. Issuers cannot unilaterally void an invoice that requires acceptance. The exceptions are listed above (small amounts, certain document types, same-day cancellation, público en general). The practical recommendation is to coordinate with the customer before submitting any cancellation request, especially for high-value B2B invoices.
  </Accordion>

  <Accordion title="Why does PPD vs PUE matter so much?">
    Beyond the procedural difference, the two methods determine *when* income is recognized for ISR and IVA purposes. PUE income is recognized at issuance; PPD income is recognized as REPs are issued. Choosing the wrong method shifts tax liability into the wrong period and creates discrepancies during SAT's automated reconciliation. RESICO contributors are particularly exposed because their entire monthly tax base is computed from CFDIs and REPs.
  </Accordion>

  <Accordion title="What's the difference between a complemento and an addenda?">
    A complemento is a SAT-defined XML extension with a published XSD, sealed inside the digital signature, and validated at stamping. An addenda is a non-fiscal XML block defined unilaterally by a private buyer (Walmart, Liverpool, Pemex, automotive OEMs, etc.) and inserted into the `<cfdi:Addenda>` node of the CFDI. SAT does not validate addenda content, but the buyer's ERP rejects payment without it. Each large enterprise customer typically defines its own addenda spec; there is no central catalog. Addendas are not currently supported by Invopop.
  </Accordion>

  <Accordion title="Are there special supplier obligations under SAT/CFDI?">
    The supplier must have an active CSD (not a FIEL — FIEL is for SAT login, CSD is for invoicing), be in good standing on Lista 69-B (not classified as EFOS), and maintain valid postal codes matching their CIF.
  </Accordion>
</AccordionGroup>

More available in our [Mexico FAQ](/faq/mexico) section

***

<Card title="Participate in our community" icon="forumbee" href="https://community.invopop.com" arrow="true" horizontal>
  Ask and answer questions about Mexico's regulation →
</Card>
