Cancelar CFDI
Esta guia explica como cancelar un CFDI timbrado ante el SAT a traves de la API de FactuLink, incluyendo los motivos de cancelacion, sustitucion de comprobantes y verificacion del estatus.
Motivos de cancelacion SAT
El SAT requiere un motivo al cancelar un CFDI. Estos son los codigos validos:
| Codigo | Motivo | Requiere UUID de sustitucion |
|---|---|---|
| 01 | Comprobante emitido con errores con relacion | Si |
| 02 | Comprobante emitido con errores sin relacion | No |
| 03 | No se llevo a cabo la operacion | No |
| 04 | Operacion nominativa relacionada con factura global | No |
Cuando usar cada motivo
- 01 — Emitiste una factura con datos incorrectos y vas a generar una nueva que la sustituya. Debes proporcionar el UUID del CFDI sustituto.
- 02 — La factura tiene errores pero no vas a emitir un reemplazo.
- 03 — La operacion comercial no se concreto (e.g., el cliente cancelo la compra).
- 04 — Solo aplica para facturas globales y sus operaciones nominativas.
Importante: Por defecto, el receptor del CFDI debe aceptar la cancelación (el SAT le notifica y tiene 72 horas para aceptar o rechazar). Excepciones que no requieren aceptación del receptor:
- Monto total ≤ $1,000 MXN
- Receptor con RFC genérico (
XAXX010101000público en general,XEXX010101000extranjero)- Comprobantes de tipo Egreso (E), Pago (P), Traslado (T) o Nómina (N)
- Cancelaciones realizadas dentro del día siguiente a la emisión
Fuera de estos casos, motivos 01, 02 y 04 con receptor identificado y monto superior a $1,000 MXN requieren aceptación del receptor.
Cancelar un CFDI
POST/api/v1/cfdis/:uuid/cancel
Cancelacion sin sustitucion (motivo 02)
curl -X POST https://api.factulink.com.mx/api/v1/cfdis/6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d/cancel \
-H "Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b" \
-H "Content-Type: application/json" \
-d '{
"motivo": "02"
}'/api/v1/cfdis/:uuid/cancel200{
"id": "cfdi_01HQ3KD5R8N2YPTM4VBWG7E9CK",
"uuid": "6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d",
"status": "cancelado",
"cancelacion": {
"motivo": "02",
"uuid_sustitucion": null,
"fecha_cancelacion": "2026-04-05T16:10:00Z",
"acuse_sat": "ACEPTADA"
}
}Cancelacion con sustitucion (motivo 01)
Cuando cancelas con motivo 01, primero emite el CFDI correcto y luego cancela el original proporcionando el UUID del nuevo comprobante:
curl -X POST https://api.factulink.com.mx/api/v1/cfdis/6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d/cancel \
-H "Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b" \
-H "Content-Type: application/json" \
-d '{
"motivo": "01",
"uuid_sustitucion": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}'/api/v1/cfdis/:uuid/cancel200{
"id": "cfdi_01HQ3KD5R8N2YPTM4VBWG7E9CK",
"uuid": "6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d",
"status": "cancelado",
"cancelacion": {
"motivo": "01",
"uuid_sustitucion": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"fecha_cancelacion": "2026-04-05T16:15:00Z",
"acuse_sat": "ACEPTADA"
}
}Cancelacion en proceso
Si el monto del CFDI es mayor a $1,000 MXN, la cancelacion puede quedar pendiente de aceptacion por parte del receptor:
/api/v1/cfdis/:uuid/cancel202{
"id": "cfdi_01HQ3KD5R8N2YPTM4VBWG7E9CK",
"uuid": "6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d",
"status": "cancelacion_en_proceso",
"cancelacion": {
"motivo": "02",
"uuid_sustitucion": null,
"fecha_solicitud": "2026-04-05T16:20:00Z",
"acuse_sat": "EN_PROCESO",
"mensaje": "El receptor tiene 72 horas para aceptar o rechazar la cancelación"
}
}Verificar estado de cancelacion
Consulta el estatus de un CFDI ante el SAT en cualquier momento:
GET/api/v1/cfdis/:uuid/sat-status
curl -X GET https://api.factulink.com.mx/api/v1/cfdis/6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d/sat-status \
-H "Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b"/api/v1/cfdis/:uuid/sat-status200{
"uuid": "6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d",
"estado": "Cancelado",
"es_cancelable": "Cancelable sin aceptación",
"estatus_cancelacion": "Cancelado sin aceptación",
"codigo_estatus": "S - Comprobante obtenido satisfactoriamente",
"consultado_at": "2026-04-05T16:30:00Z"
}Posibles valores de estado
| Estado | Descripcion |
|---|---|
Vigente | El CFDI esta activo y valido |
Cancelado | El CFDI fue cancelado exitosamente |
No Encontrado | El UUID no existe en los registros del SAT |
Posibles valores de es_cancelable
| Valor | Descripcion |
|---|---|
Cancelable sin aceptacion | Se puede cancelar directamente |
Cancelable con aceptacion | Requiere aceptacion del receptor |
No cancelable | No se puede cancelar (ya esta cancelado o tiene dependencias) |
Siguientes pasos
- Emitir CFDI — Guia completa para timbrar comprobantes
- Subir Certificado — Gestionar tus CSDs
- Referencia API — Documentacion completa de todos los endpoints