Listar facturas
GEThttps://api.cfdi.express/v1/invoicesAPI key
Lista facturas con filtros por emisor, tipo, estatus, método de pago, UUID y rango de fechas. Paginación por cursor.
Las notas de crédito viven en la misma colección: fíltralas con kind=credit_note.
Autenticación
Authorization: Bearer sk_test_... | sk_live_...Parámetros
Query string
| Campo | Tipo | Descripción |
|---|---|---|
| limit | integer | Elementos por página. Entre 1 y 100. Default 10. |
| starting_after | string | Id de la última factura de la página anterior (cursor). |
| merchantId | string | Filtra por emisor. |
| kind | string | nominal, global o credit_note. |
| status | string | stamping, stamped, stamp_failed, cancel_pending o cancelled. |
| uuid | string | Busca por folio fiscal (UUID) del SAT. |
| metodoPago | string | PUE o PPD. |
| createdFrom | string | Fecha ISO 8601 mínima de creación. |
| createdTo | string | Fecha ISO 8601 máxima de creación. |
Ejemplos
cURL
curl -G https://api.cfdi.express/v1/invoices \
-H "Authorization: Bearer sk_test_..." \
--data-urlencode "status=stamped" \
--data-urlencode "metodoPago=PPD" \
--data-urlencode "createdFrom=2026-08-01T00:00:00Z" \
--data-urlencode "limit=20"Node.js — paginación
const all = [];
let cursor;
do {
const url = new URL("https://api.cfdi.express/v1/invoices");
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("starting_after", cursor);
const page = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.CFDI_API_KEY}` },
}).then((r) => r.json());
all.push(...page.data);
cursor = page.has_more ? page.data.at(-1).id : undefined;
} while (cursor);Respuesta
200 OK
{
"object": "list",
"data": [
{
"id": "inv7k3q9x2m4v1t8p6d0n5cb",
"object": "invoice",
"livemode": false,
"status": "stamped",
"kind": "nominal",
"uuid": "9f1b2c3d-4e5f-4a6b-8c9d-0e1f2a3b4c5d",
"serie": "A",
"folio": 128,
"folioText": "#1001",
"metodoPago": "PPD",
"formaPago": "99",
"usoCfdi": "G03",
"currency": "MXN",
"subtotal": 3163.79,
"discount": 0,
"total": 3670.00,
"saldoPendiente": 1670.00,
"receiver": {
"rfc": "XIA190128J61",
"name": "XENON INDUSTRIAL ARTICLES",
"zip": "01160",
"regimenFiscal": "601"
},
"merchantId": "mkq2f8v3x1t7p9d4n6c0b5rz",
"files": { "status": "ready" },
"cancellation": null,
"stampedAt": "2026-08-18T17:42:10.512Z",
"createdAt": "2026-08-18T17:42:08.907Z"
}
],
"has_more": true
}Errores
| Status | code | Cuándo aparece |
|---|---|---|
| 401 | unauthorized | Falta el header Authorization o la llave es inválida. |
| 429 | rate_limited | Excediste el límite de requests por minuto de tu cuenta (300 por default). La respuesta incluye Retry-After. |
