CFDI de intereses

CFDI de Retenciones con el complemento de Intereses

El complemento de Intereses se agrega al CFDI de Retenciones e Información de Pagos cuando pagas intereses de una cuenta, un pagaré, una inversión o una operación financiera derivada y debes informarlos al SAT. Se timbra con la clave de retención 16 (Intereses) y desglosa el interés nominal, el interés real y, si la hubo, la pérdida.

Quién lo emite

Quién debe emitirel complemento de Intereses

Bancos y SOFIPO

Instituciones que pagan intereses por cuentas, pagarés e inversiones.

Casas de bolsa y plataformas de inversión

Intermediarios que pagan intereses por las inversiones de sus clientes.

Empresas fuera del sistema financiero

Quien liquida intereses de un préstamo, por ejemplo entre una empresa y sus socios.

Mujer revisando documentos frente a una laptop en una oficina

Qué datos lleva

Qué datos llevael complemento de Intereses

  1. Sistema financiero

    SistFinanciero

    Si quien paga es una institución del sistema financiero (SI o NO).

  2. Retiro en el periodo

    RetiroAORESRetInt

    Si los intereses se retiraron durante el periodo (SI o NO).

  3. Operaciones financieras

    OperFinancDerivad

    Si derivan de operaciones financieras derivadas (SI o NO).

  4. Interés nominal

    MontIntNominal

    El interés que se pagó, sin ajustar.

  5. Interés real

    MontIntReal

    El interés después de ajustar por inflación.

  6. Pérdida

    Perdida

    Si el interés real fue negativo, la pérdida.

¿Te llegó una constancia de intereses de tu banco o tu app de inversión? No tienes que emitir nada: la timbró esa institución. Descárgala de su portal y úsala en tu declaración anual.

Ejemplo

Ejemplo de CFDIpor intereses

Un socio le presta dinero a la empresa y esta le liquida los intereses al cierre del año. Como la empresa no es una institución del sistema financiero, marca "No" en sistema financiero, captura el interés nominal pagado y el interés real del periodo y registra la retención que determinó. El socio recibe su CFDI de Retenciones como constancia.

En el sistema financiero, la retención de ISR se calcula sobre el capital que genera los intereses, a la tasa anual que fija la Ley de Ingresos de la Federación (artículo 54 de la LISR). Fuera del sistema financiero también se retiene a la tasa anual de la Ley de Ingresos sobre el capital (artículo 135).

Formulario de Nueva Retención en Facturama con la clave 16, Intereses
Facturama

Ejemplo de CFDI
emitido para quien recibe los intereses


Receptor
Socio que recibe los intereses
Clave de retención
16 - Intereses
Complemento
Intereses
Impuestos retenidos
Conforme a la LISR y la LIF vigentes
Resultado
CFDI con UUID como constancia de intereses

Para developers

Emisión por API del complemento de Intereses

Si ya tienes tu propio sistema o ERP, puedes timbrar las constancias de intereses directamente desde tu software con la API de Facturama, incluso por lotes al cierre del año. Lo explicamos en la API del complemento de intereses.

Ver documentación API
POSThttps://apisandbox.facturama.mx/2/retenciones
$usuario  = 'TU_USUARIO_API';
$password = 'TU_PASSWORD_API';

$payload = [
    'CveRetenc' => '16',
    'FechaExp' => '2026-10-01T12:40:06',
    'DescRetenc' => 'No aplica',
    'LugarExpRetenc' => '42501',
    'Folio' => null,
    'Emisor' => [
        'RfcEmisor' => 'EKU9003173C9',
        'NomDenRazSocE' => 'ESCUELA KEMPER URGATE',
        'RegimenFiscalE' => '601',
    ],
    'Receptor' => [
        'Nacionalidad' => 'Nacional',
        'Nacional' => [
            'RfcRecep' => 'CACX7605101P8',
            'NomDenRazSocR' => 'XOCHILT CASAS CHAVEZ',
            'CurpR' => null,
            'DomicilioFiscalR' => '36257',
        ],
    ],
    'Periodo' => [
        'MesIni' => 1,
        'MesFin' => 1,
        'Ejerc' => 2026,
    ],
    'Totales' => [
        'MontoTotOperacion' => 200,
        'MontoTotGrav' => 200,
        'MontoTotExent' => 0,
        'MontoTotRet' => 1.8,
        'ImpRetenidos' => [
            [
                'BaseRet' => 200,
                'Impuesto' => '01',
                'MontoRet' => 1.8,
                'TipoPagoRet' => '03',
            ],
        ],
    ],
    'Complemento' => [
        'Intereses' => [
            'sistFinanciero' => 'NO',
            'retiroAORESRetInt' => 'SI',
            'operFinancDerivad' => 'NO',
            'montIntNominal' => 200,
            'montIntReal' => 100,
            'perdida' => 0,
        ],
    ],
];

$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 = {
  CveRetenc: '16',
  FechaExp: '2026-10-01T12:40:06',
  DescRetenc: 'No aplica',
  LugarExpRetenc: '42501',
  Folio: null,
  Emisor: {
    RfcEmisor: 'EKU9003173C9',
    NomDenRazSocE: 'ESCUELA KEMPER URGATE',
    RegimenFiscalE: '601',
  },
  Receptor: {
    Nacionalidad: 'Nacional',
    Nacional: {
      RfcRecep: 'CACX7605101P8',
      NomDenRazSocR: 'XOCHILT CASAS CHAVEZ',
      CurpR: null,
      DomicilioFiscalR: '36257',
    },
  },
  Periodo: {
    MesIni: 1,
    MesFin: 1,
    Ejerc: 2026,
  },
  Totales: {
    MontoTotOperacion: 200,
    MontoTotGrav: 200,
    MontoTotExent: 0,
    MontoTotRet: 1.8,
    ImpRetenidos: [
      {
        BaseRet: 200,
        Impuesto: '01',
        MontoRet: 1.8,
        TipoPagoRet: '03',
      },
    ],
  },
  Complemento: {
    Intereses: {
      sistFinanciero: 'NO',
      retiroAORESRetInt: 'SI',
      operFinancDerivad: 'NO',
      montIntNominal: 200,
      montIntReal: 100,
      perdida: 0,
    },
  },
};

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 = {
    'CveRetenc': '16',
    'FechaExp': '2026-10-01T12:40:06',
    'DescRetenc': 'No aplica',
    'LugarExpRetenc': '42501',
    'Folio': None,
    'Emisor': {
        'RfcEmisor': 'EKU9003173C9',
        'NomDenRazSocE': 'ESCUELA KEMPER URGATE',
        'RegimenFiscalE': '601',
    },
    'Receptor': {
        'Nacionalidad': 'Nacional',
        'Nacional': {
            'RfcRecep': 'CACX7605101P8',
            'NomDenRazSocR': 'XOCHILT CASAS CHAVEZ',
            'CurpR': None,
            'DomicilioFiscalR': '36257',
        },
    },
    'Periodo': {
        'MesIni': 1,
        'MesFin': 1,
        'Ejerc': 2026,
    },
    'Totales': {
        'MontoTotOperacion': 200,
        'MontoTotGrav': 200,
        'MontoTotExent': 0,
        'MontoTotRet': 1.8,
        'ImpRetenidos': [
            {
                'BaseRet': 200,
                'Impuesto': '01',
                'MontoRet': 1.8,
                'TipoPagoRet': '03',
            },
        ],
    },
    'Complemento': {
        'Intereses': {
            'sistFinanciero': 'NO',
            'retiroAORESRetInt': 'SI',
            'operFinancDerivad': 'NO',
            'montIntNominal': 200,
            'montIntReal': 100,
            'perdida': 0,
        },
    },
}

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 = """
      {
        "CveRetenc": "16",
        "FechaExp": "2026-10-01T12:40:06",
        "DescRetenc": "No aplica",
        "LugarExpRetenc": "42501",
        "Folio": null,
        "Emisor": {
          "RfcEmisor": "EKU9003173C9",
          "NomDenRazSocE": "ESCUELA KEMPER URGATE",
          "RegimenFiscalE": "601"
        },
        "Receptor": {
          "Nacionalidad": "Nacional",
          "Nacional": {
            "RfcRecep": "CACX7605101P8",
            "NomDenRazSocR": "XOCHILT CASAS CHAVEZ",
            "CurpR": null,
            "DomicilioFiscalR": "36257"
          }
        },
        "Periodo": {
          "MesIni": 1,
          "MesFin": 1,
          "Ejerc": 2026
        },
        "Totales": {
          "MontoTotOperacion": 200,
          "MontoTotGrav": 200,
          "MontoTotExent": 0,
          "MontoTotRet": 1.8,
          "ImpRetenidos": [
            {
              "BaseRet": 200,
              "Impuesto": "01",
              "MontoRet": 1.8,
              "TipoPagoRet": "03"
            }
          ]
        },
        "Complemento": {
          "Intereses": {
            "sistFinanciero": "NO",
            "retiroAORESRetInt": "SI",
            "operFinancDerivad": "NO",
            "montIntNominal": 200,
            "montIntReal": 100,
            "perdida": 0
          }
        }
      }
    """;

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
{
    CveRetenc = "16",
    FechaExp = "2026-10-01T12:40:06",
    DescRetenc = "No aplica",
    LugarExpRetenc = "42501",
    Folio = (string?)null,
    Emisor = new
    {
        RfcEmisor = "EKU9003173C9",
        NomDenRazSocE = "ESCUELA KEMPER URGATE",
        RegimenFiscalE = "601",
    },
    Receptor = new
    {
        Nacionalidad = "Nacional",
        Nacional = new
        {
            RfcRecep = "CACX7605101P8",
            NomDenRazSocR = "XOCHILT CASAS CHAVEZ",
            CurpR = (string?)null,
            DomicilioFiscalR = "36257",
        },
    },
    Periodo = new
    {
        MesIni = 1,
        MesFin = 1,
        Ejerc = 2026,
    },
    Totales = new
    {
        MontoTotOperacion = 200,
        MontoTotGrav = 200,
        MontoTotExent = 0,
        MontoTotRet = 1.8,
        ImpRetenidos = new[]
        {
            new
            {
                BaseRet = 200,
                Impuesto = "01",
                MontoRet = 1.8,
                TipoPagoRet = "03",
            },
        },
    },
    Complemento = new
    {
        Intereses = new
        {
            sistFinanciero = "NO",
            retiroAORESRetInt = "SI",
            operFinancDerivad = "NO",
            montIntNominal = 200,
            montIntReal = 100,
            perdida = 0,
        },
    },
};

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 = {
  CveRetenc: '16',
  FechaExp: '2026-10-01T12:40:06',
  DescRetenc: 'No aplica',
  LugarExpRetenc: '42501',
  Folio: nil,
  Emisor: {
    RfcEmisor: 'EKU9003173C9',
    NomDenRazSocE: 'ESCUELA KEMPER URGATE',
    RegimenFiscalE: '601',
  },
  Receptor: {
    Nacionalidad: 'Nacional',
    Nacional: {
      RfcRecep: 'CACX7605101P8',
      NomDenRazSocR: 'XOCHILT CASAS CHAVEZ',
      CurpR: nil,
      DomicilioFiscalR: '36257',
    },
  },
  Periodo: {
    MesIni: 1,
    MesFin: 1,
    Ejerc: 2026,
  },
  Totales: {
    MontoTotOperacion: 200,
    MontoTotGrav: 200,
    MontoTotExent: 0,
    MontoTotRet: 1.8,
    ImpRetenidos: [
      {
        BaseRet: 200,
        Impuesto: '01',
        MontoRet: 1.8,
        TipoPagoRet: '03',
      },
    ],
  },
  Complemento: {
    Intereses: {
      sistFinanciero: 'NO',
      retiroAORESRetInt: 'SI',
      operFinancDerivad: 'NO',
      montIntNominal: 200,
      montIntReal: 100,
      perdida: 0,
    },
  },
}

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 Intereses

ERROR 01

Marcar mal "sistema financiero"

Causa

Ese campo cambia el tratamiento: no es lo mismo una institución financiera que una empresa que paga intereses de un préstamo.

Solución

Responde SI solo si quien paga es una institución del sistema financiero.

ERROR 02

Confundir interés nominal con interés real

Causa

Son dos montos distintos: el pagado y el ajustado por inflación.

Solución

Captura ambos, cada uno en su campo.

ERROR 03

Dejar vacía la pérdida

Causa

Si el ajuste por inflación vuelve negativo el interés real, esa diferencia es una pérdida.

Solución

Informa la pérdida cuando el interés real sea negativo; si no la hubo, va en 0.

Precio

Precio del complemento de Intereses

El módulo se contrata una vez y desbloquea los complementos disponibles. Funciona distinto a los complementos individuales: esto es lo que cambia.

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 Intereses

La 16, Intereses, del catálogo c_CveRetenc del SAT. Sobre esa clave se agrega el complemento de Intereses.

El nominal es el interés pagado, sin ajustar. El real es el que queda al descontar la inflación del periodo, y puede ser negativo; en ese caso se informa como pérdida.

Sí. Para eso existe el campo "sistema financiero": va en NO cuando quien paga no es una institución del sistema financiero, por ejemplo una empresa que liquida los intereses de un préstamo. Quien paga los intereses retiene a la tasa anual que fija la Ley de Ingresos de la Federación sobre el capital, sea o no del sistema financiero (artículos 54 y 135 de la Ley del ISR); el 20 % sobre los intereses nominales aplica a títulos valor no colocados entre el gran público inversionista (artículo 134). Confírmalo con tu contador.

No. Los intereses reales deducibles por créditos hipotecarios usan otra clave (la 23) y otro complemento, que no forma parte del Módulo de Retenciones de Facturama.

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 antes en el sandbox de Facturama, que no tiene costo ni validez fiscal.

Sí. Cuando una persona moral paga honorarios o arrendamiento a una persona física, el CFDI de ingresos de esta, con la retención desglosada, puede servir como constancia de retención; esa facilidad no aplica a los intereses: quien los paga y retiene sigue emitiendo el CFDI de Retenciones.

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

Solo para API

Plataformas tecnológicas

Marketplaces y apps que integran por API

Retenciones de ISR e IVA a quienes prestan servicios o venden a través de tu plataforma. Corresponde a la clave 26 de retención.

Ver complemento