[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.
Field
Value
invoice_type
withholding
document_type
withholding invoice
e_invoice
true
currency
MXN
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
Field
Required
What to send
invoice_number
No
Your internal folio for this document. 1–20 alphanumeric characters.
invoice_date
Yes
The date you're issuing this document. Format: YYYY-MM-DD.
additional_info
No
A 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.
list
code example
Required
What to send
withholding_type
"25"
Yes
The type of withholding you're reporting. See catalog below.
initial month code
"01"
Yes
The first month (or period) covered. See c_Periodo catalog below.
final month code
"03"
Yes
The last month (or period) covered. Must be equal to or later than initial month code.
fiscal year
"2026"
No
The fiscal year. If omitted, Brinta uses the year from invoice_date. Only send this if they differ.
Withholding Type Codes (c_CveRetenc)
Code
When to use
01
Professional fees (honorarios)
02
Rental
03
Prizes
04
Dividends or distributed profits
05
Acquisition of goods
06
Sale of goods
07
Interest (individual)
08
Interest (company)
09
Other income
10
Digital platforms — passenger transport
11
Digital platforms — delivery of goods
12
Digital platforms — hospitality
13
Digital platforms — sale of goods and services
14
Non-business trusts
15
Non-profit organizations
16
Agricultural activities (individual)
17
Agricultural activities (company)
18
Real estate rental with purchase option
19
Federal cargo transport services
20
Transactions with related foreign parties
21
Interest paid to foreign residents
22
Dividends paid to foreign residents
23
Sale of shares to foreign residents
24
Salaries
25
Assimilated to salaries
26
Professional services paid to foreign residents
27
Rental paid to foreign residents
28
Other payments to foreign residents
Period Codes (c_Periodo) — for initial month code and final month code
Code
Period
Periodicity
01
January
Monthly
02
February
Monthly
03
March
Monthly
04
April
Monthly
05
May
Monthly
06
June
Monthly
07
July
Monthly
08
August
Monthly
09
September
Monthly
10
October
Monthly
11
November
Monthly
12
December
Monthly
13
January–February
Bimonthly
14
March–April
Bimonthly
15
May–June
Bimonthly
16
July–August
Bimonthly
17
September–October
Bimonthly
18
November–December
Bimonthly
19
January–March
Quarterly
20
April–June
Quarterly
21
July–September
Quarterly
22
October–December
Quarterly
23
January–April
Four-month period
24
May–August
Four-month period
25
January–June
Semester
26
January–December
Full fiscal year
Recipient (buyer)
The buyer is the service provider receiving the withholding notice — the person or company whose taxes you withheld.
Field
Required
What to send
buyer.company.legal_name
Yes
The provider's registered legal name.
buyer.company.type
Yes
"business" for companies, "person" for individuals.
buyer.company.address.postal_code
Yes
Their 5-digit fiscal postal code.
buyer.company.address.country
Yes
"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"
No
Foreign 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[]
name
type
Required
What to send
"final amount"
"final"
Yes
Total 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.
name
type
withholding_type
Field used
Required
What to send
"total taxes"
"total"
(absent)
taxable_amount
Yes
The total taxable base across all services in the period.
"exempt taxes"
"exempt"
(absent)
taxable_amount
Yes
The total exempt base. Send 0 if there are no exempt amounts.
"total taxes"
"total"
"withholding"
amount
Yes
The total amount withheld. Must equal the sum of all individual withholding entries below.
"total VAT"
"VAT"
"withholding"
taxable_amount + amount
Yes
Total IVA withheld. Include taxable_amount (base), amount (withheld), and rate.
"total ISR"
"GIT"
"withholding"
taxable_amount + amount
Conditional
Total 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[]
list
code example
Required
What to send
"periodicity"
"04"
Yes
How often you report. See catalog below.
"number of services"
"10"
Yes
Total number of service operations in the period. Must match the number of entries in items[].
Periodicity Codes (c_Periodicidad)
Code
Description
01
Daily
02
Weekly
03
Bi-weekly
04
Monthly
05
Bi-monthly
relations[].amounts[]
name
type
Required
What to send
"amount"
"base amount"
Yes
Total of all service prices excluding VAT. Sum of all items[].amount.
"total commision"
"commision"
Yes
Total platform commissions charged across all services. Must equal the sum of all items[].amounts[].amount where name = "commission".
"total government contribution"
"payment"
Conditional
Sum of all government contributions across all services. Required if any item has a government contribution.
relations[].taxes[]
Same rule as root-level taxes[]: use taxable_amount for bases, amount for actual tax figures.
name
type
withholding_type
Field used
Required
What to send
"total VAT"
"VAT"
(absent)
taxable_amount + amount
Yes
Total VAT charged across all services.
"total VAT"
"VAT"
"withholding"
amount
Yes
Total VAT withheld across all services.
"total ISR"
"GIT"
"withholding"
amount
Conditional
Total ISR withheld. Required if ISR was withheld.
"VAT difference"
"VAT"
(absent)
amount
Yes
The 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[].
Field
Required
What to send
name
Yes
Description of the service.
amount
Yes
Price of the service, excluding VAT.
quantity
Yes
Always 1 per service operation.
items[].categories[]
list
code example
Required
What to send
"service type"
"01"
Yes
The type of service. See catalog below.
"subtype service type"
"0101"
Conditional
Required for transport and hospitality services. See sub-catalog below.
"service date"
"2026-04-15"
Yes
The date the client paid for this service. Format: YYYY-MM-DD.
"payment method type"
"03"
Conditional
Only needed if relations[].payment_method is not set at the relation level. See catalog below.
"authorized RFC"
"PEGJ850312AB1"
No
RFC of an authorized third-party helper (individuals only).
Payment Method Type Codes (c_FormaPagoPlataformas)
Code
Description
01
Cash
02
Electronic funds transfer
03
Credit card
04
Electronic wallet
05
Electronic money
06
Debit card
07
Service card
08
Payment intermediary
09
Other income from prizes, bonuses, or similar
items[].amounts[]
Use items[].amounts[] to report the government contribution and commission for each individual service.
Government Contribution
The government contribution for a service (e.g. hotel tax) is split across two fields with the same name:
Field
name
Required
What to send
amount
"government contribution entity"
Conditional
The contribution amount for this service (e.g. 120.00).
The state code where the contribution was paid goes in items[].categories[] with list: "government contribution entity" — not here.
Commission
The platform commission for a service is reported using three fields, all with name: "commission":
Field
name
Required
What to send
taxable_amount
"commission"
No
The base amount on which the commission rate is applied.
rate
"commission"
No
The commission rate as a decimal (e.g. 0.150 = 15%).
amount
"commission"
Conditional
The commission amount charged. Required if a commission applies.
// Commission example for a single service item
"amounts": [
{
"taxable_amount": 10000.00,
"rate": 0.150,
"amount": 1500.00,
"name": "commission"
}
]
// Government contribution example for a single service item
"amounts": [
{
"amount": 120.00,
"name": "government contribution entity"
}
],
"categories": [
{ "code": "<c_EntidadesFederativas code>", "list": "government contribution entity" }
]
Service Type Codes (c_TipoDeServ)
Code
Description
Subtype required?
01
Passenger transport
Yes
02
Hospitality / lodging
Yes
03
Food and grocery delivery
No
04
Sale of goods
No
05
Other services
No
Service Subtype Codes (c_SubTipoServ)
Code
Description
0101
Passenger transport — Domestic
0102
Passenger transport — International
0201
Lodging — Without meals
0202
Lodging — 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.
name
type
withholding_type
Required
What to send
"VAT"
"VAT"
(absent)
Yes
VAT charged on this service. Include taxable_amount, amount, and rate. Set adds_to_final_amount: true.
"VAT"
"VAT"
"withholding"
Yes
VAT withheld on this service. Include taxable_amount, amount, and rate.
"ISR"
"GIT"
"withholding"
Conditional
ISR 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:
Field
What to send
original_invoice_id
The UUID of the withholding document being replaced.
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.
Field
Value
invoice_type
withholding
document_type
withholding invoice
e_invoice
true
currency
MXN
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
Field
Required
What to send
invoice_number
No
Your internal folio for this document. 1–20 alphanumeric characters.
invoice_date
Yes
The date you're issuing this document. Format: YYYY-MM-DD.
additional_info
No
A 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.
list
code example
Required
What to send
withholding_type
"25"
Yes
The type of withholding you're reporting. See catalog below.
initial month code
"01"
Yes
The first month (or period) covered. See c_Periodo catalog below.
final month code
"03"
Yes
The last month (or period) covered. Must be equal to or later than initial month code.
fiscal year
"2026"
No
The fiscal year. If omitted, Brinta uses the year from invoice_date. Only send this if they differ.
Withholding Type Codes (c_CveRetenc)
Code
When to use
01
Professional fees (honorarios)
02
Rental
03
Prizes
04
Dividends or distributed profits
05
Acquisition of goods
06
Sale of goods
07
Interest (individual)
08
Interest (company)
09
Other income
10
Digital platforms — passenger transport
11
Digital platforms — delivery of goods
12
Digital platforms — hospitality
13
Digital platforms — sale of goods and services
14
Non-business trusts
15
Non-profit organizations
16
Agricultural activities (individual)
17
Agricultural activities (company)
18
Real estate rental with purchase option
19
Federal cargo transport services
20
Transactions with related foreign parties
21
Interest paid to foreign residents
22
Dividends paid to foreign residents
23
Sale of shares to foreign residents
24
Salaries
25
Assimilated to salaries
26
Professional services paid to foreign residents
27
Rental paid to foreign residents
28
Other payments to foreign residents
Period Codes (c_Periodo) — for initial month code and final month code
Code
Period
Periodicity
01
January
Monthly
02
February
Monthly
03
March
Monthly
04
April
Monthly
05
May
Monthly
06
June
Monthly
07
July
Monthly
08
August
Monthly
09
September
Monthly
10
October
Monthly
11
November
Monthly
12
December
Monthly
13
January–February
Bimonthly
14
March–April
Bimonthly
15
May–June
Bimonthly
16
July–August
Bimonthly
17
September–October
Bimonthly
18
November–December
Bimonthly
19
January–March
Quarterly
20
April–June
Quarterly
21
July–September
Quarterly
22
October–December
Quarterly
23
January–April
Four-month period
24
May–August
Four-month period
25
January–June
Semester
26
January–December
Full fiscal year
Recipient (buyer)
The buyer is the service provider receiving the withholding notice — the person or company whose taxes you withheld.
Field
Required
What to send
buyer.company.legal_name
Yes
The provider's registered legal name.
buyer.company.type
Yes
"business" for companies, "person" for individuals.
buyer.company.address.postal_code
Yes
Their 5-digit fiscal postal code.
buyer.company.address.country
Yes
"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"
No
Foreign 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[]
name
type
Required
What to send
"final amount"
"final"
Yes
Total 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.
name
type
withholding_type
Field used
Required
What to send
"total taxes"
"total"
(absent)
taxable_amount
Yes
The total taxable base across all services in the period.
"exempt taxes"
"exempt"
(absent)
taxable_amount
Yes
The total exempt base. Send 0 if there are no exempt amounts.
"total taxes"
"total"
"withholding"
amount
Yes
The total amount withheld. Must equal the sum of all individual withholding entries below.
"total VAT"
"VAT"
"withholding"
taxable_amount + amount
Yes
Total IVA withheld. Include taxable_amount (base), amount (withheld), and rate.
"total ISR"
"GIT"
"withholding"
taxable_amount + amount
Conditional
Total 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[]
list
code example
Required
What to send
"periodicity"
"04"
Yes
How often you report. See catalog below.
"number of services"
"10"
Yes
Total number of service operations in the period. Must match the number of entries in items[].
"total government contribution"
"20.00"
Conditional
Sum of all government contributions across all services. Required if any item has a "government contribution amount".
Periodicity Codes (c_Periodicidad)
Code
Description
01
Daily
02
Weekly
03
Bi-weekly
04
Monthly
05
Bi-monthly
relations[].amounts[]
name
type
Required
What to send
"amount"
"base amount"
Yes
Total of all service prices excluding VAT. Sum of all items[].amount.
"total commision"
"commision"
Yes
Total platform commissions charged across all services.
relations[].taxes[]
Same rule as root-level taxes[]: use taxable_amount for bases, amount for actual tax figures.
name
type
withholding_type
Field used
Required
What to send
"total VAT"
"VAT"
(absent)
taxable_amount + amount
Yes
Total VAT charged across all services.
"total VAT"
"VAT"
"withholding"
amount
Yes
Total VAT withheld across all services.
"total ISR"
"GIT"
"withholding"
amount
Conditional
Total ISR withheld. Required if ISR was withheld.
"VAT difference"
"VAT"
(absent)
amount
Yes
The 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[].
Field
Required
What to send
name
Yes
Description of the service.
amount
Yes
Price of the service, excluding VAT.
quantity
Yes
Always 1 per service operation.
items[].categories[]
list
code example
Required
What to send
"service type"
"01"
Yes
The type of service. See catalog below.
"subtype service type"
"0101"
Conditional
Required for transport and hospitality services. See sub-catalog below.
"service date"
"2026-04-15"
Yes
The date the client paid for this service. Format: YYYY-MM-DD.
"payment method type"
"03"
Conditional
Only needed if relations[].payment_method is not set at the relation level.
"authorized RFC"
"PEGJ850312AB1"
No
RFC of an authorized third-party helper (individuals only).
"government contribution amount"
"120.00"
Conditional
Amount of government tax paid for this service (e.g. hotel tax).
"government contribution entity"
"15"
Conditional
The state code where the government contribution was paid. Required if "government contribution amount" is present.
"commision taxable amount"
"10000.00"
No
The base used to calculate the platform commission for this service.
"commision taxable rate"
"0.150"
No
The commission rate as a decimal (e.g. 0.150 = 15%).
"commision amount"
"1500.00"
Conditional
The commission amount charged for this service. Required if a commission applies.
Service Type Codes (c_TipoDeServ)
Code
Description
Subtype required?
01
Passenger transport
Yes
02
Hospitality / lodging
Yes
03
Food and grocery delivery
No
04
Sale of goods
No
05
Other services
No
Service Subtype Codes (c_SubTipoServ)
Code
Description
0101
Passenger transport — Domestic
0102
Passenger transport — International
0201
Lodging — Without meals
0202
Lodging — 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.
name
type
withholding_type
Required
What to send
"VAT"
"VAT"
(absent)
Yes
VAT charged on this service. Include taxable_amount, amount, and rate. Set adds_to_final_amount: true.
"VAT"
"VAT"
"withholding"
Yes
VAT withheld on this service. Include taxable_amount, amount, and rate.
"ISR"
"GIT"
"withholding"
Conditional
ISR 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:
Field
What to send
original_invoice_id
The UUID of the withholding document being replaced.