Cómo Cancelar una Factura en el SAT (CFDI 4.0)
6 de abril de 2026
Cancelar una factura en México suena como algo que debería tomar un clic. Seleccionas el CFDI, confirmas, y listo. Pero desde que entró en vigor el CFDI 4.0, el SAT convirtió la cancelación en un proceso que requiere motivos específicos, aprobación del receptor en la mayoría de los casos, y plazos que si no respetas te dejan con un comprobante que no puedes tocar. He visto equipos de desarrollo perder días depurando cancelaciones que fallan silenciosamente porque nadie leyó las reglas completas. Esta guía las cubre todas.
Por qué cambió la cancelación con CFDI 4.0
Con la versión 3.3 del CFDI, cancelar era casi trivial. Enviabas la solicitud al PAC, el PAC la reportaba al SAT, y el comprobante desaparecía. El problema era obvio: un emisor podía cancelar facturas sin que el receptor se enterara. Imagina que le facturas a un cliente, el cliente registra esa factura como deducible, y tres meses después tú la cancelas. El cliente queda con una deducción fantasma y un potencial problema con el SAT.
El CFDI 4.0 cerró esa puerta. Ahora la cancelación requiere un motivo obligatorio, y en la mayoría de los escenarios el receptor debe aceptar la cancelación antes de que surta efecto. El SAT también impuso plazos estrictos: no puedes cancelar facturas indefinidamente.
La cancelación de un CFDI no lo borra. El comprobante sigue existiendo en la base de datos del SAT con estatus "Cancelado". Cualquier auditoría puede ver que existió y fue cancelado. La cancelación simplemente le quita validez fiscal.
Motivos de cancelación
Desde CFDI 4.0, cada solicitud de cancelación debe incluir una clave de motivo. No es opcional. Si tu sistema envía una cancelación sin motivo, el PAC la rechaza antes de que llegue al SAT.
| Clave | Motivo | Cuándo usarlo |
|---|---|---|
01 | Comprobante emitido con errores con relación | Hay errores en el CFDI y vas a emitir uno nuevo que lo sustituye. Debes proporcionar el UUID del CFDI sustituto. |
02 | Comprobante emitido con errores sin relación | Hay errores pero no vas a emitir un reemplazo. El CFDI simplemente se cancela. |
03 | No se llevó a cabo la operación | La transacción nunca se concretó. Se facturó algo que al final no se vendió ni se entregó. |
04 | Operación nominativa relacionada en factura global | El receptor pidió su factura individual para una operación que ya estaba incluida en una factura global. |
El motivo 01 tiene una trampa que no es evidente: necesitas proporcionar el UUID del CFDI que sustituye al cancelado. Esto significa que primero debes timbrar el nuevo CFDI y después cancelar el anterior usando el UUID del nuevo. El orden importa. Si intentas cancelar primero sin tener el UUID sustituto, la solicitud falla.
Motivo 01: el flujo de sustitución
Este es el motivo más común en sistemas automatizados. Un CFDI tiene un error - RFC incorrecto, monto equivocado, uso de CFDI mal seleccionado - y necesitas emitir uno corregido.
Identificar el error en el CFDI original#
Determina qué campo tiene el error. Si es un error que no afecta la validez fiscal (como la descripción de un concepto), evalúa si realmente necesitas cancelar o si puedes dejarlo como está.
Timbrar el nuevo CFDI corregido#
Genera y timbra el CFDI con los datos correctos. Este nuevo comprobante debe relacionar al CFDI anterior usando el tipo de relación 04 (Sustitución de los CFDI previos). El PAC te devuelve el UUID del nuevo CFDI.
Solicitar la cancelación del CFDI original#
Envía la solicitud de cancelación con motivo 01 e incluye el UUID del nuevo CFDI como folio de sustitución. El PAC valida que el UUID sustituto exista y esté vigente antes de procesar la solicitud.
Esperar la aceptación (si aplica)#
Si el CFDI entra en el flujo con aceptación del receptor, deberás esperar a que el receptor acepte. Mientras tanto, ambos CFDIs coexisten: el original en proceso de cancelación y el nuevo ya vigente.
Cancelación sin aceptación del receptor
No todos los CFDIs requieren que el receptor apruebe la cancelación. El SAT definió excepciones claras donde la cancelación procede de forma directa.
Se cancela sin aceptación
- CFDI con monto total igual o menor a $1,000 MXN
- CFDI de tipo Nómina
- CFDI de tipo Egreso (notas de crédito)
- CFDI de tipo Traslado (carta porte sin valor fiscal)
- CFDI emitidos al RFC genérico
XAXX010101000(público en general) - CFDI emitidos al RFC de operaciones con el extranjero
XEXX010101000 - CFDI cancelados dentro de las primeras 24 horas después de su emisión
Requiere aceptación
Todo lo que no caiga en la lista anterior. En la práctica, esto cubre la mayoría de las facturas de ingreso entre empresas, que son precisamente las que más se cancelan.
Si tu sistema maneja facturación B2B con montos superiores a $1,000 MXN, necesitas implementar el flujo completo con aceptación del receptor. No hay atajos.
La ventana de 24 horas para cancelar sin aceptación se calcula desde la fecha de timbrado (la que aparece en el Timbre Fiscal Digital), no desde la fecha de emisión del CFDI. Son fechas diferentes si hay un desfase entre la generación del XML y el timbrado.
Flujo de cancelación con aceptación del receptor
Cuando el CFDI no cae en ninguna excepción, el receptor tiene que aprobar la cancelación. Este flujo involucra al SAT como intermediario a través del Buzón Tributario.
Tres puntos que este diagrama no hace obvios pero que importan en producción:
El receptor tiene 3 días hábiles para responder, no 3 días naturales. Los fines de semana y días festivos no cuentan. En diciembre, con los días festivos, una cancelación puede quedarse en limbo más de una semana.
Si el receptor rechaza, el emisor tiene una sola oportunidad adicional para volver a solicitar la cancelación del mismo CFDI. Si el receptor rechaza por segunda vez, el CFDI queda vigente permanentemente. La única salida es negociar directamente con el receptor fuera del sistema del SAT.
La notificación al receptor llega por Buzón Tributario. Si el receptor no tiene su Buzón Tributario activo o no lo revisa, no se entera. Pero los 3 días corren igual, y al vencer el plazo la cancelación se acepta automáticamente. Esto genera conflictos comerciales reales: "me cancelaron una factura sin mi consentimiento" es una queja frecuente que en realidad significa "no revisé mi Buzón Tributario".
Estatus de un CFDI durante la cancelación
Un CFDI puede tener cuatro estatus diferentes ante el SAT. Tu sistema necesita manejarlos todos.
| Estatus | Código | Significado |
|---|---|---|
| Vigente | S - Comprobante obtenido satisfactoriamente | El CFDI está activo y tiene validez fiscal |
| Cancelado | 201 - Solicitud de cancelación exitosa | La cancelación se procesó correctamente |
| En proceso de cancelación | 202 - Solicitud de cancelación en proceso | Se envió la solicitud pero el receptor no ha respondido |
| Cancelación rechazada | 203 - UUID no corresponde o rechazo del receptor | La cancelación no procedió |
Cuando consultas el estatus de un CFDI vía API y recibes 202, no asumas que se va a cancelar. El receptor todavía puede rechazar. Tu sistema debe implementar un mecanismo de polling o webhook para detectar cuando el estatus cambia de "En proceso" a "Cancelado" o "Vigente" (rechazado).
Plazos para cancelar un CFDI
El SAT no te deja cancelar facturas cuando quieras. Hay una ventana de tiempo y si la pasas, el CFDI queda vigente para siempre.
La regla general: puedes cancelar un CFDI hasta la fecha límite para presentar la declaración anual del ejercicio fiscal al que pertenece el comprobante.
Hay una excepción crítica: si presentas tu declaración anual antes de la fecha límite, la ventana de cancelación se cierra en ese momento. No importa que falten meses para el vencimiento. Una vez presentada la declaración, los CFDIs de ese ejercicio quedan sellados.
Cancelar un CFDI vía API
La cancelación por API sigue el mismo flujo que por el portal del SAT, pero automatizado a través de un PAC. Tu sistema envía la solicitud al PAC, el PAC la transmite al SAT, y el SAT responde con el estatus.
Los datos que necesitas enviar para cualquier cancelación:
- RFC del emisor - Quien emitió el CFDI
- UUID del CFDI - El folio fiscal que quieres cancelar
- Motivo de cancelación - Clave
01,02,03o04 - Folio de sustitución - Solo obligatorio cuando el motivo es
01. Es el UUID del nuevo CFDI que reemplaza al cancelado
El PAC te devuelve un código de estatus que indica si la cancelación fue inmediata, si quedó en proceso de aceptación, o si fue rechazada. Tu código debe manejar los tres escenarios.
Si necesitas integrar cancelación de CFDI en tu aplicación, Fiscalapi expone endpoints REST que abstraen la complejidad del PAC y el SAT. Consulta la documentación de la API para los detalles de implementación, o revisa los SDKs en GitHub si prefieres una librería lista para usar.
Errores comunes al cancelar
Después de depurar cientos de cancelaciones fallidas, estos son los errores que se repiten. Si tu sistema de cancelación está fallando, probablemente es uno de estos.
Cancelación y su impacto en la contabilidad
Cancelar un CFDI no es solo un tema técnico. Tiene consecuencias fiscales y contables que tu sistema debería reflejar.
Cuando cancelas una factura de ingreso, el ingreso asociado desaparece de tu declaración de impuestos de ese periodo. Si ya reportaste ese ingreso en una declaración mensual provisional, necesitas presentar una declaración complementaria para ajustar las cifras. Lo mismo aplica para el receptor: si ya dedujo esa factura, pierde la deducción.
Para facturas con uso de CFDI que implica deducción directa (como G03 Gastos en general), la cancelación puede afectar el cálculo de ISR e IVA acreditable del receptor. Tu sistema debería al menos notificar al usuario cuando cancela un CFDI que fue emitido hace más de 30 días, porque es probable que ambas partes ya hayan reportado esa operación en sus declaraciones.
Si cancelas un CFDI con motivo 01 (sustitución), el nuevo CFDI debe timbrase en el mismo ejercicio fiscal que el original. Emitir el sustituto en un ejercicio diferente genera discrepancias entre lo declarado y lo facturado que son difíciles de corregir.
Checklist de implementación
Si estás construyendo un módulo de cancelación de CFDI, estos son los requisitos técnicos mínimos que debe cubrir.
Solicitar y validar el motivo de cancelación antes de enviar la solicitud al PAC
Exigir el UUID sustituto cuando el motivo es 01, y validar que ese UUID exista y esté vigente
Detectar si el CFDI tiene complementos de pago relacionados y forzar su cancelación previa
Manejar los tres posibles estatus de respuesta: cancelado (201), en proceso (202), y rechazado
Implementar polling o webhooks para resolver solicitudes que quedan en estatus 202
Validar que el CFDI esté dentro del plazo fiscal de cancelación antes de iniciar el proceso
Registrar en base de datos el motivo, fecha de solicitud, y estatus final de cada cancelación para auditoría