Ir al contenido

cancelExternalInvoice()

Solicita la cancelación de un CFDI emitido fuera de FactuCat usando su UUID fiscal y el emisor de la cuenta.

Permiso: invoice:cancel

cancelExternalInvoice(
input: ExternalInvoiceCancelInput,
options?: RequestOptions
): Promise<ExternalInvoiceCancelOutput>

Referencia HTTP: POST /external-invoice-cancellations

  • total se envía como string con el importe del CFDI, no como número. El emisor y su CSD deben estar configurados en la cuenta.
  • Para el motivo 01, proporciona la sustitución que corresponda. replacementInvoiceId identifica una factura de FactuCat; replacementSatUuid identifica su UUID fiscal. Si envías ambos deben coincidir.
  • No trates not_confirmed como una cancelación completada. evidence es unknown; inspecciónala solo después de validar su estructura.
ArgumentoTipoObligatorioUso
inputExternalInvoiceCancelInputSíObjeto con los campos indicados abajo.
optionsRequestOptionsNosignal e idempotencyKey; consulta las opciones por solicitud.

Opciones por solicitud: signal e idempotencyKey.

Los campos siguientes corresponden a input en TypeScript. Un campo opcional se puede omitir; null solo se admite cuando aparece en su tipo. Las validaciones de negocio se ejecutan en el servidor.

CampoTipoObligatorioDescripción
satUuidstringSíUUID fiscal del CFDI timbrado. Es distinto del ID de FactuCat.Formato: uuid
reason"01" | "02" | "03" | "04"SíClave del motivo de cancelación que corresponde a la operación.
receiverRfcstringSíRFC del receptor guardado en el documento.Mínimo 1 carácter
totalstringSíImporte total del documento. En cancelaciones externas se envía como string.Mínimo 1 carácter
replacementInvoiceIdstringNoID de FactuCat de la factura sustituta emitida.Formato: uuid
replacementSatUuidstringNoUUID fiscal del CFDI sustituto.Formato: uuid

Usa el cliente factucat de Instala y conecta. Los IDs y datos fiscales de este ejemplo son ilustrativos: reemplázalos por los registros de tu cuenta y ambiente.

const resultado = await factucat.cancelExternalInvoice(
{
"satUuid": "30112233-4455-4677-8899-aabbccddeeff",
"reason": "02",
"receiverRfc": "AAA010101AAA",
"total": "1160.00"
},
{
"idempotencyKey": "cfdi-externo-1001-cancelar"
},
)
console.log(resultado)

Resuelve una Promise<ExternalInvoiceCancelOutput>. El valor recibido es directamente data, sin el envoltorio HTTP ni sus metadatos.

CampoTipoObligatorioDescripción
status"cancelled" | "not_confirmed"SíEstado del recurso o resultado de la cancelación; consulta las notas del método.
satUuidstringSíUUID fiscal del CFDI timbrado. Es distinto del ID de FactuCat.
replacementSatUuidstringNoUUID fiscal del CFDI sustituto.
evidenceunknownSíEvidencia de la cancelación sin estructura tipada. Valídala antes de acceder a sus propiedades.

Ejemplo de respuesta

{
"status": "not_confirmed",
"satUuid": "30112233-4455-4677-8899-aabbccddeeff",
"evidence": null
}

Las fechas se entregan como cadenas ISO 8601. Un campo opcional puede estar ausente. Tipos, paginación y archivos.

La promesa se rechaza si la API devuelve un error, falla la conexión o los datos no cumplen el contrato. Cómo manejar los errores.