CFDI por plataformas tecnológicas

CFDI de Retenciones con el complemento de Plataformas tecnológicas

El complemento de Servicios mediante plataformas tecnológicas se agrega al CFDI de Retenciones e Información de Pagos cuando una plataforma tecnológica o digital retiene impuestos a quienes prestan servicios o venden a través de ella. Se timbra con la clave de retención 26 y reúne en un solo comprobante al mes los servicios realizados y las retenciones correspondientes.

En Facturama está disponible solo por API: se integra desde el sistema de tu plataforma.

Quién lo emite

Quién debe emitirel complemento de Plataformas tecnológicas

Plataformas de transporte y entrega

Apps que conectan a quienes ofrecen servicios de transporte de personas o de entrega con sus clientes.

Plataformas de hospedaje

Plataformas que intermedian la renta de alojamiento entre anfitriones y huéspedes.

Tiendas virtuales y apps de venta

Plataformas donde terceros venden bienes o prestan servicios y la plataforma retiene impuestos.

Repartidor con gorra azul entregando una bolsa de comida a una clienta

Qué datos lleva

Qué datos llevael complemento de Plataformas tecnológicas

  1. Periodicidad

    Periodicidad

    Cada cuánto calculas la retención (por ejemplo diaria, semanal, quincenal o mensual). El comprobante siempre abarca un mes.

  2. Número de servicios

    NumServ

    Cuántos servicios incluye el periodo.

  3. Totales del periodo

    MonTotServSIVA

    Monto de los servicios, IVA trasladado y retenido, e ISR retenido del periodo.

  4. Detalle por servicio

    DetallesDelServicio

    Fecha, tipo de servicio, forma de pago, precio sin IVA e IVA trasladado de cada uno.

  5. Uso de la plataforma

    MonTotalporUsoPlataforma

    El total que la plataforma cobró al vendedor en el periodo por usarla.

  6. Contribución gubernamental

    ContribucionGubernamental

    Contribuciones locales pagadas por el servicio, como el impuesto sobre hospedaje, con la entidad donde se pagan.

¿Vendes o prestas servicios en una plataforma? No emites este CFDI: lo emite la plataforma que te retiene, y tú lo usas en tu declaración.

Facturama

Ejemplo de CFDI
emitido para el vendedor


Receptor
Persona que vende o presta servicios en la plataforma
Clave de retención
26 - Servicios mediante plataformas tecnológicas
Complemento
Plataformas tecnológicas
Cobertura
Un comprobante al mes, no por servicio
Resultado
CFDI con UUID para el vendedor

Ejemplo

Ejemplo de CFDIpor plataformas tecnológicas

Una plataforma de venta cierra el mes y necesita informar las retenciones de cada vendedor. Para cada vendedor emite un CFDI de Retenciones con la clave 26. El complemento agrupa todas sus ventas del mes y las retenciones del periodo, en lugar de timbrar un comprobante por venta. La plataforma lo hace desde su propio sistema, con una llamada a la API de Facturama.

Para developers

Emisión por API del complemento de Plataformas tecnológicas

Este complemento se emite solo por API. Intégralo en tu sistema y timbra un CFDI de retenciones al mes para cada persona que presta servicios o vende en tu plataforma.

  1. Contrata el Módulo de Retenciones y ten un plan de Facturación activo.
  2. Envía el comprobante con la clave 26 y el complemento al endpoint de retenciones.
  3. Recibe el UUID del comprobante timbrado y guarda el XML.
Ver documentación API
POSThttps://apisandbox.facturama.mx/2/retenciones
$usuario  = 'TU_USUARIO_API';
$password = 'TU_PASSWORD_API';

$payload = [
    'FolioInt' => '0001',
    'FechaExp' => '2024-04-17T12:00:01',
    'CveRetenc' => '26',
    'LugarExpRetenc' => '78180',
    'Emisor' => [
        'RFCEmisor' => 'EKU9003173C9',
        'NomDenRazSocE' => 'ESCUELA KEMPER URGATE',
        'RegimenFiscalE' => '601',
    ],
    'Receptor' => [
        'Nacionalidad' => 'Nacional',
        'Nacional' => [
            'RFCRecep' => 'CACX7605101P8',
            'NomDenRazSocR' => 'XOCHILT CASAS CHAVEZ',
            'DomicilioFiscalR' => '36257',
        ],
    ],
    'Periodo' => [
        'MesIni' => '01',
        'MesFin' => '01',
        'Ejerc' => '2024',
    ],
    'Totales' => [
        'montoTotOperacion' => '1681.06',
        'montoTotGrav' => '1681.06',
        'montoTotExent' => '0.00',
        'montoTotRet' => '151.29',
        'ImpRetenidos' => [
            [
                'BaseRet' => '1681.06',
                'Impuesto' => '01',
                'MontoRet' => '16.81',
                'TipoPagoRet' => '03',
            ],
            [
                'BaseRet' => '268.96',
                'Impuesto' => '02',
                'MontoRet' => '134.48',
                'TipoPagoRet' => '01',
            ],
        ],
    ],
    'Complemento' => [
        'ServiciosPlataformasTecnologicas' => [
            'Servicios' => [
                [
                    'ImpuestosTrasladadosdelServicio' => [
                        'Base' => '1681.06',
                        'Impuesto' => '02',
                        'TipoFactor' => 'Tasa',
                        'TasaCuota' => '0.160000',
                        'Importe' => '268.9696',
                    ],
                    'ComisionDelServicio' => [
                        'Base' => '1681.06',
                        'Importe' => '14.66',
                    ],
                    'FormaPagoServ' => '02',
                    'TipoDeServ' => '05',
                    'FechaServ' => '2024-01-01',
                    'PrecioServSinIva' => '1681.06',
                ],
            ],
            'Periodicidad' => '02',
            'NumServ' => 1,
            'MontToServSIva' => '1681.06',
            'TotalIvaTrasladado' => '268.9696',
            'TotalIvaRetenido' => '134.48',
            'TotalIsrRetenido' => '16.81',
            'DifIvaEntregadoPrestServ' => '134.4896',
            'MonTotalporUsoPlataforma' => '14.66',
        ],
    ],
];

$ch = curl_init('https://apisandbox.facturama.mx/2/retenciones');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_USERPWD, "$usuario:$password");
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$respuesta = curl_exec($ch);
curl_close($ch);

echo $respuesta;
const usuario  = 'TU_USUARIO_API';
const password = 'TU_PASSWORD_API';

const payload = {
  FolioInt: '0001',
  FechaExp: '2024-04-17T12:00:01',
  CveRetenc: '26',
  LugarExpRetenc: '78180',
  Emisor: {
    RFCEmisor: 'EKU9003173C9',
    NomDenRazSocE: 'ESCUELA KEMPER URGATE',
    RegimenFiscalE: '601',
  },
  Receptor: {
    Nacionalidad: 'Nacional',
    Nacional: {
      RFCRecep: 'CACX7605101P8',
      NomDenRazSocR: 'XOCHILT CASAS CHAVEZ',
      DomicilioFiscalR: '36257',
    },
  },
  Periodo: {
    MesIni: '01',
    MesFin: '01',
    Ejerc: '2024',
  },
  Totales: {
    montoTotOperacion: '1681.06',
    montoTotGrav: '1681.06',
    montoTotExent: '0.00',
    montoTotRet: '151.29',
    ImpRetenidos: [
      {
        BaseRet: '1681.06',
        Impuesto: '01',
        MontoRet: '16.81',
        TipoPagoRet: '03',
      },
      {
        BaseRet: '268.96',
        Impuesto: '02',
        MontoRet: '134.48',
        TipoPagoRet: '01',
      },
    ],
  },
  Complemento: {
    ServiciosPlataformasTecnologicas: {
      Servicios: [
        {
          ImpuestosTrasladadosdelServicio: {
            Base: '1681.06',
            Impuesto: '02',
            TipoFactor: 'Tasa',
            TasaCuota: '0.160000',
            Importe: '268.9696',
          },
          ComisionDelServicio: {
            Base: '1681.06',
            Importe: '14.66',
          },
          FormaPagoServ: '02',
          TipoDeServ: '05',
          FechaServ: '2024-01-01',
          PrecioServSinIva: '1681.06',
        },
      ],
      Periodicidad: '02',
      NumServ: 1,
      MontToServSIva: '1681.06',
      TotalIvaTrasladado: '268.9696',
      TotalIvaRetenido: '134.48',
      TotalIsrRetenido: '16.81',
      DifIvaEntregadoPrestServ: '134.4896',
      MonTotalporUsoPlataforma: '14.66',
    },
  },
};

fetch('https://apisandbox.facturama.mx/2/retenciones', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: 'Basic ' + btoa(`${usuario}:${password}`),
  },
  body: JSON.stringify(payload),
})
  .then((res) => res.json())
  .then((data) => console.log(data.Complemento.TimbreFiscalDigital.UUID));
import requests
from requests.auth import HTTPBasicAuth

usuario  = 'TU_USUARIO_API'
password = 'TU_PASSWORD_API'

payload = {
    'FolioInt': '0001',
    'FechaExp': '2024-04-17T12:00:01',
    'CveRetenc': '26',
    'LugarExpRetenc': '78180',
    'Emisor': {
        'RFCEmisor': 'EKU9003173C9',
        'NomDenRazSocE': 'ESCUELA KEMPER URGATE',
        'RegimenFiscalE': '601',
    },
    'Receptor': {
        'Nacionalidad': 'Nacional',
        'Nacional': {
            'RFCRecep': 'CACX7605101P8',
            'NomDenRazSocR': 'XOCHILT CASAS CHAVEZ',
            'DomicilioFiscalR': '36257',
        },
    },
    'Periodo': {
        'MesIni': '01',
        'MesFin': '01',
        'Ejerc': '2024',
    },
    'Totales': {
        'montoTotOperacion': '1681.06',
        'montoTotGrav': '1681.06',
        'montoTotExent': '0.00',
        'montoTotRet': '151.29',
        'ImpRetenidos': [
            {
                'BaseRet': '1681.06',
                'Impuesto': '01',
                'MontoRet': '16.81',
                'TipoPagoRet': '03',
            },
            {
                'BaseRet': '268.96',
                'Impuesto': '02',
                'MontoRet': '134.48',
                'TipoPagoRet': '01',
            },
        ],
    },
    'Complemento': {
        'ServiciosPlataformasTecnologicas': {
            'Servicios': [
                {
                    'ImpuestosTrasladadosdelServicio': {
                        'Base': '1681.06',
                        'Impuesto': '02',
                        'TipoFactor': 'Tasa',
                        'TasaCuota': '0.160000',
                        'Importe': '268.9696',
                    },
                    'ComisionDelServicio': {
                        'Base': '1681.06',
                        'Importe': '14.66',
                    },
                    'FormaPagoServ': '02',
                    'TipoDeServ': '05',
                    'FechaServ': '2024-01-01',
                    'PrecioServSinIva': '1681.06',
                },
            ],
            'Periodicidad': '02',
            'NumServ': 1,
            'MontToServSIva': '1681.06',
            'TotalIvaTrasladado': '268.9696',
            'TotalIvaRetenido': '134.48',
            'TotalIsrRetenido': '16.81',
            'DifIvaEntregadoPrestServ': '134.4896',
            'MonTotalporUsoPlataforma': '14.66',
        },
    },
}

respuesta = requests.post(
    'https://apisandbox.facturama.mx/2/retenciones',
    json=payload,
    auth=HTTPBasicAuth(usuario, password),
)

print(respuesta.json())
String usuario  = "TU_USUARIO_API";
String password = "TU_PASSWORD_API";
String credenciales = Base64.getEncoder()
    .encodeToString((usuario + ":" + password).getBytes());

String payload = """
      {
        "FolioInt": "0001",
        "FechaExp": "2024-04-17T12:00:01",
        "CveRetenc": "26",
        "LugarExpRetenc": "78180",
        "Emisor": {
          "RFCEmisor": "EKU9003173C9",
          "NomDenRazSocE": "ESCUELA KEMPER URGATE",
          "RegimenFiscalE": "601"
        },
        "Receptor": {
          "Nacionalidad": "Nacional",
          "Nacional": {
            "RFCRecep": "CACX7605101P8",
            "NomDenRazSocR": "XOCHILT CASAS CHAVEZ",
            "DomicilioFiscalR": "36257"
          }
        },
        "Periodo": {
          "MesIni": "01",
          "MesFin": "01",
          "Ejerc": "2024"
        },
        "Totales": {
          "montoTotOperacion": "1681.06",
          "montoTotGrav": "1681.06",
          "montoTotExent": "0.00",
          "montoTotRet": "151.29",
          "ImpRetenidos": [
            {
              "BaseRet": "1681.06",
              "Impuesto": "01",
              "MontoRet": "16.81",
              "TipoPagoRet": "03"
            },
            {
              "BaseRet": "268.96",
              "Impuesto": "02",
              "MontoRet": "134.48",
              "TipoPagoRet": "01"
            }
          ]
        },
        "Complemento": {
          "ServiciosPlataformasTecnologicas": {
            "Servicios": [
              {
                "ImpuestosTrasladadosdelServicio": {
                  "Base": "1681.06",
                  "Impuesto": "02",
                  "TipoFactor": "Tasa",
                  "TasaCuota": "0.160000",
                  "Importe": "268.9696"
                },
                "ComisionDelServicio": {
                  "Base": "1681.06",
                  "Importe": "14.66"
                },
                "FormaPagoServ": "02",
                "TipoDeServ": "05",
                "FechaServ": "2024-01-01",
                "PrecioServSinIva": "1681.06"
              }
            ],
            "Periodicidad": "02",
            "NumServ": 1,
            "MontToServSIva": "1681.06",
            "TotalIvaTrasladado": "268.9696",
            "TotalIvaRetenido": "134.48",
            "TotalIsrRetenido": "16.81",
            "DifIvaEntregadoPrestServ": "134.4896",
            "MonTotalporUsoPlataforma": "14.66"
          }
        }
      }
    """;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://apisandbox.facturama.mx/2/retenciones"))
    .header("Content-Type", "application/json")
    .header("Authorization", "Basic " + credenciales)
    .POST(HttpRequest.BodyPublishers.ofString(payload))
    .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
var usuario  = "TU_USUARIO_API";
var password = "TU_PASSWORD_API";

var payload = new
{
    FolioInt = "0001",
    FechaExp = "2024-04-17T12:00:01",
    CveRetenc = "26",
    LugarExpRetenc = "78180",
    Emisor = new
    {
        RFCEmisor = "EKU9003173C9",
        NomDenRazSocE = "ESCUELA KEMPER URGATE",
        RegimenFiscalE = "601",
    },
    Receptor = new
    {
        Nacionalidad = "Nacional",
        Nacional = new
        {
            RFCRecep = "CACX7605101P8",
            NomDenRazSocR = "XOCHILT CASAS CHAVEZ",
            DomicilioFiscalR = "36257",
        },
    },
    Periodo = new
    {
        MesIni = "01",
        MesFin = "01",
        Ejerc = "2024",
    },
    Totales = new
    {
        montoTotOperacion = "1681.06",
        montoTotGrav = "1681.06",
        montoTotExent = "0.00",
        montoTotRet = "151.29",
        ImpRetenidos = new[]
        {
            new
            {
                BaseRet = "1681.06",
                Impuesto = "01",
                MontoRet = "16.81",
                TipoPagoRet = "03",
            },
            new
            {
                BaseRet = "268.96",
                Impuesto = "02",
                MontoRet = "134.48",
                TipoPagoRet = "01",
            },
        },
    },
    Complemento = new
    {
        ServiciosPlataformasTecnologicas = new
        {
            Servicios = new[]
            {
                new
                {
                    ImpuestosTrasladadosdelServicio = new
                    {
                        Base = "1681.06",
                        Impuesto = "02",
                        TipoFactor = "Tasa",
                        TasaCuota = "0.160000",
                        Importe = "268.9696",
                    },
                    ComisionDelServicio = new
                    {
                        Base = "1681.06",
                        Importe = "14.66",
                    },
                    FormaPagoServ = "02",
                    TipoDeServ = "05",
                    FechaServ = "2024-01-01",
                    PrecioServSinIva = "1681.06",
                },
            },
            Periodicidad = "02",
            NumServ = 1,
            MontToServSIva = "1681.06",
            TotalIvaTrasladado = "268.9696",
            TotalIvaRetenido = "134.48",
            TotalIsrRetenido = "16.81",
            DifIvaEntregadoPrestServ = "134.4896",
            MonTotalporUsoPlataforma = "14.66",
        },
    },
};

using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Basic",
        Convert.ToBase64String(Encoding.UTF8.GetBytes($"{usuario}:{password}")));

var response = await client.PostAsJsonAsync("https://apisandbox.facturama.mx/2/retenciones", payload);
Console.WriteLine(await response.Content.ReadAsStringAsync());
require 'net/http'
require 'json'
require 'uri'

usuario  = 'TU_USUARIO_API'
password = 'TU_PASSWORD_API'

payload = {
  FolioInt: '0001',
  FechaExp: '2024-04-17T12:00:01',
  CveRetenc: '26',
  LugarExpRetenc: '78180',
  Emisor: {
    RFCEmisor: 'EKU9003173C9',
    NomDenRazSocE: 'ESCUELA KEMPER URGATE',
    RegimenFiscalE: '601',
  },
  Receptor: {
    Nacionalidad: 'Nacional',
    Nacional: {
      RFCRecep: 'CACX7605101P8',
      NomDenRazSocR: 'XOCHILT CASAS CHAVEZ',
      DomicilioFiscalR: '36257',
    },
  },
  Periodo: {
    MesIni: '01',
    MesFin: '01',
    Ejerc: '2024',
  },
  Totales: {
    montoTotOperacion: '1681.06',
    montoTotGrav: '1681.06',
    montoTotExent: '0.00',
    montoTotRet: '151.29',
    ImpRetenidos: [
      {
        BaseRet: '1681.06',
        Impuesto: '01',
        MontoRet: '16.81',
        TipoPagoRet: '03',
      },
      {
        BaseRet: '268.96',
        Impuesto: '02',
        MontoRet: '134.48',
        TipoPagoRet: '01',
      },
    ],
  },
  Complemento: {
    ServiciosPlataformasTecnologicas: {
      Servicios: [
        {
          ImpuestosTrasladadosdelServicio: {
            Base: '1681.06',
            Impuesto: '02',
            TipoFactor: 'Tasa',
            TasaCuota: '0.160000',
            Importe: '268.9696',
          },
          ComisionDelServicio: {
            Base: '1681.06',
            Importe: '14.66',
          },
          FormaPagoServ: '02',
          TipoDeServ: '05',
          FechaServ: '2024-01-01',
          PrecioServSinIva: '1681.06',
        },
      ],
      Periodicidad: '02',
      NumServ: 1,
      MontToServSIva: '1681.06',
      TotalIvaTrasladado: '268.9696',
      TotalIvaRetenido: '134.48',
      TotalIsrRetenido: '16.81',
      DifIvaEntregadoPrestServ: '134.4896',
      MonTotalporUsoPlataforma: '14.66',
    },
  },
}

uri  = URI.parse('https://apisandbox.facturama.mx/2/retenciones')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri.request_uri, { 'Content-Type' => 'application/json' })
request.basic_auth(usuario, password)
request.body = payload.to_json

puts http.request(request).body

Antes de timbrar

Errores frecuentes con el complemento de Plataformas tecnológicas

ERROR 01

Buscarlo en el formulario web

Causa

Este complemento solo está disponible por API; no aparece en el formulario de la web.

Solución

Intégralo con la API de Facturama. Para los complementos de la web, consulta el Módulo de Retenciones.

ERROR 02

Timbrar un CFDI por cada servicio

Causa

El complemento es acumulativo: agrupa todos los servicios del mes en un solo comprobante.

Solución

Agrupa los servicios por mes y por persona, y timbra un comprobante por cada grupo.

ERROR 03

Totales que no cuadran

Causa

Los totales del complemento deben coincidir con los impuestos retenidos del comprobante; si no, el PAC rechaza el timbrado.

Solución

Calcula ambos desde los mismos servicios del mes y verifícalos antes de enviar.

Precio

Precio del complemento de Plataformas tecnológicas

El módulo se contrata una vez y desbloquea los complementos disponibles. El de Plataformas tecnológicas se usa solo por API.

Módulo de Retenciones

$1,650 MXN / año

IVA incluido · vigencia de 12 meses a partir de la compra

Cuando uses los 25 folios incluidos, los que timbres se descuentan de tu suscripción principal.

Contratar ahora

Dudas

Preguntas frecuentes sobre el complemento de Plataformas tecnológicas

No. Está disponible solo por API: se integra desde el sistema de tu plataforma. Los complementos que sí puedes emitir desde la web están en la página del Módulo de Retenciones.

La 26, Servicios mediante plataformas tecnológicas, del catálogo c_CveRetenc del SAT.

No. Es un comprobante acumulativo: reúne todos los servicios del mes y las retenciones correspondientes.

Depende de la Ley del ISR (artículo 113-A), la Ley del IVA (artículos 1o.-A BIS y 18-J) y la Ley de Ingresos de la Federación del ejercicio, del tipo de servicio y de si el prestador proporcionó su RFC. Confírmalo con tu contador: el complemento documenta lo que ya determinaste.

Va incluido en el Módulo de Retenciones: $1,650 MXN al año (IVA incluido), sin cobro adicional por complemento, e incluye 25 folios para timbrar. Cuando los uses, los folios se descuentan de tu plan de Facturación, que debe estar activo. Puedes probarlo en el sandbox de Facturama, que no tiene costo ni validez fiscal.

La retención cambia respecto a quien sí lo proporciona. Confirma con tu contador cómo tratarla y regístrala en el comprobante.

Incluidos en el mismo módulo

Otros complementos del CFDI de retenciones

Pagos a extranjeros

Residentes en el extranjero

Retenciones por pagos a residentes en el extranjero sin establecimiento permanente en México. Corresponde a la clave 18 de retención.

Ver complemento

Enajenación de acciones

Casas de bolsa e intermediarios bursátiles

Retenciones derivadas de la compraventa o enajenación de títulos accionarios. Corresponde a las claves 06 y 19 de retención.

Ver complemento

Premios

Rifas, sorteos y concursos

Captura entidad federativa, monto gravado y exento. Corresponde a la clave 20 de retención.

Ver complemento

Intereses

Bancos, fintechs y casas de bolsa

Interés nominal, real y pérdida. Corresponde a la clave 16 de retención.

Ver complemento