DOCUMENTACION API COMERCIAL

Guías para facturar desde tu sistema o aplicación

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.

A partir del 1 de enero de 2022 entra en vigor la versión 4.0 del CFDI, existiendo un periodo de convivencia entre la versión 3.3 y la versión 4.0 el cual comprende del 1 de enero al 30 de abril de 2022.

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.
Enlace Fiscal está trabajando para actualizar la API Comercial y minimizar el impacto de estos cambios en tu sistema.

Contenido de esta página

En esta página encontrarás el siguiente contenido:

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:

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.

La cancelación de un CFDI es irreversible. Si la transacción económica, entrega de un bien o servicio sigue vigente, se deberá generar un nuevo CFDI.

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.

Un CFDI solo puede ser cancelado en el mismo entorno en el que fue generado.
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.
Para obtener información detallada de cada etiqueta de la petición, consulta la referencia de la API Comercial de Enlace Fiscal.
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.

Si el servicio del SAT falla, Enlace Fiscal reintentará cancelar los CFDI de forma automática.
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:
  • Para CFDI cancelable sin aceptación:
    • Cancelado sin aceptación
    • Vigente????
  • Para CFDI cancelable con aceptación:
    • Cancelado aceptado
    • Cancelado plazo vencido
    • En proceso
    • Vigente????
  • Para CFDI no cancelable:
    • Vigente???
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": null Este 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": null Este 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": null Para 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:

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:
  • Cancelado aceptado
  • Cancelado plazo vencido
  • En proceso
  • Vigente
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
Los CFDI generados en el entorno de prueba solo pueden ser cancelados en el entorno de prueba. No se podrá verificar la vigencia del CFDI cancelado en el entorno de prueba en el portal del SAT.

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.