[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[])
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)
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
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)
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[])
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[]
amounts[]name | type | Required | What to send |
|---|---|---|---|
"final amount" | "final" | Yes | Total value of all operations in the period, before taxes. |
taxes[]
taxes[]Within taxes[], the field you use depends on what you're expressing:
- Use
taxable_amountwhen the entry represents a base — the amount on which a tax is calculated (e.g. total taxable base, total exempt base). - Use
amountwhen 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
amountin"total taxes"/"withholding"must equal the sum of all individualamountvalues withwithholding_type: "withholding". If these don't match, the document will be rejected.
Digital Platform Complement (relations[])
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
relations[].payment_methodSet 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[]
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)
c_Periodicidad)| Code | Description |
|---|---|
01 | Daily |
02 | Weekly |
03 | Bi-weekly |
04 | Monthly |
05 | Bi-monthly |
relations[].amounts[]
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[]
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[])
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[]
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)
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)
c_SubTipoServ)| Code | Description |
|---|---|
0101 | Passenger transport — Domestic |
0102 | Passenger transport — International |
0201 | Lodging — Without meals |
0202 | Lodging — With meals |
items[].taxes[]
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. |
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" }
]
}
]
}
]
}Updated 19 days ago
