# Obtener una factura > `GET https://api.cfdi.express/v1/invoices/{id}` — Devuelve la factura con su estatus, UUID, datos de cancelación y las URLs firmadas del XML, el PDF y el ZIP. URL de esta página: https://cfdi.express/docs/api/obtener-factura Autenticación: requiere API key (`Authorization: Bearer sk_test_…` o `sk_live_…`) 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"`. ### Parámetros de ruta | Campo | Tipo | Requerido | Descripción | |---|---|---|---| | `id` | string | sí | Id de la factura. | ## Ejemplos ### cURL ```bash curl https://api.cfdi.express/v1/invoices/inv7k3q9x2m4v1t8p6d0n5cb \ -H "Authorization: Bearer sk_test_..." ``` ### Node.js — descargar el PDF ```javascript 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 ```json { "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. ## Relacionados - [POST /v1/invoices](https://cfdi.express/docs/api/timbrar-factura) — Timbrar factura - [GET /v1/invoices](https://cfdi.express/docs/api/listar-facturas) — Listar facturas - [POST /v1/invoices/{id}/cancel](https://cfdi.express/docs/api/cancelar-factura) — Cancelar factura --- Referencia completa: https://cfdi.express/docs/api · OpenAPI: https://api.cfdi.express/openapi.json · Llaves: https://dash.cfdi.express