XML, PDF y cancelaciones
Usa el id de FactuCat en las rutas de documentos. El satUuid es el UUID fiscal del comprobante, y no sustituye al ID de la ruta.
Recupera XML y PDF
Sección titulada «Recupera XML y PDF»Con invoice:read, consulta:
GET /invoices/{id}/xmlGET /invoices/{id}/pdf
La respuesta es JSON. Dentro de data encontrarás fileName, mimeType y base64. Decodifica base64 para recuperar los bytes del archivo; no guardes la respuesta JSON como si fuera el PDF o el XML.
import { writeFile } from 'node:fs/promises'
const archivo = await factucat.downloadInvoiceXml(invoiceId)await writeFile('factura.xml', Buffer.from(archivo.base64, 'base64'))Este fragmento usa el cliente factucat de la guía del SDK y el ID de una factura emitida.
El XML timbrado y su UUID representan el comprobante fiscal. El PDF es una representación que puedes personalizar desde Configuración.
Solicita una cancelación
Sección titulada «Solicita una cancelación»Con invoice:cancel, utiliza POST /invoices/{id}/cancel. Proporciona el motivo aplicable y, cuando corresponda, la referencia de sustitución indicada por el contrato.
La respuesta distingue entre cancelled y not_confirmed. No presentes una factura como cancelada si recibiste not_confirmed: conserva la evidencia y verifica el resultado. Un HTTP 200 por sí solo no significa que la cancelación esté confirmada.
La API también dispone de POST /external-invoice-cancellations para el flujo de cancelación externa ya soportado. Consulta sus campos en la referencia.
Eliminar un borrador es otra operación
Sección titulada «Eliminar un borrador es otra operación»DELETE /invoice-drafts/{id} elimina un borrador. No cancela un CFDI emitido.
Cancelar un CFDI no devuelve el timbre consumido. Una sustitución que se timbra con otro UUID genera un nuevo consumo.