[MX] Withholding Invoice (CFDI Retenciones e Información de Pagos 2.0)


A Withholding Invoice is issued by a platform operator to report taxes withheld from a service provider during a billing period. If you run a digital platform (rideshare, delivery, hospitality) and withhold ISR and IVA from your providers, this is the document you issue at the end of each period.

FieldValue
invoice_typewithholding
document_typewithholding invoice
e_invoicetrue
currencyMXN

Document Structure

A withholding invoice has a root level with the period header and totals, and can include complements in relations[] to provide additional breakdowns depending on the type of withholding.

One example is the Digital Platform Complement (Complemento de Plataformas Digitales), which adds a service-by-service breakdown for platform operators. This guide uses that complement as the example throughout.


Field by Field

Root fields

FieldRequiredWhat to send
invoice_numberNoYour internal folio for this document. 1–20 alphanumeric characters.
invoice_dateYesThe date you're issuing this document. Format: YYYY-MM-DD.
additional_infoNoA short description of the withholding (e.g. "Retención por servicios de plataformas tecnológicas"). Max 100 characters.

Period (categories[])

These entries define the fiscal period and type of withholding this document covers.

listcode exampleRequiredWhat to send
withholding_type"25"YesThe type of withholding you're reporting. See catalog below.
initial month code"01"YesThe first month (or period) covered. See c_Periodo catalog below.
final month code"03"YesThe last month (or period) covered. Must be equal to or later than initial month code.
fiscal year"2026"NoThe fiscal year. If omitted, Brinta uses the year from invoice_date. Only send this if they differ.

Withholding Type Codes (c_CveRetenc)

CodeWhen to use
01Professional fees (honorarios)
02Rental
03Prizes
04Dividends or distributed profits
05Acquisition of goods
06Sale of goods
07Interest (individual)
08Interest (company)
09Other income
10Digital platforms — passenger transport
11Digital platforms — delivery of goods
12Digital platforms — hospitality
13Digital platforms — sale of goods and services
14Non-business trusts
15Non-profit organizations
16Agricultural activities (individual)
17Agricultural activities (company)
18Real estate rental with purchase option
19Federal cargo transport services
20Transactions with related foreign parties
21Interest paid to foreign residents
22Dividends paid to foreign residents
23Sale of shares to foreign residents
24Salaries
25Assimilated to salaries
26Professional services paid to foreign residents
27Rental paid to foreign residents
28Other payments to foreign residents

Period Codes (c_Periodo) — for initial month code and final month code

CodePeriodPeriodicity
01JanuaryMonthly
02FebruaryMonthly
03MarchMonthly
04AprilMonthly
05MayMonthly
06JuneMonthly
07JulyMonthly
08AugustMonthly
09SeptemberMonthly
10OctoberMonthly
11NovemberMonthly
12DecemberMonthly
13January–FebruaryBimonthly
14March–AprilBimonthly
15May–JuneBimonthly
16July–AugustBimonthly
17September–OctoberBimonthly
18November–DecemberBimonthly
19January–MarchQuarterly
20April–JuneQuarterly
21July–SeptemberQuarterly
22October–DecemberQuarterly
23January–AprilFour-month period
24May–AugustFour-month period
25January–JuneSemester
26January–DecemberFull fiscal year

Recipient (buyer)

The buyer is the service provider receiving the withholding notice — the person or company whose taxes you withheld.

FieldRequiredWhat to send
buyer.company.legal_nameYesThe provider's registered legal name.
buyer.company.typeYes"business" for companies, "person" for individuals.
buyer.company.address.postal_codeYesTheir 5-digit fiscal postal code.
buyer.company.address.countryYes"MX" for Mexican providers. Any other value = foreign provider.
tax_registrations type "RFC"Yes (Mexican)Required for all Mexican providers, both companies and individuals.
tax_registrations type "tax_id"NoForeign providers only — their tax ID in their home country.

Period Totals (amounts[] and taxes[])

These are the aggregated totals for the entire period. They must match the sum of all individual service entries in relations[].items[].

amounts[]

nametypeRequiredWhat to send
"final amount""final"YesTotal value of all operations in the period, before taxes.

taxes[]

Within taxes[], the field you use depends on what you're expressing:

  • Use taxable_amount when the entry represents a base — the amount on which a tax is calculated (e.g. total taxable base, total exempt base).
  • Use amount when the entry represents an actual tax figure — the money withheld or charged (e.g. total VAT withheld, total ISR withheld).
  • Some entries use both: when you're reporting a withheld tax and need to declare both the base and the resulting amount.
nametypewithholding_typeField usedRequiredWhat to send
"total taxes""total"(absent)taxable_amountYesThe total taxable base across all services in the period.
"exempt taxes""exempt"(absent)taxable_amountYesThe total exempt base. Send 0 if there are no exempt amounts.
"total taxes""total""withholding"amountYesThe total amount withheld. Must equal the sum of all individual withholding entries below.
"total VAT""VAT""withholding"taxable_amount + amountYesTotal IVA withheld. Include taxable_amount (base), amount (withheld), and rate.
"total ISR""GIT""withholding"taxable_amount + amountConditionalTotal ISR withheld. Include taxable_amount, amount, and rate. Required if ISR was withheld.

Important: The amount in "total taxes" / "withholding" must equal the sum of all individual amount values with withholding_type: "withholding". If these don't match, the document will be rejected.


Digital Platform Complement (relations[])

This section shows the Digital Platform Complement (Complemento de Plataformas Digitales), which provides a service-by-service breakdown for platform operators.

relations[].payment_method

Set payment_method.type here if all services in the period were paid the same way (e.g. all bank transfers). If different services used different payment methods, omit this and set it per service via items[].categories[].

relations[].categories[]

listcode exampleRequiredWhat to send
"periodicity""04"YesHow often you report. See catalog below.
"number of services""10"YesTotal number of service operations in the period. Must match the number of entries in items[].
"total government contribution""20.00"ConditionalSum of all government contributions across all services. Required if any item has a "government contribution amount".

Periodicity Codes (c_Periodicidad)

CodeDescription
01Daily
02Weekly
03Bi-weekly
04Monthly
05Bi-monthly

relations[].amounts[]

nametypeRequiredWhat to send
"amount""base amount"YesTotal of all service prices excluding VAT. Sum of all items[].amount.
"total commision""commision"YesTotal platform commissions charged across all services.

relations[].taxes[]

Same rule as root-level taxes[]: use taxable_amount for bases, amount for actual tax figures.

nametypewithholding_typeField usedRequiredWhat to send
"total VAT""VAT"(absent)taxable_amount + amountYesTotal VAT charged across all services.
"total VAT""VAT""withholding"amountYesTotal VAT withheld across all services.
"total ISR""GIT""withholding"amountConditionalTotal ISR withheld. Required if ISR was withheld.
"VAT difference""VAT"(absent)amountYesThe VAT actually paid to the provider (VAT charged minus VAT withheld).

Service Detail (relations[].items[])

One entry per service operation in the period. The count must match "number of services" in relations[].categories[].

FieldRequiredWhat to send
nameYesDescription of the service.
amountYesPrice of the service, excluding VAT.
quantityYesAlways 1 per service operation.

items[].categories[]

listcode exampleRequiredWhat to send
"service type""01"YesThe type of service. See catalog below.
"subtype service type""0101"ConditionalRequired for transport and hospitality services. See sub-catalog below.
"service date""2026-04-15"YesThe date the client paid for this service. Format: YYYY-MM-DD.
"payment method type""03"ConditionalOnly needed if relations[].payment_method is not set at the relation level.
"authorized RFC""PEGJ850312AB1"NoRFC of an authorized third-party helper (individuals only).
"government contribution amount""120.00"ConditionalAmount of government tax paid for this service (e.g. hotel tax).
"government contribution entity""15"ConditionalThe state code where the government contribution was paid. Required if "government contribution amount" is present.
"commision taxable amount""10000.00"NoThe base used to calculate the platform commission for this service.
"commision taxable rate""0.150"NoThe commission rate as a decimal (e.g. 0.150 = 15%).
"commision amount""1500.00"ConditionalThe commission amount charged for this service. Required if a commission applies.

Service Type Codes (c_TipoDeServ)

CodeDescriptionSubtype required?
01Passenger transportYes
02Hospitality / lodgingYes
03Food and grocery deliveryNo
04Sale of goodsNo
05Other servicesNo

Service Subtype Codes (c_SubTipoServ)

CodeDescription
0101Passenger transport — Domestic
0102Passenger transport — International
0201Lodging — Without meals
0202Lodging — With meals

items[].taxes[]

Same rule as above: use taxable_amount for the base, amount for the actual tax. Both can appear together when you need to declare the base and the resulting withholding.

nametypewithholding_typeRequiredWhat to send
"VAT""VAT"(absent)YesVAT charged on this service. Include taxable_amount, amount, and rate. Set adds_to_final_amount: true.
"VAT""VAT""withholding"YesVAT withheld on this service. Include taxable_amount, amount, and rate.
"ISR""GIT""withholding"ConditionalISR withheld on this service. Required if ISR applies.

Replacing a Previous Document

If this document replaces a previously issued withholding, pass the original document's UUID:

FieldWhat to send
original_invoice_idThe UUID of the withholding document being replaced.

Full Example Payload

{
    "supplier_company_id": "{{company_id}}",
    "invoice_number": "R0010",
    "invoice_type": "withholding",
    "invoice_date": "2026-04-29",
    "document_type": "withholding invoice",
    "e_invoice": true,
    "currency": "MXN",
    "categories": [
        { "code": "26",   "list": "withholding_type" },
        { "code": "2026", "list": "fiscal year" },
        { "code": "03",   "list": "initial month code" },
        { "code": "03",   "list": "final month code" }
    ],
    "buyer": {
        "company": {
            "name": "MARIA OLIVIA MARTINEZ SAGAZ",
            "legal_name": "MARIA OLIVIA MARTINEZ SAGAZ",
            "type": "person",
            "address": {
                "postal_code": "80290",
                "country": "MX"
            },
            "tax_registrations": [
                {
                    "type": "RFC",
                    "number": "MASO451221PM4",
                    "level": "country",
                    "location": "MX",
                    "status": "Régimen de Actividades Profesionales"
                }
            ]
        }
    },
    "amounts": [
        { "amount": 20, "name": "final amount", "type": "final" }
    ],
    "taxes": [
        { "taxable_amount": 20, "name": "total taxes",  "type": "total" },
        { "taxable_amount": 0,  "name": "exempt taxes", "type": "exempt" },
        { "amount": 1.60, "name": "total taxes", "type": "total", "withholding_type": "withholding", "code": "01" },
        { "taxable_amount": 3.20, "amount": 1.60, "name": "total VAT", "type": "VAT", "withholding_type": "withholding", "code": "01" }
    ],
    "relations": [
        {
            "invoice_type": "withholding",
            "document_type": "digital platform invoice",
            "currency": "MXN",
            "categories": [
                { "code": "04",    "list": "periodicity" },
                { "code": "02",    "list": "number of services" },
                { "code": "20.00", "list": "total government contribution" }
            ],
            "amounts": [
                { "amount": 20,   "name": "amount",           "type": "base amount" },
                { "amount": 0.02, "name": "total commision",  "type": "commision"  }
            ],
            "taxes": [
                { "taxable_amount": 20, "amount": 3.20, "name": "total VAT", "type": "VAT", "rate": 0.16 },
                { "amount": 1.60, "name": "total VAT",     "type": "VAT", "withholding_type": "withholding", "code": "01" },
                { "amount": 1.60, "name": "VAT difference", "type": "VAT" }
            ],
            "items": [
                {
                    "name": "Servicio 1",
                    "amount": 10,
                    "quantity": 1,
                    "categories": [
                        { "code": "06",         "list": "service type" },
                        { "code": "2026-03-15", "list": "service date" },
                        { "code": "02",         "list": "payment method type" },
                        { "code": "10.00",      "list": "government contribution amount" },
                        { "code": "15",         "list": "government contribution entity" },
                        { "code": "0.01",       "list": "commision amount" }
                    ],
                    "taxes": [
                        { "taxable_amount": 10, "amount": 1.60, "name": "VAT", "type": "VAT", "rate": 0.16, "rate_type": "percentage", "adds_to_final_amount": true },
                        { "taxable_amount": 10, "amount": 0.80, "name": "VAT", "type": "VAT", "withholding_type": "withholding", "rate": 0.08, "rate_type": "percentage" }
                    ]
                },
                {
                    "name": "Servicio 2",
                    "amount": 10,
                    "quantity": 1,
                    "categories": [
                        { "code": "06",         "list": "service type" },
                        { "code": "2026-03-02", "list": "service date" },
                        { "code": "02",         "list": "payment method type" },
                        { "code": "10.00",      "list": "government contribution amount" },
                        { "code": "15",         "list": "government contribution entity" },
                        { "code": "0.01",       "list": "commision amount" }
                    ],
                    "taxes": [
                        { "taxable_amount": 10, "amount": 1.60, "name": "VAT", "type": "VAT", "rate": 0.16, "rate_type": "percentage", "adds_to_final_amount": true },
                        { "taxable_amount": 10, "amount": 0.80, "name": "VAT", "type": "VAT", "withholding_type": "withholding", "rate": 0.08, "rate_type": "percentage" }
                    ]
                }
            ]
        }
    ]
}