List all purchase invoices
List purchase invoices received from suppliers with cursor-based pagination.
In: header
Query Parameters
Number of objects to return. Integer between 1 and 100. Defaults to 25.
251 <= value <= 100Cursor for forward pagination. Use the uuid of the last object on the previous page.
uuidCursor for backward pagination. Use the uuid of the first object on the current page.
uuidPurchase invoice status. Exact match on status.
Purchase invoice status. Comma-separated list. Any of the values matches.
Supplier ID (UUID v7). Exact match on supplier_id.
uuidSupplier ID (UUID v7). Comma-separated list. Any of the values matches.
Creation date (ISO 8601). Greater than or equal to the given value.
date-timeCreation date (ISO 8601). Less than or equal to the given value.
date-timeCreation date (ISO 8601). Strictly greater than the given value.
date-timeCreation date (ISO 8601). Strictly less than the given value.
date-timeIssue date. Greater than or equal to the given value.
dateIssue date. Less than or equal to the given value.
dateIssue date. Strictly greater than the given value.
dateIssue date. Strictly less than the given value.
dateTotal amount. Greater than or equal to the given value.
Total amount. Less than or equal to the given value.
Total amount. Strictly greater than the given value.
Total amount. Strictly less than the given value.
ISO 4217 currency code. Exact match on currency.
ISO 4217 currency code. Comma-separated list. Any of the values matches.
Invoice number issued by the supplier. Exact match on external_invoice_number.
Filter by classification tag (lowercase slug). Supports multiple values with tags[in]=a,b (JSON_CONTAINS, OR semantics — matches purchase invoices carrying ANY of the tags). Exact match on tags.
Filter by classification tag (lowercase slug). Supports multiple values with tags[in]=a,b (JSON_CONTAINS, OR semantics — matches purchase invoices carrying ANY of the tags). Comma-separated list. Any of the values matches.
Sort order. Use a field for ascending or a - prefix for descending (e.g. -created). Allowed fields: created, total, issued_on, due_on. Combined with the cursor, ordering stays deterministic (a stable secondary sort by the cursor id, Stripe-style). When omitted, results follow the default cursor order (created descending).
"created" | "-created" | "total" | "-total" | "issued_on" | "-issued_on" | "due_on" | "-due_on"Response Body
application/json
application/json
application/json
application/json
application/json
application/json
import { Factuarea } from "@factuarea/sdk";const factuarea = new Factuarea({ apiKey: process.env.FACTUAREA_API_KEY! });// List endpoints return an async-iterable Page (cursors handled for you).for await (const item of await factuarea.purchaseInvoices.list({ limit: 25 })) { console.log(item.id);}{
"data": [
{
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a07",
"object": "purchase_invoice",
"external_invoice_number": "INV-2026-001-DI",
"external_id": "ERP-COMPRA-2026-0007",
"internal_code": "GASTO-2026-0007",
"supplier": {
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a02",
"name": "Distribuciones Ibéricas, S.L."
},
"status": "paid",
"issued_on": "2026-01-05",
"received_on": "2026-04-18",
"due_on": "2026-02-04",
"subtotal": 350,
"taxes_total": 73.5,
"total_retention": 0,
"total": 423.5,
"currency": "EUR",
"paid_amount": 423.5,
"pending_amount": 0,
"payment_status": "paid",
"paid_at": "2026-01-10",
"payment_method": "transferencia",
"payment_terms_days": 30,
"bank_account": null,
"expense_account": "6280001",
"expense_category_id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8c01",
"deductible_percentage": 100,
"operation_class": "corriente",
"exclude_347": false,
"tax_period": "2026-Q2",
"is_reverse_charge": false,
"tags": [
"suministros",
"oficina"
],
"custom_fields": [
{
"field": "centro_coste",
"value": "CC-OFICINA"
}
],
"internal_notes": "Revisar con contabilidad antes del cierre trimestral.",
"attachment": {
"filename": "factura-suministros-abril-2026.pdf",
"mime_type": "application/pdf",
"size_bytes": 241,
"download_url": "/v1/purchase_invoices/019e822c-555a-709d-99d7-2cfeac9fc920/file"
},
"lines": [
{
"object": "purchase_invoice_line",
"description": "Material oficina pedido Q1",
"quantity": 1,
"unit_price": 350,
"tax_rate": 21,
"retention_rate": 0,
"subtotal": 350,
"taxes": 73.5,
"retention_amount": 0,
"vat_deductible": true,
"total": 423.5
}
],
"metadata": {
"erp_code": "IVA-GEN",
"ledger_account": "477000"
},
"notes": "Pedido material oficina Q1.",
"created_at": "2026-01-08T10:00:00Z",
"updated_at": "2026-01-10T12:00:00Z"
}
],
"has_more": true,
"next_cursor": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a0c"
}{
"error": {
"type": "authentication_error",
"code": "missing_api_key",
"message": "No se ha proporcionado una API key válida en el header Authorization.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#missing_api_key",
"request_id": "req_01HKQS5N8VR7QXJ9K3T6BWPMZA"
}
}{
"error": {
"type": "authorization_error",
"code": "insufficient_scope",
"message": "Esta API key no tiene el scope requerido para esta operación.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#insufficient_scope",
"request_id": "req_01HKQS5NBC3P8M1KX4V7SLNHQD"
}
}{
"error": {
"type": "invalid_request_error",
"code": "parameter_invalid",
"message": "El campo `name` es obligatorio y no puede estar vacío.",
"param": "name",
"doc_url": "https://docs.factuarea.com/guides/errors#parameter_invalid",
"request_id": "req_01HKQS5NGS8Z3T6Q1D2E7FYVSI"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Has excedido el rate limit de 60 peticiones por minuto. Reintenta tras 30 segundos.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#rate_limit_exceeded",
"request_id": "req_01HKQS5NKW1C6W9T4G5H0JBZVL"
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Ha ocurrido un error inesperado. Si persiste, contacta con soporte adjuntando el request_id.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#internal_error",
"request_id": "req_01HKQS5NLX2D7X0U5H6J1KCAWM"
}
}