# [MX] Withholding Invoice (CFDI Retenciones e Información de Pagos 2.0)
What is a Withholding Invoice?
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 payload always has two layers:
- The root (
withholding invoice) — the period header with totals and recipient info. - One entry in
relations[](digital platform invoice) — the complement with the service-by-service breakdown.
relations[] always contains exactly one element for this document type.
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 | Yes | A short description of the withholding (e.g. "Retención por servicios de plataformas tecnológicas"). Max 100 characters. |
Period (categories[])
categories[])These four entries define the fiscal period this document covers.
list | code example | Required | What to send |
|---|---|---|---|
withholding_type | "25" | Yes | The type of withholding you're reporting. Use "25" for digital platforms. See catalog below. |
initial month code | "01" | Yes | The first month of the period. "01" = January, "12" = December. |
final month code | "02" | Yes | The last month of the period. 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
| Code | When to use |
|---|---|
01 | Sale of shares |
02 | Dividends |
03 | Interest |
06 | Rental |
09 | Professional fees |
14 | Fees paid to individuals |
25 | Digital platforms (rideshare, delivery, hospitality) |
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 when country is "MX". |
tax_registrations type "CURP" | No | Only for individual ("person") Mexican providers. |
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[]name | type | withholding_type | Required | What to send |
|---|---|---|---|---|
"total taxes" | "total" | (absent) | Yes | The total taxable base across all services in the period. |
"exempt taxes" | "exempt" | (absent) | Yes | The total exempt base. Send 0 if there are no exempt amounts. |
"total taxes" | "total" | "withholding" | Yes | The total amount withheld. Must equal the sum of all individual withholding entries below. |
"total VAT" | "VAT" | "withholding" | Yes | Total IVA withheld. Include taxable_amount, amount, and rate. |
"total ISR" | "GIT" | "withholding" | Yes | Total ISR withheld. Include taxable_amount, amount, and rate. |
Important: The
amountin the"total taxes"/"withholding"entry must equal the sum of"total VAT"withheld +"total ISR"withheld. If these don't match, the document will be rejected.
Digital Platform Complement (relations[])
relations[])This section contains the service-level breakdown. Always one element.
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 providers used different payment methods across services, 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[]. |
Periodicity Codes
| 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. |
"total government contribution" | "payment" | Conditional | Required only if any service has a government contribution (e.g. hotel tax). Sum of all individual contributions. |
relations[].taxes[]
relations[].taxes[]name | type | withholding_type | Required | What to send |
|---|---|---|---|---|
"total VAT" | "VAT" | (absent) | Yes | Total VAT charged across all services. |
"total VAT" | "VAT" | "withholding" | Yes | Total VAT withheld across all services. |
"total ISR" | "GIT" | "withholding" | Yes | Total ISR withheld across all services. |
"VAT difference" | "VAT" | (absent) | Yes | The VAT that was 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" | "CMX" | Conditional | The state 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
| 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
| Code | Description |
|---|---|
0101 | Passenger transport — Domestic |
0102 | Passenger transport — International |
0201 | Lodging — Without meals |
0202 | Lodging — With meals |
items[].taxes[]
items[].taxes[]One entry per tax type per service.
name | type | withholding_type | Required | What to send |
|---|---|---|---|---|
"VAT" | "VAT" | (absent) | Yes | VAT charged on this service. Set adds_to_final_amount: true. |
"VAT" | "VAT" | "withholding" | Yes | VAT withheld by the platform on this service. |
"ISR" | "GIT" | "withholding" | Yes | ISR withheld by the platform on this service. |
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": "R0001",
"invoice_type": "withholding",
"invoice_date": "2026-04-01",
"document_type": "withholding invoice",
"e_invoice": true,
"currency": "MXN",
"additional_info": "Retención por servicios de plataformas tecnológicas",
"categories": [
{ "code": "25", "list": "withholding_type" },
{ "code": "2026", "list": "fiscal year" },
{ "code": "01", "list": "initial month code" },
{ "code": "02", "list": "final month code" }
],
"buyer": {
"company": {
"name": "PRESTADOR DE SERVICIOS S.A. DE C.V.",
"legal_name": "PRESTADOR DE SERVICIOS S.A. DE C.V.",
"type": "business",
"address": {
"address_line_1": "Av. Insurgentes 500",
"city": "Ciudad de Mexico",
"state": "MX-CMX",
"postal_code": "06600",
"country": "MX"
},
"tax_registrations": [
{ "type": "RFC", "number": "PSS900101AB1", "level": "country", "location": "MX" }
]
}
},
"amounts": [
{ "amount": 100000, "name": "final amount", "type": "final" }
],
"taxes": [
{ "taxable_amount": 80000, "name": "total taxes", "type": "total" },
{ "taxable_amount": 20000, "name": "exempt taxes", "type": "exempt" },
{ "amount": 12800, "name": "total taxes", "type": "total", "withholding_type": "withholding" },
{ "taxable_amount": 80000, "amount": 8000, "name": "total VAT", "type": "VAT", "withholding_type": "withholding", "rate": 0.10, "rate_type": "percentage" },
{ "taxable_amount": 80000, "amount": 4800, "name": "total ISR", "type": "GIT", "withholding_type": "withholding", "rate": 0.06, "rate_type": "percentage" }
],
"relations": [
{
"invoice_type": "withholding",
"document_type": "digital platform invoice",
"currency": "MXN",
"payment_method": { "type": "bank transfer" },
// all services paid by bank transfer — omit if mixed
"categories": [
{ "code": "04", "list": "periodicity" },
// monthly
{ "code": "10", "list": "number of services" }
// 10 services in the period
],
"amounts": [
{ "amount": 100000, "name": "amount", "type": "base amount" },
{ "amount": 15000, "name": "total commision", "type": "commision" }
],
"taxes": [
{ "taxable_amount": 100000, "amount": 16000, "name": "total VAT", "type": "VAT", "rate": 0.16, "rate_type": "percentage" },
{ "amount": 8000, "name": "total VAT", "type": "VAT", "withholding_type": "withholding" },
{ "amount": 4800, "name": "total ISR", "type": "GIT", "withholding_type": "withholding" },
{ "amount": 8000, "name": "VAT difference", "type": "VAT" }
],
"items": [
{
"name": "Servicio de transporte de pasajeros",
"amount": 10000,
"quantity": 1,
"categories": [
{ "code": "01", "list": "service type" },
// passenger transport
{ "code": "0101", "list": "subtype service type" },
// domestic
{ "code": "2026-04-15", "list": "service date" }
],
"taxes": [
{ "taxable_amount": 10000, "amount": 1600, "name": "VAT", "type": "VAT", "rate": 0.16, "rate_type": "percentage", "adds_to_final_amount": true },
{ "taxable_amount": 10000, "amount": 800, "name": "VAT", "type": "VAT", "withholding_type": "withholding", "rate": 0.10, "rate_type": "percentage" },
{ "taxable_amount": 10000, "amount": 480, "name": "ISR", "type": "GIT", "withholding_type": "withholding", "rate": 0.06, "rate_type": "percentage" }
]
}
]
}
]
}Updated about 4 hours ago
