Obtener una factura
GEThttps://api.cfdi.express/v1/invoices/{id}API key
Devuelve la factura con su estatus, UUID, datos de cancelación y las URLs firmadas del XML, el PDF y el ZIP.
Es el endpoint que consultas cuando el timbrado respondió 202: repite hasta que status sea stamped.
Las URLs de archivos aparecen dentro de files cuando files.status es ready y expiran en 15 minutos. Vuelve a pedir el recurso para obtener URLs frescas.
También sirve para notas de crédito: son recursos invoice con kind: "credit_note".
Autenticación
Authorization: Bearer sk_test_... | sk_live_...Parámetros
Parámetros de ruta
| Campo | Tipo | Descripción |
|---|---|---|
| idreq | string | Id de la factura. |
Ejemplos
cURL
curl https://api.cfdi.express/v1/invoices/inv7k3q9x2m4v1t8p6d0n5cb \
-H "Authorization: Bearer sk_test_..."Node.js — descargar el PDF
const invoice = await fetch(
`https://api.cfdi.express/v1/invoices/${invoiceId}`,
{ headers: { Authorization: `Bearer ${process.env.CFDI_API_KEY}` } },
).then((r) => r.json());
if (invoice.files.status === "ready") {
const pdf = await fetch(invoice.files.pdfUrl); // vigente 15 min
await writeFile(`${invoice.uuid}.pdf`, Buffer.from(await pdf.arrayBuffer()));
}Respuesta
200 OK
{
"id": "inv7k3q9x2m4v1t8p6d0n5cb",
"object": "invoice",
"livemode": false,
"status": "stamped",
"kind": "nominal",
"uuid": "9f1b2c3d-4e5f-4a6b-8c9d-0e1f2a3b4c5d",
"serie": "A",
"folio": 128,
"folioText": "#1001",
"metodoPago": "PUE",
"formaPago": "03",
"usoCfdi": "G03",
"currency": "MXN",
"subtotal": 3163.79,
"discount": 0,
"total": 3670.00,
"saldoPendiente": null,
"receiver": {
"rfc": "XIA190128J61",
"name": "XENON INDUSTRIAL ARTICLES",
"zip": "01160",
"regimenFiscal": "601"
},
"merchantId": "mkq2f8v3x1t7p9d4n6c0b5rz",
"files": {
"status": "ready",
"xmlUrl": "https://files.cfdi.express/9f1b2c3d....xml?X-Amz-Expires=900&...",
"pdfUrl": "https://files.cfdi.express/9f1b2c3d....pdf?X-Amz-Expires=900&...",
"zipUrl": "https://files.cfdi.express/9f1b2c3d....zip?X-Amz-Expires=900&..."
},
"cancellation": null,
"stampedAt": "2026-08-18T17:42:10.512Z",
"createdAt": "2026-08-18T17:42:08.907Z"
}Errores
| Status | code | Cuándo aparece |
|---|---|---|
| 401 | unauthorized | Falta el header Authorization o la llave es inválida. |
| 404 | not_found | La factura no existe en tu cuenta o pertenece al otro modo. |
Notas
- Si el timbrado falló, el recurso trae
failure: { code, detail }con el motivo.
