Skip to Content
GuíasCancelar CFDI

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:

CodigoMotivoRequiere UUID de sustitucion
01Comprobante emitido con errores con relacionSi
02Comprobante emitido con errores sin relacionNo
03No se llevo a cabo la operacionNo
04Operacion nominativa relacionada con factura globalNo

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 (XAXX010101000 público en general, XEXX010101000 extranjero)
  • 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"
}'
POST/api/v1/cfdis/:uuid/cancel200
Response
{
"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"
}'
POST/api/v1/cfdis/:uuid/cancel200
Response
{
"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:

POST/api/v1/cfdis/:uuid/cancel202
Response
{
"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"
GET/api/v1/cfdis/:uuid/sat-status200
Response
{
"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

EstadoDescripcion
VigenteEl CFDI esta activo y valido
CanceladoEl CFDI fue cancelado exitosamente
No EncontradoEl UUID no existe en los registros del SAT

Posibles valores de es_cancelable

ValorDescripcion
Cancelable sin aceptacionSe puede cancelar directamente
Cancelable con aceptacionRequiere aceptacion del receptor
No cancelableNo se puede cancelar (ya esta cancelado o tiene dependencias)

Siguientes pasos

Last updated on