Referencia
- https://api.csfacturacion.com/cscancelacion/v4
API REST application/json
Credenciales de contratación vigente mediante Http Basic
Cancelación de CFDI y CFDI de Retenciones
/cancelar Solicitar Cancelación de CFDI
Petición
Tipo
application/json
Cuerpo
Campo | Descripción | Requerido |
---|---|---|
uuid | El UUID de la factura a cancelar | Sí |
key | La llave privada del CSD en base64 (una línea) | Sí |
cer | El certificado del CSD en base64 (una línea) | Sí |
keyPass | La contraseña de la llave privada | Sí |
tipoPeticion | Debe ser "reten" o "cfdi" | Sí |
emailEmisor | Email del emisor (para la notificación) | No |
emailReceptor | Email del receptor (para la notificación) | No |
rfcEmisor | RFC del emisor de la factura a cancelar | Sí |
rfcReceptor | RFC del receptor de la factura a cancelar | Sí |
total | Total de la factura a cancelar | Sí |
tipoComprobante | Tipo de Factura (I, N, T, P, E) No aplica retenciones | Sí |
motivo | Motivo o justificación de la cancelación | Sí |
acuse | Requiere acuse de cancelación (SI/NO) | Sí |
uuidRelacion | UUID de la factura que se sustituye mediante 01 | No |
POST /cscancelacion/v4/cancelar HTTP/1.1
Content-Type: application/json
Host: api.csfacturacion.com
Content-Length: 325
{
"uuid": "4AA1138B-BF2E-0143-B7D0-CC2AA44E1DC2",
"key": "",
"cer": "",
"keyPass": "pass",
"tipoPeticion": "cfdi",
"emailEmisor": "foo@bar.com",
"emailReceptor": "foo@bar.com",
"rfcReceptor": "XAXX010101000",
"rfcEmisor": "AAA010101AAA",
"total": "138132",
"motivo": "02",
"acuse": "SI",
"tipoComprobante": "I"
}
Response
200 OK
application/json
{
"codigo": 201,
"mensaje": "Solicitud de cancelación recibida con exito",
"acuse": "${BASE_64_ACUSE}",
"fechaOperacion": "2023-04-13T17:03:48",
"fechaCancelacion": "2023-04-13T17:03:48"
}
422 Certificado Inválido
Tipo
application/json
Cuerpo
{
"codigo": 320,
"mensaje": "320 Certificado no estaba vigente a la fecha de cancelacion (expiracion); Certificado no es el RFC del Emisor; rfc cert=CSO1304138Z0 rfc emisor=AAA010101AAA; Certificado Apocrifo;"
}
422 Datos Inválidos
Tipo
application/json
Cuerpo
{
"codigo": 422,
"mensaje": "Error de validación",
"errores": {
"tipoComprobante": "tipoComprobante must be in `{ \"I\", \"E\", \"P\", \"N\", \"T\" }`"
}
}
Cuerpo de la respuesta
Campo | Descripción |
---|---|
codigo | Código de la operación (consulte referencia abajo) |
mensaje | Mensaje descriptivo del código de operación |
acuse | Acuse de la operación (en base64) |
fechaOperacion | Fecha de la operación |
Código | Descripción |
---|---|
201 | Solicitud de Cancelación recibida con éxito |
202 | UUID Previamente Cancelado |
203 | UUID No encontrado o no corresponde en el emisor |
204 | UUID No aplicable para cancelación |
205 | UUID No existe |
206 | UUID no corresponde a un CFDI del Sector Primario |
301 | XML mal formado (Revisar descripción) |
302 | Sello mal formado o inválido |
303 | Sello no corresponde al emisor |
304 | Certificado revocado o caduco |
305 | Certificado inválido |
310 | Uso de certificado de e.firma inválido |
320 | Certificado revocado o caduco |
Verificación de estatus
Se recomienda ampliamente hacer el monitoreo de los procesos de cancelación, se hace el recordatorio de que el código 201 devuelto por la autoridad o los proveedores autorizados de certificación no garantiza que el CFDI fue cancelado con éxito, sino que, la solicitud de cancelación fue aceptada para proceder con la cancelación. Por diversos motivos la autoridad puede no proceder con la cancelación (saturación, confusión, entre otros) por lo que es recomendable monitorear su estatus después de recibir un código 201.
Para llevar a cabo esta tarea, la API dispone de un endpoint para la verificación de estatus de cancelaciones: /verificar
/verificar Consultar estatus CFDI
Petición
Tipo
application/json
Cuerpo
Campo | Descripción |
---|---|
rfcEmisor | RFC del emisor del comprobante |
rfcReceptor | RFC del receptor del comprobante |
total | Total exacto del comprobante |
uuid | Folio fiscal del comprobante (UUID) |
POST /cscancelacion/v4/verificar HTTP/1.1
Content-Type: application/json
Host: api.csfacturacion.com
Content-Length: 325
{
"rfcReceptor": "AAA010101AAA",
"total": "1334.00",
"rfcEmisor": "AAA010101AAA",
"uuid": "4AA1138B-BF2E-0143-B7D0-CC2AA44E1DC2"
}
Response
200 OK [CFDI Encontrado]
application/json
{
"codigo": "201",
"mensaje": "S - Comprobante obtenido satisfactoriamente.",
"estatusCfdi": "Cancelado",
"esCancelable": "Cancelable con aceptación",
"estatusCancelacion": "Plazo vencido"
}
200 [CFDI NO ENCONTRADO]
Tipo
application/json
Cuerpo
{
"codigo": "205",
"mensaje": "205 Uuid no existe 4AA1138B-BF2E-0143-B7D0-CC2AA44E1DC2",
"estatusCfdi": null,
"esCancelable": null,
"estatusCancelacion": null
}
422 Datos Inválidos
Tipo
application/json
Cuerpo
{
"codigo": "400",
"mensaje": "Error de validación",
"errores": {
"rfcReceptor": "RFC invalido."
}
}
Cuerpo de la respuesta
El servicio entrega cuatro valores: estado de la consulta, estado del cfdi, estado de cancelabilidad, estado de cancelación.
Campo | Descripción |
---|---|
codigo | Código de referencia de la respuesta (ver códigos en la tabla siguiente) |
mensaje | Mensaje descriptivo de la operación |
estatusCfdi | El estatus actual del comprobante ante el SAT (Vigente, Cancelado) |
esCancelable | Condiciones de cancelación (No cancelable, Cancelable con aceptación, Cancelable sin aceptación) |
estatusCancelacion | Condición bajo la cual procedió o no la cancelación (Cancelado con aceptación, Cancelado sin aceptación, Rechazada, Plazo Vencido, En proceso) |
codigo (estado de consulta)
Este estado está relacionado con la solicitud de información al SAT. No al CFDI.
Código | Descripción |
---|---|
201 | El comprobante está registrado en el SAT |
205 | El comprobante con los datos dados no existe en el SAT |
901 | |
902 | |
903 | |
904 | |
905 |
estatusCfdi (estado del cfdi)
Este estado se debe entender como que el SAT reconoce el CFDI y su estado general.
Vigente
: El comprobante está vigente al momento de la consultaCancelado
: El comprobante está cancelado al momento de la consulta
esCancelable (estado de cancelabilidad)
Se refiere a que si en el momento de la consulta el CFDI se puede cancelar.
No cancelable
: No se puede cancelar, tal vez ya hay documentos relacionados.Cancelable sin aceptación
: Se puede cancelar de inmediato.Cancelable con aceptación
: Se puede cancelar, pero requiere aceptación por parte del receptor.
estatusCancelacion (estado de cancelación)
Se refiere al estado de la cancelación solicitada previamente.
(ninguno/vacío)
: El estado vacío es que no tiene estado de cancelación, porque no fue solicitada.Cancelado sin aceptación
: Se canceló y no fue necesaria la aceptación.En proceso
: En espera de que el receptor o el SAT la autorice.Plazo vencido
: Cancelado por vencimiento de plazo en que el receptor podía denegarla.Cancelado con aceptación
: Cancelado con el consentimiento del receptor.Solicitud rechazada
: No se realizó la cancelación por rechazo del receptor
Campos vacíos
Los campos estatusCfdi
, esCancelable
y estatusCancelacion
son vacíos
cuando se obtiene un codigo distinto a 201
.