CANCELA TU COMPROBANTE
La API Comercial te permite cancelar tus Comprobantes Fiscales Digitales (CFDI) timbrados a través de la API ante el Servicio de Administación Tributaria (SAT) de acuerdo al esquema de cancelación en vigor desde el 1 de Noviembre de 2018.
El proceso de cancelación a partir del 2022 tendrá los siguientes cambios:
- Será necesario señalar el motivo de la cancelación de los CFDI. El catálogo del SAT indica 4 posibles motivos de cancelación.
- En algunos casos, se deberá indicar el folio fiscal del CFDI que sustituye al cancelado.
- Los CFDI sólo podrán ser cancelados dentro del ejercicio fiscal en el que fueron emitidos.
Contenido de esta página
En esta página encontrarás el siguiente contenido:
- Para cancelar tu CFDI
- Para consultar tus CFDI pendientes de aceptación
- Para verificar la vigencia del CFDI
Para obtener más información sobre las características del proceso de cancelación del SAT, te recomendamos consultar la siguiente guía fiscal:
Para cancelar tu comprobante
Para los CFDI emitidos vía API, puedes iniciar el proceso de cancelación mediante cualquiera de las siguientes vías:
- La API Comercial
- El portal web de Enlace Fiscal
- El portal del SAT
Esta sección se enfoca en el proceso de cancelación mediante la API Comercial para que puedas automatizar las peticiones de cancelaciones desde tu sistema o aplicación.
Requisitos
Este tutorial asume que ya tienes los siguientes elementos:
- Una cuenta configurada con la modalidad de API activada. Si aún no tienes tu cuenta configurada, consulta la Guía de Inicio Rápido.
- Tus credenciales para consumir la API. Para más información sobre cómo obtener y utilizar tus credenciales en el encabezado de tu petición, consulta la sección de Autenticación.
- Un CFDI previamente emitido con la API. Si aún no has generado un CFDI, consulta el tutorial para timbrar tu comprobante.
Un CFDI tiene que estar registrado ante el SAT antes de poderlo cancelar en el entorno de producción. Es recomendable esperar al menos 5 minutos entre la petición de timbrado y la petición de cancelación.
Puedes realizar una petición de cancelación de CFDI en los siguientes casos:
- Si tienes una cuenta gratis: Puedes cancelar hasta 5 CFDI con validez fiscal dentro de los 30 días después de la creación de la cuenta gratis y antes de pasar al esquema de prepago. Además, puedes cancelar una cantidad ilimitada de CFDI sin validez fiscal para probar la integración de la API con el entorno de prueba.
- Si tienes saldo en tu cuenta: Puedes cancelar la cantidad de CFDI que requieras mientras tengas saldo en tu cuenta para consumir la API, tanto en el entorno de prueba como en el entorno de producción. No se cobra la cancelación por comprobante. Para consultar tu saldo disponible, puedes realizar una petición al endpoint
POST https://api.enlacefiscal.com/v6/obtenerSaldo.
Petición POST cancelarCfdi
En este tutorial se muestra cómo hacer una petición API de cancelación de un CFDI timbrado cancelable en el entorno de producción. Si quieres cancelar un CFDI emitido en el entorno de prueba, solo necesitas cambiar el valor del parámetro modo a debug.
Endpoint
POST https://api.enlacefiscal.com/v6/cancelarCfdi
Elementos de la petición
La siguiente tabla describe los parámetros en formato JSON que debes enviar dentro de tu petición.
| Parámetro | Tipo de Dato | Ocurrencia | Descripción |
|---|---|---|---|
Solicitud |
Objeto | Requerido | Encabezado de la solicitud. |
modo |
Enum | Opcional | Entorno de la API en la que se va a generar el CFDI, siendo las opciones posibles: debug o produccion. El valor predeterminado es produccion. |
rfc |
String | Requerido | RFC del emisor del CFDI. No debe contener guiones ni espacios. |
accion |
Enum | Requerido | Método que queremos consumir vía la API. El valor requerido para este endpoint es cancelarCfdi. |
CFDI |
Objeto | Requerido | Encabezado del comprobante. |
serie |
String | Requerido | Serie de comprobantes del CFDI que se desea cancelar. Se trata de un identificador interno que fue asignado a un tipo de comprobante para distinguir rápidamente entre diferentes conjuntos de comprobantes. |
folio |
Number | Requerido | Folio interno del CFDI que se desea cancelar. Se trata de un código interno que tu sistema o aplicación asignó a un CFDI único para identificarlo fácilmente. |
justificacion |
String | Opcional | Motivo por el cual se va a cancelar el comprobante. La información que se indica en este campo no es enviada al SAT. Solo sirve para control interno. |
Ejemplo de petición
El siguiente es un código de ejemplo de la petición de cancelación de un CFDI:
curl "https://api.enlacefiscal.com/v6/probarConexion"
--request "POST"
--header "Content-Type:application/json"
--header "x-api-key:<X-API-KEY>"
--user "<USUARIO>:<TOKEN>"
--data '{
{
"Solicitud": {
"modo": "produccion",
"rfc": "AAA010101AAA",
"accion": "cancelarCfdi",
"CFDi": {
"serie": "B",
"folio": 798,
"justificacion": "Error en descripción de producto"
}
}
}
}
Respuesta
Una petición de cancelación puede tener múltiples respuestas dependiendo del escenario del esquema de cancelación:
- CFDI no cancelable:
- CFDI cancelable sin aceptación: La cancelación del CFDI se produce de manera instantánea, siempre y cuando el servicio del SAT se encuentre disponible. Si el servicio del SAT no se encuentra disponible, puedes programar la cancelación del CFDI via la API para el futuro.
- CFDI cancelable con aceptación: La cancelación puede tardar hasta 3 días hábiles porque requiere la aceptación del receptor del CFDI para ser cancelada. En caso de que el receptor no responda a la solicitud de cancelación dentro de los 3 días hábiles, el CFDI se cancela por plazo vencido.
La respuesta que recibes de nuestra API está en formato JSON. El estado de cancelación se encuentra en la respuesta de la petición.
Elementos de la respuesta
Los elementos que componen la respuesta son:
| Elemento | Descripción | Tipo |
|---|---|---|
AckEnlaceFiscal |
Nombre del objeto confirmando la recepción exitosa de la petición. | Object |
numeroReferencia |
Número de referencia que distingue cada petición. Permite identificar la petición en caso de error. | Number |
estatusDocumento |
Información sobre el éxito o el rechazo de la petición. Los dos valores posibles son: "aceptado" o "rechazado". |
String |
fechaMensaje |
Fecha de la petición. | String |
version |
Versión del formato de respuesta de la API. | String |
estatusCancelacion |
Vigencia del CFDI. Los valores posibles son Vigente o Cancelado. |
String |
fechaCancelacion |
Fecha y hora en la que el CFDI fue cancelado ante el SAT. Para los CFDI vigentes, el valor es null. |
String |
uuid |
Folio Fiscal que asigna el SAT al CFDI que acaba de cancelar. | String |
folio |
Número de folio interno del CFDI. Se muestra en la respuesta solo como referencia ya que es el mismo dato que está en la petición. | String |
serie |
Serie del CFDI. Se muestra en la respuesta solo como referencia ya que es el mismo dato que está en la petición. | String |
infoCancelacion |
Listado de la información del proceso de cancelación. | Array |
fechaSolicitud |
Fecha y hora en la que se hizo la solicitud de cancelación ante el SAT. | String |
justificacion |
Justificación de la solicitud de cancelación. Se muestra en la respuesta solo como referencia ya que es el mismo dato que está en la petición. | String |
fechaLimiteAceptacion |
Fecha límite que tiene el receptor del CFDI para aceptar o rechazar la solicitud de cancelación. Para los CFDI sin aceptación, el valor es null. |
String |
estatus |
Estatus del proceso de cancelación según el caso de CFDI. Los valores posibles son:
|
String |
fechaUltimaConsultaSat |
Ultima fecha en la que la API verificó el estatus del proceso de cancelación ante el SAT. Para los CFDI sin aceptación, el valor es null. |
String |
fechaCancelacion |
Fecha y hora en la que el CFDI fue cancelado ante el SAT. Para los CFDI vigentes, el valor es null. |
String |
selloSat |
Sello Digital del SAT que sirve como firma electrónica comprobando la efectiva cancelación del CFDI. | String |
Ejemplo de respuesta
El siguiente es un código de ejemplo de la respuesta a la petición de cancelación de un CFDI cancelable sin aceptación. El CFDI, al no requerir la aprobación del receptor, ha sido cancelado de manera inmediata ante el SAT.
{
"AckEnlaceFiscal": {
"numeroReferencia": 1008,
"estatusDocumento": "aceptado",
"fechaMensaje": "2018-08-17 12:27:53",
"version": "1.0",
"estatusCancelacion": "Cancelado",
"fechaCancelacion": "2018-08-17T12:27:52",
"uuid": "4E14B6AE-4F94-4227-AF3F-3BD743C5D207",
"folio": 1,
"serie": "FAAPI",
"infoCancelacion": [
{
"fechaSolicitud": null,
"justificacion": "Error en el monto",
"fechaLimiteAceptacion": null,
"estatus": "Cancelado sin aceptación",
"fechaUltimaConsultaSat": null,
"fechaCancelacion": "2018-08-17T12:27:52",
"selloSat": "SLGmjdlsKy7WEM4i4SkMrrKl+1Wi8jDA7g4BFSGYwNPjL4WDSXuVF5ISPOGywufSaPDwx8Tt+dw=="
}
]
}
}
En el ejemplo anterior, destacamos algunos elementos:
"estatusCancelacion": "Cancelado"Este elemento nos permite confirmar que el CFDI ha sido efectivamente cancelado ante el SAT."fechaSolicitud": nullEste elemento solo tiene valor para los CFDI cancelables con aceptación, ya que nos permite definir la fecha límite de aceptación de la solicitud de cancelación.
Para los CFDI cancelables sin aceptación, la cancelación se realiza de manera inmediata y este elemento no tiene valor."fechaLimiteAceptacion": nullEste elemento solo tiene valor para los CFDI cancelables con aceptación que tienen un plazo de 3 días hábiles para ser aprobados.
En el caso de los CFDI cancelables sin aceptación, no se requiere la aprobación del receptor del CFDI y la petición no tiene fecha límite de aceptación. Este elemento no tiene valor."estatus": "Cancelado sin aceptación"Este elemento indica el tipo de cancelación según el esquema de cancelación del SAT. En este caso, el CFDI ha sido cancelado sin aceptación."fechaUltimaConsultaSat": nullPara los CFDI cancelables sin aceptación, la cancelación se realiza de manera inmediate ante el SAT. En este ejemplo, este elemento no tiene valor."fechaCancelacion": "2018-08-17T12:27:52"Este elemento confirma la fecha de cancelación del CFDI."selloSat": "SLGmjdlsKy7WEM4i4SkMrrKl+1Wi8jDA7g4BFSGYwNPjL4WDSXuVF5ISPOGywufSaPDwx8Tt+dw=="Este elemento muestra el sello digital del SAT que confirma la cancelación del CFDI.
Para consultar más ejemplos de respuesta a la petición POST cancelarCfdi, descarga el archivo ZIP Cancelaciones.
Para consultar tus CFDI pendientes de aceptación
Para los Comprobantes Fiscales Digitales (CFDI) cancelables con aceptación, la solicitud de cancelación puede tardar hasta 3 días hábiles para ser aceptada o rechazada por el receptor del CFDI. Puedes consultar el estatus de la solicitud mediante cualquiera de las siguientes vías:
- La API Comercial
- El portal web de Enlace Fiscal
- El portal del SAT
Esta sección te permite conocer cómo consultar todos CFDI pendientes de aceptación con una única petición a la API Comercial.
Requisitos
Este tutorial asume que ya tienes los siguientes elementos:
- Una cuenta configurada con la modalidad de API activada. Si aún no tienes tu cuenta configurada, consulta la Guía de Inicio Rápido.
- Tus credenciales para consumir la API. Para más información sobre cómo obtener y utilizar tus credenciales en el encabezado de tu petición, consulta la sección de Autenticación.
- Al menos un CFDI en proceso de cancelación con la API. Si aún no has cancelado un CFDI, consulta el tutorial para cancelar tu comprobante.
Puedes realizar una petición de consulta de CFDI pendientes de aceptación en los siguientes casos:
- Si tienes una cuenta gratis: Puedes consultar tus CFDI pendientes de aceptación dentro de los 30 días después de la creación de la cuenta gratis y antes de pasar al esquema de prepago.
- Si tienes saldo en tu cuenta: Puedes consultar tus CFDI pendientes de aceptación mientras tengas saldo en tu cuenta, tanto en el entorno de prueba como en el entorno de producción. Para consultar tu saldo disponible, puedes realizar una petición al endpoint
POST https://api.enlacefiscal.com/v6/obtenerSaldo.
Petición POST consultaDeCancelacionesConAceptacion
Endpoint
POST https://api.enlacefiscal.com/v6/consultaDeCancelacionesConAceptacion
Elementos de la petición
La siguiente tabla describe los parámetros en formato JSON que debes enviar dentro de tu petición.
| Parámetro | Tipo de Dato | Ocurrencia | Descripción |
|---|---|---|---|
Solicitud |
Objeto | Requerido | Encabezado de la solicitud. |
modo |
Enum | Opcional | Entorno de la API en la que se va a generar el CFDI, siendo las opciones posibles: debug o produccion. El valor predeterminado es produccion. |
Ejemplo de petición
El siguiente es un código de ejemplo de la petición para consultar los CFDI cancelables pendientes de aceptación.
curl "https://api.enlacefiscal.com/v6/consultaDeCancelacionesConAceptacion"
--request "POST"
--header "Content-Type:application/json"
--header "x-api-key:<X-API-KEY>"
--user "<USUARIO>:<TOKEN>"
--data '{
}
Respuesta
La respuesta que recibes de nuestra API está en formato JSON. La información sobre la estatus del proceso de cancelación de tus CFDI cancelables con aceptación se encuentra en la respuesta de la petición.
Elementos de la respuesta
Los elementos que componen la respuesta son los siguientes:
| Elemento | Descripción | Tipo |
|---|---|---|
AckEnlaceFiscal |
Nombre del objeto confirmando la recepción exitosa de la petición. | Object |
numeroReferencia |
Número de referencia que distingue cada petición. Permite identificar la petición en caso de error. | Number |
estatusDocumento |
Información sobre el éxito o el rechazo de la petición. Los dos valores posibles son: "aceptado" o "rechazado". | String |
fechaMensaje |
Fecha de la petición. | String |
version |
Versión del formato de respuesta de la API. | String |
totalCancelacionesConAceptacion |
Número total de CFDI cancelables con aceptación para los cuales se ha iniciado el proceso de cancelación con la API en los últimos . | Number |
cancelacionesConAceptacion |
Listado de los CFDI cancelables con aceptación para los cuales se ha iniciado el proceso de cancelación con la API en los últimos . Dentro del listado se encuentran objetos con la información general de cada CFDI y el estatus de su proceso de cancelación. | Array |
fechaSolicitud |
Fecha y hora en la que se hizo la solicitud de cancelación ante el SAT. | String |
tipoComprobante |
Tipo de comprobante del CFDI. | String |
serie |
Serie del CFDI. | String |
folioInterno |
Número de folio interno del CFDI. | Number |
folioFiscalUUID |
Folio Fiscal que asigna el SAT al CFDI cuando fue timbrado. | String |
fechaEmision |
Fecha de emisión del CFDI. | String |
rfcReceptor |
RFC del receptor del CFDI que debe aprobar la solicitud de cancelación. | String |
nombreReceptor |
Nombre del receptor del CFDI que debe aprobar la solicitud de cancelación. | String |
monto |
Importe total del CFDI que se está cancelando. | String |
justificacion |
Justificación de la solicitud de cancelación. Se muestra en la respuesta solo como referencia ya que es el mismo dato que está en la petición. | String |
fechaLimiteAceptacion |
Fecha límite que tiene el receptor del CFDI para aceptar o rechazar la solicitud de cancelación. | String |
estatus |
Estatus del proceso de cancelación según el caso de CFDI. Los valores posibles para los CFDI cancelable con aceptación son:
| String |
fechaUltimaConsultaSat |
Ultima fecha en la que la API verificó el estatus del proceso de cancelación ante el SAT. | String |
fechaCancelacion |
Fecha y hora en la que el CFDI fue cancelado ante el SAT. Para los CFDI aún vigentes, el valor es null. |
String |
selloSat |
Sello Digital del SAT que sirve como firma electrónica comprobando la efectiva cancelación del CFDI. Para los CFDI aún vigentes, el valor es null. |
String |
Ejemplo de respuesta
El siguiente código muestra un ejemplo de respuesta a la petición POST consultaDeCancelacionesConAceptacion.
{
"AckEnlaceFiscal": {
"numeroReferencia": 1586,
"estatusDocumento": "aceptado",
"fechaMensaje": "2018-08-17 18:04:02",
"version": "1.0",
"totalCancelacionesConAceptacion": 2,
"cancelacionesConAceptacion": [
{
"fechaSolicitud": "2018-08-17 12:15:29",
"tipoComprobante": "Factura",
"serie": "FA",
"folioInterno": 325,
"folioFiscalUUID": "8743bff7-8b45-4947-97bb-4a25daaa",
"fechaEmision": "2018-08-15 15:58:13",
"rfcReceptor": "AAA010101AAA",
"nombreReceptor": "Empresa Demo S.A. de C.V.",
"monto": "5800.00",
"justificacion": "Error en el monto",
"fechaLimiteAceptacion": "2018-08-22 23:59:59",
"estatus": "En proceso",
"fechaUltimaConsultaSat": "2018-08-17 12:25:00",
"fechaCancelacion": null,
"selloSat": null
},
{
"fechaSolicitud": "2018-08-17 12:47:48",
"tipoComprobante": "Recibo de Honorarios",
"serie": "RH",
"folioInterno": 52,
"folioFiscalUUID": "3e6344ea-7e02-4d6b-9720-7974fd92",
"fechaEmision": "2018-08-01 13:14:23",
"rfcReceptor": "AAA010101AAA",
"nombreReceptor": "Empresa Demo S.A. de C.V.",
"monto": "12000.00",
"justificacion": "La fecha de emisión es incorrecta",
"fechaLimiteAceptacion": "2018-08-22 23:59:59",
"estatus": "Cancelado aceptado",
"fechaUltimaConsultaSat": "2018-08-17 12:50:00",
"fechaCancelacion": "2018-08-17 12:49:00",
"selloSat": "SLGmjdlsKy7WEM4i4SkMrrKl+1Wi8jDA7g4BFSGYwNPjL4WDSXuVF5ISPOGywufSaPDwx8Tt+dw=="
}
]
}
}
Para verificar la vigencia del CFDI
Puedes verificar la vigencia del CFDI cancelado en el entorno de producción directamente en el portal del SAT ingresando los siguientes datos:
- Folio fiscal del CFDI. Puedes encontrar esta información en la respuesta de la API bajo la etiqueta
folioFiscalUUID. - RFC del emisor
- RFC del receptor
Para obtener información detallada sobre un CFDI via la API Comercial, incluyendo su vigencia y el estado de cancelación, ve al tutorial Consulta tus comprobantes.
¿Tienes preguntas?
Consulta nuestros artículos con preguntas frecuentes sobre facturación electrónica o contáctanos por correo.